[RESOLU] problème pour censurer des mots dans un livre d'or

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] problème pour censurer des mots dans un livre d'or

Re: problème pour censurer des mots dans un livre d'or

par scoubi » 23 août 2013, 22:22

j'aiiiiiiiiiiiiiiiiiii trouvé j'avais oublié
$file = 'guestbook.txt';
un grand merci pour ton aide =D>

Re: problème pour censurer des mots dans un livre d'or

par scoubi » 23 août 2013, 20:06

je craque !!!!

après trois heures je ne suis arrivé à rien
function censorWords($find=array(),$text=null){
$replace = ' * ';
return preg_replace($find,$replace,$text);
}


/*liste des mots a filtrer ou expression aussi longue que tu veux*/
$find = array(
'/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);

$newmail = censorWords($find,$mail);
$newnom = censorWords($find,$nom);
$newmessage = censorWords($find,$message);




$page = "";



$page .= "&nbsp;<b>$newnom</b> &nbsp; ($newmail) &nbsp;le:&nbsp; $d<br>&nbsp;$newmessage<br><hr>\n";
dans mon code j'ai tout essayé, je pensais avoir compris le code mais
je tourne en rond...
peux tu m'aider s'il te plait

Re: problème pour censurer des mots dans un livre d'or

par scoubi » 23 août 2013, 16:48

je te remercie j'ai suivi avec beaucoup d'attention cette vidéo et cela reprend ( je parle du concept bien sûr ) le type de variable que j'ai plus l'habitude de manipuler en vba excel.
Par contre pour Sirakawa j'ai testé
annexe:
$mots_a_censurer = array(' con ',' merde ', ' etc... ', "pauvre nul");
fonctionne correctement; il faut juste faire attention à l'ordre des mots
et "pauvre nul" ne fonctionne pas !
je vais tacher de comprendre je te remercie et reviens vers toi une fois ce bout d'essai terminé

Re: problème pour censurer des mots dans un livre d'or

par cod57 » 23 août 2013, 14:12

en fait ta réponse est dans la compréhension de la fonction
comment faire une fonction php
http://www.youtube.com/watch?v=5mhyjuAvGxA
++

Re: problème pour censurer des mots dans un livre d'or

par scoubi » 23 août 2013, 10:25

Merci à toi cod57,

Mais enfait non j'ai du mal là !!!
je suis débutant mais j'essaie de m'accrocher.
<?php
error_reporting(E_ALL ^ E_NOTICE);
/*on regarde les variables superglobales $_POST ou et $_GET
qui sont utiliser dans cette page
*/
echo '<pre>';
print_r( $_POST);
print_r( $_GET);
echo '</pre>'
comme mon message est remplacé par seulement **** j'ai compris que cela venait de

Code : Tout sélectionner

$message ='****'; echo $resultat = censorWords($message);
car j'affecte comme valeur **** à la variable message,
mais je voudrais conserver mon message et seulement remplacer l'expression par *****
comment en partant de mon code le modifier pour obtenir ce résultat ?

Te remerciant par avance

Re: problème pour censurer des mots dans un livre d'or

par sirakawa » 23 août 2013, 09:27

Voici le code original commenté et modifié:
<?php
/*en phase de tests:*/
error_reporting(E_ALL);

/*quand tout va bien :
error_reporting(0);*/

/*A quoi sert chaine ?
$chaine = "ça pue les colins";*/

//Ouverture du fichier en écriture

/*$fp = fopen("/htdocs/livredor/guestbook.txt",a);
Changement du chemin pour raisons personnelles.
Modification de "a", mis entre quotes comme dit avant moi, et remplacement par "ab" comme dit la doc officielle:
Pour des raisons de portabilité, il est recommandé de toujours utiliser l'option 'b' lorsque vous ouvrez des fichiers avec fopen()*/
$fp = fopen("guestbook.txt", "ab");

//On convertit les caracteres html
/*A quoi sert chaine ?
echo htmlspecialchars_decode (htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1'));*/

/*
modifié par commodité personnelle*/
$nom = stripslashes ("Toto");
/*Il vaudrait mieux utiliser filter_var*/
$mail = filter_var("[email protected]", FILTER_SANITIZE_EMAIL);
$lemail = filter_var($mail, FILTER_VALIDATE_EMAIL);
if ($lemail == false)
{
	print "mauvais mail on fait quoi?";
	exit;
}
$message = "ça pue les colins";

$mots_a_censurer = array(' con ',' merde ', ' etc... ');
$message = str_replace($mots_a_censurer, ' *** ', $message);

$d = date ( "d/m/Y H:i:s" );
$page = "";
/*nouvelle norme <br /><hr />; 
$page .= "&nbsp;<b>$nom</b> &nbsp; ($lemail) &nbsp;le:&nbsp; $d<br />&nbsp;$message<br /><hr />\n";

//On rajoute le message
fwrite($fp,"$page" ,strlen("$page"));

//fermeture du fichier
fclose($fp);
?>
annexe:
$mots_a_censurer = array(' con ',' merde ', ' etc... ', "pauvre nul");
fonctionne correctement; il faut juste faire attention à l'ordre des mots

Re: problème pour censurer des mots dans un livre d'or

par cod57 » 23 août 2013, 09:19

je reprend

$fp = fopen("/htdocs/livredor/guestbook.txt",a);
mais
$fp = fopen("/htdocs/livredor/guestbook.txt","a+");

écriture ligne à ligne et les guillemets

les variables doivent être définies pour un bon fonctionnement
on utilise isset ... il faudrait que tu donnes la liste des erreurs
que retourne php donc utiliser en mode création
ton script devrait commencer par error_reporting
pour avoir un rapport détailler

<?php
error_reporting(E_ALL ^ E_NOTICE);
/*on regarde les variables superglobales $_POST ou et $_GET
qui sont utiliser dans cette page
*/
echo '<pre>';
print_r( $_POST);
print_r( $_GET);
echo '</pre>'

la tu sais déjà un peu mieux ou ça coince

Re: problème pour censurer des mots dans un livre d'or

par scoubi » 23 août 2013, 07:07

Un grand merci pour ta réponse, mais j'aimerais comprendre mon erreur.
Pourrais tu me corriger mon script et m'expliquer la ou j'ai faux car je pense que c'est ainsi que l'on progresse.
Je te remercie par avance
Scoubi

Re: problème pour censurer des mots dans un livre d'or

par Invité » 23 août 2013, 00:17

$newdata = $data.$newdata."\r\n";/*on concatene*/

ou du plus recent au plus vieux

$newdata = $newdata.$data."\r\n";/*on concatene*/

+++

Re: problème pour censurer des mots dans un livre d'or

par cod57 » 23 août 2013, 00:11

un gustbook basic ++
<?php
$mail='';
$nom='';
$message='';
$file = 'guestbook.txt';
/*creation du fichier si inexistant*/
if(!file_exists($file)){
$h=fopen($file,'a+');
fclose($h);
}



/*si les variables sont envoyes de puis le form*/
if(isset($_POST['sbtbtn']) &&  $_POST['sbtbtn']==='envoyer'){

$mail=htmlspecialchars(strip_tags(trim($_POST['mail'])));
$nom=htmlspecialchars(strip_tags(trim($_POST['nom'])));
$message=htmlspecialchars(strip_tags(trim($_POST['message'])));

function censorWords($find=array(),$text=null){
$replace = ' * ';
return preg_replace($find,$replace,$text);
}

/*liste des mots a filtrer ou expression aussi longue que tu veux*/
$find = array(
'/sale porc\s/i',
'/grosse truie qui pue\s/i',
'/shit\s/i',
'/fuck\s/i',
'/ass\s/i',
'/asshole\s/i'
);

$newmail = censorWords($find,$mail);
$newnom = censorWords($find,$nom);
$newmessage = censorWords($find,$message);

	if(empty($newmail) || empty($newnom) || empty($newnom) ){
	echo 'des champs sont vides<br>';
	}else{
    /*sinon ok on prepare le message*/ 

	$newdata  = '<hr>';
	$newdata .= 'Posté par <b>'.$newnom.'</b> le '.date('d m Y H:i:s').'<br>';
	$newdata .= '<a href="mailto:'.$newmail.'">'.$newmail.'</a><br>';
	$newdata .= 'Message:<br>'.$newmessage;
	$newdata .= '<hr>';
    
	/*on ouvre le fichier*/
	$data = file_get_contents($file);
	$newdata = $data.$newdata."\r\n";/*on concatene*/
	/*on rajoute le message au messages deja dans le fichier*/
	/*on ajoute la ligne*/
	$data = file_put_contents($file,$newdata);
	}

}


?>
<form method="post" action="">
<br>Nom:
<br><input type="text" name="nom">
<br>Mail:
<br><input type="text" name="mail">
<br>Message:
<br><textarea name="message" cols="51" rows="5"></textarea>
<br><input type="submit" name="sbtbtn" value="envoyer">
</form>
<?php
include($file);
?>

Re: problème pour censurer des mots dans un livre d'or

par scoubi » 22 août 2013, 22:53

j'ai modifié comme ceci

Code : Tout sélectionner

function censorWords($text=null){ $find = array( '/sale porc\s/i', '/grosse truie qui pue\s/i', '/shit\s/i', '/fuck\s/i', '/ass\s/i', '/asshole\s/i' ); $replace = '*****'; return preg_replace($find,$replace,$message); } $message ='****'; echo $resultat = censorWords($message);
mais du coup il n'affiche comme message **** et n'affiche pas le reste à cause de $message ='****'; !!! snif je tourne en rond tel un poisson rouge dans un bocal !!!

Re: problème pour censurer des mots dans un livre d'or

par scoubi » 22 août 2013, 22:46

j'ai avancé en modifiant ainsi

Code : Tout sélectionner

<?php //Ouverture du fichier en écriture $fp = fopen("/htdocs/livredor/guestbook.txt",a); //On convertit les caracteres html echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1')); $nom = stripslashes ($_POST['nom']); $mail = stripslashes ($_POST['mail']); $message = stripslashes ($_POST['message']); function censorWords($text=null){ $find = array( '/sale porc\s/i', '/grosse truie qui pue\s/i', '/shit\s/i', '/fuck\s/i', '/ass\s/i', '/asshole\s/i' ); $replace = '*vilain mot*'; return preg_replace($find,$replace,$text); } $message_a_filtrer ='voila le message qui doit etre filtre il contient shit et aussi fuck et grosse truie qui pue ...'; echo $resultat = censorWords($message_a_filtrer); $d = date ( "d/m/Y H:i:s" ); $page = ""; $lemail = $mail; $page .= "&nbsp;<b>$nom</b> &nbsp; ($lemail) &nbsp;le:&nbsp; $d<br>&nbsp;$message<br><hr>\n"; //On rajoute le message fwrite($fp,"$page" ,strlen("$page")); //fermeture du fichier fclose($fp); ?>
mais aulieu de mettre **** à la place j'ai une phrase en haut de mon livre d'or :voila le message qui doit être filtre il contient *vilain mot*et aussi *vilain mot*et *vilain mot*... cela vient sans aucun doute
de :

Code : Tout sélectionner

$message_a_filtrer ='voila le message qui doit etre filtre il contient shit et aussi fuck et grosse truie qui pue ...'; echo $resultat = censorWords($message_a_filtrer);
comment coriger dans $message ?

Re: problème pour censurer des mots dans un livre d'or

par scoubi » 22 août 2013, 22:40

merci pour ton aide mais je n'arrive pas à le faire fonctionner !!!
voici mon code :

Code : Tout sélectionner

<?php function censorWords($text=null){ $find = array( '/sale porc\s/i', '/grosse truie qui pue\s/i', '/shit\s/i', '/fuck\s/i', '/ass\s/i', '/asshole\s/i' ); $replace = '*vilain mot*'; return preg_replace($find,$replace,$text); } $message_a_filtrer ='voila le message qui doit etre filtre il contient shit et aussi fuck et grosse truie qui pue ...'; echo $resultat = censorWords($message_a_filtrer); ?> <?php //Ouverture du fichier en écriture $chaine=''; $fp = fopen("/htdocs/livredor/guestbook.txt",a); //On convertit les caracteres html echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1')); $nom = stripslashes ($_POST['nom']); $mail = stripslashes ($_POST['mail']); $message = stripslashes ($_POST['message']); $d = date ( "d/m/Y H:i:s" ); $page = ""; $lemail = $mail; $page .= "&nbsp;<b>$nom</b> &nbsp; ($lemail) &nbsp;le:&nbsp; $d<br>&nbsp;$message<br><hr>\n"; //On rajoute le message fwrite($fp,"$page" ,strlen("$page")); //fermeture du fichier fclose($fp); ?>
peux tu me dire pourquoi ?
merci par avance

Re: problème pour censurer des mots dans un livre d'or

par cod57 » 22 août 2013, 21:35

exemple
<?php
function censorWords($text=null){
$find = array( '/sale porc\s/i',
   '/grosse truie qui pue\s/i',
   '/shit\s/i',
   '/fuck\s/i',
   '/ass\s/i',
   '/asshole\s/i'
   );
$replace = '*vilain mot*';
return preg_replace($find,$replace,$text);
}


$message_a_filtrer ='voila le message qui doit etre filtre
il contient shit et aussi fuck et grosse truie qui pue ...';

echo $resultat = censorWords($message_a_filtrer);


?>

Re: problème pour censurer des mots dans un livre d'or

par cod57 » 22 août 2013, 21:28

oui ça devrait fonctionner ainsi