[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
Bonjour,

je suis en train de créer une page de profil. En voici le 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;
                  }
                 elseif($_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 />";
                        }
                  }
                 elseif($_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])
                      {
                           mysql_query("UPDATE membre SET mail=".$mail) 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 />";
                  }
                 elseif($_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 />";
                        }
                  }
                 elseif($_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])
                      {
                           mysql_query("UPDATE membre SET mail=".$mail) or die(mysql_error());
                           echo"Adresse mail modifiée.<br />";
                          }
                    }
                  }
            }
          }
    }
   mysql_close();
  ?>


voici un screen de ce que sa donne : http://img508.imageshack.us/img508/4421/sanstitrezw6.jpg

Mais mon problème est que le serveur n'exécute pas toutes les boucles nécessaires.
==> si je veux modifié le pseudo et l'age, le serveur ne modifiera que le pseudo
Donc si quelqu'un peut m'aider, merci d'avance
A voir également:

9 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
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
0
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 ;)
0
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
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
0
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
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 !
0

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
d'accord merci encore
mais en fait j'ai pas tout a fait saisi ce qu'a dit reivax
0
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
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)
0
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
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 :
<?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();
  ?>
0
Effectivement j'avais pas fais attention au dernier UPDATE pour ton mail ^^

Tu as d'autres bugs où le script est dit "final" ?

;o)
0
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
le script est fini
0