Livre d'or

mick -  
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je souhaite mette un contrôle sur mot livre d'or : que si le visiteur met certains mots le message ne s'affiche pas automatiquement

quel script je dois faire?

Merci de votre aide

4 réponses

GDX Messages postés 239 Statut Membre 9
 
Il faut te servir d'une base de données SQL dans laquelle tu entreras tout les mots que tu ne veux pas. Ensuite tu compares le message mot par mot avec la base de données. Et si tu trouve une correspondance tu n'enregistre pas le message, ça évitera d'encombrer ta BDD.
0
mick
 
il n'y a pas un autre moyen de faire pour consommer moins de requête ?
0
mick
 
personne ne sais ?
0
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 510
 
Salut.

Tu peux ajouter un champ "valide" (booléen) sur ta table.

Ensuite, tu peux utiliser des regex pour trouver si des mots sont présents. Si oui, alors tu mets 0 dans le champ valide, si non, tu mets 1.

<?php
if(isset($_POST['pseudo']) && isset($_POST['message'])) {
	$pseudo = trim($_POST['pseudo']);
	$message = trim($_POST['message']);
	
	if(empty($pseudo) || empty($message)) {
		echo 'Vous devez remplir les champs "Pseudo" et "Message" !<br/>';
		afficherFormulaire();
		
		$valide = preg_match('#mot1|mot2|mot3|mot4#i',$message) ? 0 : 1;
		
		try {
			$pdo = new PDO('mysql:host=localhost;dbname=la_base','root','');
			
			$sql = 'INSERT INTO livre_or(
				pseudo,
				message,
				valide
			) VALUES('
				.$pdo->quote($pseudo).','
				.$pdo->quote($message).','
				.$valide
			.')';
			$pdo->exec($sql);
		} catch(PDOException $e) {
			echo 'Erreur SQL : '.$e->getMessage();
		}
	}
	
} else {
	afficherFormulaire();
}
?>
0