[PHP] Rentrer et sortir des boucles
Résolu/Fermé
Yannichou
Messages postés
10
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
-
5 mars 2008 à 16:14
Yannichou Messages postés 10 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 31 mars 2008 - 13 mars 2008 à 22:03
Yannichou Messages postés 10 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 31 mars 2008 - 13 mars 2008 à 22:03
A voir également:
- [PHP] Rentrer et sortir des boucles
- Easy php - Télécharger - Divers Web & Internet
- Serveur entrant et sortant - Guide
- Comment sortir du mode sans echec ps4 - Guide
- Php natif - Forum PHP
9 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
5 mars 2008 à 16:35
5 mars 2008 à 16:35
Bonjour,
Alors, deux points qui posent problème.
Premièrement, tes tests :
$_POST['pseudo'] != "" || $_POST['pseudo'] != " "
Ceci sera TOUJOURS vrai, car tu mets || (ou). si pseudo n'est pas vide, ou pseudo n'est pas une espace. Toujours vrai ! Car si pseudo est vide, alors il n'est pas une espace, et vice-versa.
Il faut utiliser && (dans tous tes tests venant après cette ligne : $mdp = md5(mysql_real_escape_string(htmlspecialchars($_POST['mdp']))); !)
Deuxièmement, tu testes pour le pseudo, puis pour l'âge puis pour l'email. Enfin, c'est ce que tu veux faire !
Sauf que dans les faits, tu mets des "elseif".
C'est-à-dire : "Sinon, si". Donc cela ne se déclenche que si la condition précédente est fausse, donc tu ne modifieras dans tous les cas que le premier pour lequel elle est vraie. Si en plus on rajoute le fait qu'elle est en fait toujours vraie, tu imagines le problème !
La solution, c'est d'enlever les elseif pour les remplacer par des if tout simplement.
Bon courage,
Xavier
Alors, deux points qui posent problème.
Premièrement, tes tests :
$_POST['pseudo'] != "" || $_POST['pseudo'] != " "
Ceci sera TOUJOURS vrai, car tu mets || (ou). si pseudo n'est pas vide, ou pseudo n'est pas une espace. Toujours vrai ! Car si pseudo est vide, alors il n'est pas une espace, et vice-versa.
Il faut utiliser && (dans tous tes tests venant après cette ligne : $mdp = md5(mysql_real_escape_string(htmlspecialchars($_POST['mdp']))); !)
Deuxièmement, tu testes pour le pseudo, puis pour l'âge puis pour l'email. Enfin, c'est ce que tu veux faire !
Sauf que dans les faits, tu mets des "elseif".
C'est-à-dire : "Sinon, si". Donc cela ne se déclenche que si la condition précédente est fausse, donc tu ne modifieras dans tous les cas que le premier pour lequel elle est vraie. Si en plus on rajoute le fait qu'elle est en fait toujours vraie, tu imagines le problème !
La solution, c'est d'enlever les elseif pour les remplacer par des if tout simplement.
Bon courage,
Xavier
Salut,
J'ai lu ton script en diagonal (désolé par manque de temps) et effectivement il a l'air d'être conçue pour ne modifier qu'un seul champs à la fois.
C'est tout simplement à cause des elseif. Si tu analyses ton script, tu lui dit :
Si "nom" est modifié, je le met à jour, SINON SI l'age est modifié, je met l'âge à jour, SINON SI etc...
Or si tu modifies le nom et l'age, il entrera dans la première boucle, et sortira à la fin puisqu'il n'ira pas au sinon (else)
Tu dois refermer tes si et et tester à chaque fois c'qui est modifié du jor :
If condition1
{
$nom = .. ;
}
If condition2
{
$age = .. ;
}
Tu peux aussi tout imbriquer :
If condition1
{
If condition2
{
$nom = .. ;
$age = ... ;
}
}
Dernière chose, ne met qu'un seul update à la fin sinon tu lui fais faire beaucoups d'aller/retour au server ce qui est très inutile. Même si ce sont de toutes petites requêtes, quand on peut bien coder, essayons de le faire :)
Exemple final que tu devrais faire :
$requete = mysql_query("SELECT * FROM membre WHERE id=".$_SESSION['id']) ;
//Si tu as trop de champs tu peux séléctionner ceux que tu veux : SELECT nom, age, email FROM membre WHERE id=...
$data = mysql_fetch_array($requete);
$nom = $data['nom'];
$age = $data['age'];
$email = $date['email'];
...
//Tu test tes conditions
if($nom != $_POST['nom'])
{
$nom = $_POST['nom'];
}
if($age != $data['age'])
{
$age = $_POST['age']
}
//J'ai omis de tester si c'est numérique, mais tu le fais le principe est le même.
//Il ne reste plus qu'à mettre à jour la base :)
$requete = "UPDATE membre SET nom =".$nom.", age=".$age" etc... :)
Bon courage ;)
J'ai lu ton script en diagonal (désolé par manque de temps) et effectivement il a l'air d'être conçue pour ne modifier qu'un seul champs à la fois.
C'est tout simplement à cause des elseif. Si tu analyses ton script, tu lui dit :
Si "nom" est modifié, je le met à jour, SINON SI l'age est modifié, je met l'âge à jour, SINON SI etc...
Or si tu modifies le nom et l'age, il entrera dans la première boucle, et sortira à la fin puisqu'il n'ira pas au sinon (else)
Tu dois refermer tes si et et tester à chaque fois c'qui est modifié du jor :
If condition1
{
$nom = .. ;
}
If condition2
{
$age = .. ;
}
Tu peux aussi tout imbriquer :
If condition1
{
If condition2
{
$nom = .. ;
$age = ... ;
}
}
Dernière chose, ne met qu'un seul update à la fin sinon tu lui fais faire beaucoups d'aller/retour au server ce qui est très inutile. Même si ce sont de toutes petites requêtes, quand on peut bien coder, essayons de le faire :)
Exemple final que tu devrais faire :
$requete = mysql_query("SELECT * FROM membre WHERE id=".$_SESSION['id']) ;
//Si tu as trop de champs tu peux séléctionner ceux que tu veux : SELECT nom, age, email FROM membre WHERE id=...
$data = mysql_fetch_array($requete);
$nom = $data['nom'];
$age = $data['age'];
$email = $date['email'];
...
//Tu test tes conditions
if($nom != $_POST['nom'])
{
$nom = $_POST['nom'];
}
if($age != $data['age'])
{
$age = $_POST['age']
}
//J'ai omis de tester si c'est numérique, mais tu le fais le principe est le même.
//Il ne reste plus qu'à mettre à jour la base :)
$requete = "UPDATE membre SET nom =".$nom.", age=".$age" etc... :)
Bon courage ;)
Yannichou
Messages postés
10
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
5 mars 2008 à 16:55
5 mars 2008 à 16:55
merci à vous chico et reivax car en effet, c'était un problème de if. Mais chico, j'ai pas trop compris ton explication. J'ai mis des update partout car je veux pas insérer des champs vide
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
5 mars 2008 à 17:18
5 mars 2008 à 17:18
ok alors continue sur ta lançé ;o)
Mais n'oublie pas ce qu'a dit Reivax tu as mis des "ou" inutils au lieu de "et" :]
Bonne prog !
Mais n'oublie pas ce qu'a dit Reivax tu as mis des "ou" inutils au lieu de "et" :]
Bonne prog !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Yannichou
Messages postés
10
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
5 mars 2008 à 17:25
5 mars 2008 à 17:25
d'accord merci encore
mais en fait j'ai pas tout a fait saisi ce qu'a dit reivax
mais en fait j'ai pas tout a fait saisi ce qu'a dit reivax
chico200987
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
143
6 mars 2008 à 17:28
6 mars 2008 à 17:28
Salut,
C'est juste une question de logique. Regarde suit mon raisonnement :
Tu test : if($_POST['pseudo'] != "" || $_POST['pseudo'] != " " )
|| veut dire OU Inclusif (ou l'un, ou l'autre, ou les deux..), donc tu dis en français clair :
Si le pseudo envoyé en POST est différent du vide OU si le pseudo envoyé en POST est différent d'un espace, alors...
En disant ça, il faut qu'une seule condition soit vérifié.
Exemple :
Si le pseudo envoyé en POST est égal au vide, il n'est donc pas un espace puisqu'il y a du vide.. donc, la deuxième condition est verifiée, mais pas le première.. c'est la même chose si tu a un espace dans le pseudo, ce n'est pas du vide, encore une fois avec le OU, une seule condition à vrai suffit pour aller dans le ALORS.
Donc ton IF est toujours vrai quoi qu'il y ait dans le pseudo envoyé..
Tu dois modifier tes || en && c'est-à-dire en ET.
Celà devient : if($_POST['pseudo'] != "" && $_POST['pseudo'] != " " )
Dans ce cas, il faut que les deux conditions soient verifiés, c'est-à-dire en français :
Si le pseudo envoyé en POST est différent du vide ET si le pseudo envoyé en POST est différent d'un espace, alors on peut aller dans la suite..
Tu comprends mieux ?
Ca n'est qu'une question de logique, lis attentivement mon explication ;o)
C'est juste une question de logique. Regarde suit mon raisonnement :
Tu test : if($_POST['pseudo'] != "" || $_POST['pseudo'] != " " )
|| veut dire OU Inclusif (ou l'un, ou l'autre, ou les deux..), donc tu dis en français clair :
Si le pseudo envoyé en POST est différent du vide OU si le pseudo envoyé en POST est différent d'un espace, alors...
En disant ça, il faut qu'une seule condition soit vérifié.
Exemple :
Si le pseudo envoyé en POST est égal au vide, il n'est donc pas un espace puisqu'il y a du vide.. donc, la deuxième condition est verifiée, mais pas le première.. c'est la même chose si tu a un espace dans le pseudo, ce n'est pas du vide, encore une fois avec le OU, une seule condition à vrai suffit pour aller dans le ALORS.
Donc ton IF est toujours vrai quoi qu'il y ait dans le pseudo envoyé..
Tu dois modifier tes || en && c'est-à-dire en ET.
Celà devient : if($_POST['pseudo'] != "" && $_POST['pseudo'] != " " )
Dans ce cas, il faut que les deux conditions soient verifiés, c'est-à-dire en français :
Si le pseudo envoyé en POST est différent du vide ET si le pseudo envoyé en POST est différent d'un espace, alors on peut aller dans la suite..
Tu comprends mieux ?
Ca n'est qu'une question de logique, lis attentivement mon explication ;o)
Yannichou
Messages postés
10
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
6 mars 2008 à 20:20
6 mars 2008 à 20:20
Ok merci beaucoup pour votre aide. Mais maintenant j'ai fais foiré la page(bug sur les mail==> manquait WHERE...)
Bref, voici le nouveau code :
Bref, voici le nouveau code :
<?php require('securite/test.php'); if(empty($_POST))//on vient d'arriver sur la pge { include('espace_membre/original.php'); } else//on a valider { require('espace_membre/securisation.php'); $id_membre = 6; if(empty($_POST['mdp']) || $_POST['mdp'] == " ")//le mdp est vide { echo'Veuillez saisir votre mot de passe.<br />'; include('espace_membre/re-original.php'); } else//le mdp n'est pas vide { $mail = preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']); $requete = mysql_query("SELECT mdp FROM membre WHERE id=".$_SESSION['id']) or die(mysql_error()); $data = mysql_fetch_row($requete); $mdp = md5(mysql_real_escape_string(htmlspecialchars($_POST['mdp']))); if($data[0] != $mdp)// on change de mdp { mysql_query("UPDATE membre SET mdp='$mdp' WHERE id=".$_SESSION['id']) or die(mysql_error()); echo"Mot de passe modifié.<br />"; if($_POST['pseudo'] != "" && $_POST['pseudo'] != " ") { $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); mysql_query("UPDATE membre SET pseudo='$pseudo' WHERE id=".$_SESSION['id']) or die(mysql_error()); echo"Pseudo modifié.<br />"; continue; } if($_POST['age'] != "" && $_POST['age'] != " ") { $age = mysql_real_escape_string(htmlspecialchars($_POST['age'])); if(is_numeric($age) == TRUE) { mysql_query("UPDATE membre SET age='$age' WHERE id=".$_SESSION['id']) or die(mysql_error()); echo"Age modifié.<br />"; } } if($_POST['mail'] != "" && $_POST['mail'] != " ") { if($mail == TRUE) { $requete = mysql_query("SELECT mail FROM membre WHERE id=".$_SESSION['id']) or die(mysql_error()); $donnee = mysql_fetch_row($requete); if($mail != $donnee[0]) { $mail1 = $_POST['mail']; mysql_query("UPDATE membre SET mail='$mail1' WHERE id=".$_SESSION['id']) or die(mysql_error()); echo"Adresse mail modifiée.<br />"; } } } } else//on change pas de mdp { if($_POST['pseudo'] != "" && $_POST['pseudo'] != " ") { $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); mysql_query("UPDATE membre SET pseudo='$pseudo' WHERE id=".$_SESSION['id']) or die(mysql_error()); echo"Pseudo modifié.<br />"; } if($_POST['age'] != "" && $_POST['age'] != " ") { $age = mysql_real_escape_string(htmlspecialchars($_POST['age'])); if(is_numeric($age) == TRUE) { mysql_query("UPDATE membre SET age='$age' WHERE id=".$_SESSION['id']) or die(mysql_error()); echo"Age modifié.<br />"; } } if($_POST['mail'] != "" && $_POST['mail'] != " ") { if($mail == TRUE) { $requete = mysql_query("SELECT mail FROM membre WHERE id=".$_SESSION['id']) or die(mysql_error()); $donnee = mysql_fetch_row($requete); if($mail != $donnee[0]) { $mail1 = $_POST['mail']; mysql_query("UPDATE membre SET mail='$mail1' WHERE id=".$_SESSION['id']) or die(mysql_error()); echo"Adresse mail modifiée.<br />"; } } } } } } mysql_close(); ?>
Effectivement j'avais pas fais attention au dernier UPDATE pour ton mail ^^
Tu as d'autres bugs où le script est dit "final" ?
;o)
Tu as d'autres bugs où le script est dit "final" ?
;o)
Yannichou
Messages postés
10
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
13 mars 2008 à 22:03
13 mars 2008 à 22:03
le script est fini