[Brico] Controler dynamiquement le commentaire avant validation

TikehauTikehau Member
avril 2008 modifié dans Modifications
A mes yeux un inconvénient majeur de la constitution d'un commentaire est l'absence de vérification de la saisie et l'absence de la notification en retour des erreurs commises par le posteur.
Les codes ci-dessous vous permettront d'adapter votre code pour y parvenir : sur ce même principe vous pouvez également adapter un formulaire de contact.

dans template.php substituez :
<?php if($pluxml->config['allow_com'] == 1 && $pluxml->result->f('allow_com') == 1) : ?>
	<div id="form">
		<h2>Ecrire un commentaire</h2>
		<form action="index.php?<?php echo $pluxml->get; ?>" method="post">
			<fieldset>
				<label>Nom :</label>
				<input name="name" type="text" size="30" value="" /><br />
				<label>Site (facultatif) :</label>
				<input name="site" type="text" size="30" value="http://" /><br />
				<label>E-mail (facultatif) :</label>
				<input name="mail" type="text" size="30" value="" /><br />
				<label>Commentaire :</label>
				<textarea name="message" cols="35" rows="8"></textarea>
				
				<?php # affichage du capcha anti-spam
				if($pluxml->config['capcha'] == 1){
					echo '<label><strong>Vérification anti-spam</strong> :</label>';
					echo '<p>'.$capcha->q().'<input name="rep" type="text" size="10" /></p>';
					echo '<input name="rep2" type="hidden" value="'.$capcha->r().'" />';
				} ?>
				
				<p><input type="submit" value="Envoyer" /></p>
			</fieldset>
		</form>
	</div>
	<?php endif; ?>
par ceci :
<?php if($pluxml->config['allow_com'] == 1 && $pluxml->result->f('allow_com') == 1) : ?>
<?php include(PLX_DOC.'plugins/commentaire_form.php'); ?>
<?php endif; ?>
Créer la commmentaire_form.php dans le répertoire plugins :
<?php
if (!isset($_POST['name'])) {$_POST['name'] = '';}
if (!isset($_POST['site'])) {$_POST['site'] = 'http://';}
if (!isset($_POST['mail'])) {$_POST['mail'] = '';}
if (!isset($_POST['message'])) {$_POST['message'] = ' Bonjour,';} 
if (!isset($_POST['name'])) {$_POST['name'] = '';}
if (!isset($valid)) $valid = "0";
$capcha = new capcha();
if (isset($_POST['envoyer']))
	{
	global $capcha;
	// Contrôle saisie
	if (empty($_POST['name']) || empty($_POST['message']) || strlen($_POST['message']) < 10 || $_POST['rep2'] != md5($capcha->grain_de_sel.$_POST['rep']))
		{
		$valid = "1";
		$compte_rendu = '<br /><p class="couleur"> Vous n\'avez pas rempli tous les champs...</p>';
		if (empty($_POST['name']))
			{
			$compte_rendu = $compte_rendu . ' Veuillez saisir un nom ou un pseudo<br />';
			}
		if (empty($_POST['mail']))
			{
			$compte_rendu = $compte_rendu . ' Veuillez saisir une adresse E-Mail valide<br />';
			} 
		if (strlen($_POST['message']) < 10)
			{
			$compte_rendu = $compte_rendu . ' Veuillez saisir un commentaire significatif (plus de 10 caractères)<br />';
			}
		if ($_POST['rep2'] != md5($capcha->grain_de_sel.$_POST['rep']) && !empty($_POST['rep']))
			{
			$compte_rendu = $compte_rendu . ' La vérification Anti-Spam a échouée !<br />';
			}
		if (empty($_POST['rep']))
			{
			$compte_rendu = $compte_rendu . ' Vous devez répondre au contrôle Anti-Spam<br />';
			}
		else		
			{
			$compte_rendu = $compte_rendu . ' Vous devez à nouveau répondre au contrôle Anti-Spam<br />';			
			}
		$compte_rendu = $compte_rendu . '<br />';
		}
	else
		{
		// Traitement données correctes
		if (!empty($_POST['name']) && !empty($_POST['mail']) && strlen($_POST['message']) > 10 && $_POST['rep2'] == md5($capcha->grain_de_sel.$_POST['rep']))
			{
			$nom = stripslashes($_POST['name']);
			$mail = $_POST['mail'];
			$mes = $_POST['message'];
			// nettoyage du commentaire
			$mes=htmlentities($mes);
			$mes=str_replace(chr(10)," <br /> ",$mes);
			$mes=str_replace(chr(13),"",$mes);
			$mes=stripslashes($mes);
			$mes=trim($mes);
			$valid = "2";		
			$merci = 'Votre commentaire est validé ! <br />Merci pour votre contribution et à très bientôt :)';
			}			
		}
	}
