Problème avec condition ! [Résolu]

Signaler
Messages postés
100
Date d'inscription
dimanche 23 novembre 2014
Statut
Membre
Dernière intervention
10 décembre 2020
-
Messages postés
100
Date d'inscription
dimanche 23 novembre 2014
Statut
Membre
Dernière intervention
10 décembre 2020
-
Bonjour,
J'ai ceci qui me sert a savoir si quelconque user écrit le meme message qui celui tapé précédemment

<?php
$pseudo = $_POST['pseudo'];
$message = $_POST['message'];
$content = file('/var/www/html/txt/mot.txt');
if ($message == $content[0]") {
echo "ca fonctionne";
}
else {
echo "c'est ok ce n'est pas le meme message..."
}
?>


message etant recu d'un formulaire, $content[0] étant le premier mot du fichier mot.txt
Quand je dis ca ne fonctionne pas, cela veut dire que soit quand je met = on rentre dans le if sans arrêt , == on rentre dans le else sans arret (le if n'est plus pris en compte ...)

Merci de votre aide (mon fichier mot.txt a les bonnes permissions)

Configuration: Windows / Chrome 87.0.4280.88


2 réponses

Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176
Bonjour,

Déjà, quand tu postes du code sur le forum, tu dois le faire correctement ( en précisant le langage dans les balises de code )
Explications ( à lire ENTIEREMENT !! ) disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite, active l'affichage des erreurs PHP
https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Tu remarqueras alors que tu as mis des quotes en trop dans ton if....
if ($message == $content[0]") {


Et si le souci persiste .... affiche donc le contenu de $content ainsi que de $_POST pour t'assurer de leur contenu..

var_dump($content);
var_dump($_POST);
if ($message == $content[0]) {


Messages postés
100
Date d'inscription
dimanche 23 novembre 2014
Statut
Membre
Dernière intervention
10 décembre 2020
48
ok,

<?php
$pseudo = $_POST['pseudo'];
$message = $_POST['message'];
$content = file('/var/www/html/txt/mot.txt');
var_dump($content);
var_dump($_POST);
if ($message == $content[0] || empty($pseudo) || empty($message) || ctype_space($pseudo) || ctype_space($message) || $pseudo == "Visiteur") {
echo '<script> alert("Merci de renseigner un pseudo et/ou message");</script>';
}
else {
blabla 
}

exactement le meme problème :(
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176 >
Messages postés
100
Date d'inscription
dimanche 23 novembre 2014
Statut
Membre
Dernière intervention
10 décembre 2020

Et... juste comme ça... parce que ..ben.. on pourrait penser ( à juste titre...) que ça puisse être utile.... pourrais tu nous montrer ce que te retournent les var_dump ??

Et puis... j'espère que tu n'as pas écrit "blabla" ... dans du code php.. sinon ça va te mettre une erreur....

Et je t'ai également demandé d'activer l'affichage des erreurs php .. je ne vois pas les lignes de code le permettant au début de ton script..
Messages postés
100
Date d'inscription
dimanche 23 novembre 2014
Statut
Membre
Dernière intervention
10 décembre 2020
48 >
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021

t'as l'air vénère lol ! Et non je n'ai pas mis blabla dans mon code quand meme ..

j'ai fais un essai plus simple que tu vas comprendre facilement.

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
$pseudo = $_POST['pseudo'];
$message = $_POST['message'];
$content = file('/var/www/html/txt/mot.txt');
var_dump($content);
echo "a partir d'ici c'est ce qu'on écrit dans le formulaire";
var_dump($_POST);

if ($message == $content[0] || empty($pseudo) || empty($message) || ctype_space($pseudo) || ctype_space($message) || $pseudo == "Visiteur") {
echo "on écrit pas c'est le meme message";
}
else {
echo "on écrit";
}
?>


quand j'écris dans mon formulaire , ca me renvoi donc vers post.php et ce post.php donne :

array(3) { [0]=> string(8) "jordan" [1]=> string(7) "test2 " [2]=> string(7) "test1 " } 

a partir d'ici c'est ce qu'on écrit dans le formulaire
array(3) { ["pseudo"]=> string(6) "Pierro" ["message"]=> string(6) "jordan" ["submit"]=> string(2) "Ok" }
 on écrit


on peut voir ici que le if n'as pas fonctionné car mon $message est jordan et le premier mot dans le fichier mot.txt est [0]=> string(8) "jordan " (je l'avais écrit a l'avance dans le fichier) et pourtant meme si $message == $content[0] on rentre dans la condition else !!!!

je ne comprends pas :(
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176 >
Messages postés
100
Date d'inscription
dimanche 23 novembre 2014
Statut
Membre
Dernière intervention
10 décembre 2020

Le var_dump, en plus de t'afficher le contenu de la variable, t'indique son type ( ici ce sont des string) et sa longeur
Dans un cas, ta string contient 6 caractères.. dans l'autre ... 8
Elles ne sont donc pas égales.

Pour supprimer les éventuels espaces superflus, tu peux ajouter un trim sur tes variables
$message = !empty($_POST['message']) ? trim($_POST['message']) : NULL;

if ($message == trim($content[0]) )

A voir également si les variables contenues dans $content ne contiendraient pas des caractères invisibles, tels que des retours à la ligne '\r\n' ou autres...
Messages postés
100
Date d'inscription
dimanche 23 novembre 2014
Statut
Membre
Dernière intervention
10 décembre 2020
48 >
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021

ca fonctionne avec le trim !!! je te remercie beaucoup

Pierre
Messages postés
100
Date d'inscription
dimanche 23 novembre 2014
Statut
Membre
Dernière intervention
10 décembre 2020
48
hop, erreur de tape sur le forum pour " mais la c'est pas le soucis, je test ta solution de suite

je te redis merci