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

cod57
Invité n'ayant pas de compte PHPfrance

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

Mammouth du PHP | 2278 Messages

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
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 40 Messages

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

cod57
Invité n'ayant pas de compte PHPfrance

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
++

Eléphanteau du PHP | 40 Messages

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é

Eléphanteau du PHP | 40 Messages

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

Eléphanteau du PHP | 40 Messages

23 août 2013, 22:22

j'aiiiiiiiiiiiiiiiiiii trouvé j'avais oublié
$file = 'guestbook.txt';
un grand merci pour ton aide =D>
Modifié en dernier par scoubi le 23 août 2013, 23:38, modifié 1 fois.