if ($valid == "0" || $valid == "1")
	{	
	echo '<h2 class="title">écrire un commentaire</h2>';
	echo '<form action="index.php?';
	echo $pluxml->get;
	echo '#comments" method="post"><fieldset>';
	if ($valid == "1")
		{
		echo $compte_rendu;
		}	
	else
		{
		echo '<br /><p class="couleur"> Merci de remplir les champs obligatoires * :)</p>';		
		}	
	echo '<label> Nom ou Pseudo * :</label><br />';	
	if ($_POST['name'] == '')
		{
		echo ' <input name="name" type="text" size="30" maxlength="90" /><br /><br />';
		}
	else
		{
		echo ' <input name="name" type="text" size="30" value="' . $_POST['name'] . '" /><br /><br />';
		}
	echo '<label> Site (Facultatif mais constitue l\'URL de votre Nom ou Pseudo) :</label><br />';
	if ($_POST['site'] == '')
		{
		echo ' <input name="site" type="text" size="30" /><br /><br />';
		}
	else
		{
		echo ' <input name="site" type="text" size="30" value="' . $_POST['site'] . '" maxlength="120" /><br /><br />';
		}		
	echo '<label> E-mail (N\'apparaîtra jamais avec votre commentaire) * :</label><br />';	
	if ($_POST['mail'] == '')
		{
		echo ' <input name="mail" type="text" size="40" maxlength="120" /><br /><br />';
		}
	else
		{
		echo ' <input name="mail" type="text" size="40" value="' . $_POST['mail'] . '" maxlength="120" /><br /><br />';
		}		
	echo ' <label>Votre commentaire * :</label><br />
		 <textarea name="message" cols="35" rows="8">' . $_POST['message'] . '</textarea><br /><br />';				
	# affichage du capcha anti-spam
	if($pluxml->config['capcha'] == 1)
		{		
		echo ' <label><strong> Vérification anti-spam</strong> * :</label><br />';
		echo ' ' . $capcha->q() . ' <input name="rep" type="text" size="1" /><br /><br />';
		echo '<input name="rep2" type="hidden" value="' . $capcha->r() . '" />';
		}		
	echo ' <input type="submit" name="envoyer" value="Envoyer" id="go"/><br /><br /></fieldset></form>';
	}
else
	{
	$pluxml->newComment($_GET['article']);
	$message = $_POST['message'];
	echo '<h1 class="title">Votre commentaire</h1><div class="post"><h3 class="title"><strong>' . $_POST['name'] . '</strong></h3>
		<div class="entry"><blockquote><p>' . $message . '</p></blockquote></div></div>';
	echo $merci . '<br />';
	}	
?>
Le résultat en images :

screenshot00326.png

screenshot00425.png

[url=\'http://www.zimagez.com/zimage/screenshot00517.php]screenshot00517.png[/url]

Sauf erreur ou omission tout devrait fonctionner. Chez moi c'est garanti sans bug toutefois il s'agit ici d'une adaptation que vous devez réaliser dans votre environnement Pluxml.
Je conseillerai toutefois de rajouter des contrôles plus stricts ne serais-ce que sur la validité de l'adresse mail et de s'assurer que dans le commentaire on ne trouve pas quelque chose qui ressemblerait à ceci (spam !) :
if (eregi("(cc:|cci:|bcc:|from:)",$_POST)) => jeter le commentaire et prévenir l'usager... voir mettre en oeuvre du bannissement temporaire d'IP.

Bon code à vous et longue vie à Pluxml !
Connectez-vous ou Inscrivez-vous pour répondre.