Livre d'or

Fermé
mick - 6 juil. 2010 à 14:58
avion-f16 Messages postés 19125 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 23 mars 2023 - 7 juil. 2010 à 17:26
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 220 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 9
6 juil. 2010 à 15:13
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
il n'y a pas un autre moyen de faire pour consommer moins de requête ?
0
personne ne sais ?
0
avion-f16 Messages postés 19125 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 23 mars 2023 4 468
7 juil. 2010 à 17:26
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