Problème php et requête sql

Fermé
Thomas - Modifié par Thomas le 1/06/2012 à 16:07
 Utilisateur anonyme - 4 juin 2012 à 15:46
Bonjour,
J'ai un problème dans mon code php, et je n'arrive pas à le débeuguer.

Mon but est de récupérer un mot de passe d'un utilisateur dans ma base de données, et malheureusement je n'y arrive pas! c'est pourtant très basique mais là je me penche là dessus depuis des heures et rien n'y fait!

Pour expliquer le principe que je veux, en gros, un utilisateur tape son ancien mot de passe, et doit retaper son nouveau deux fois pour le modifier.
Sur le fonctionnement même de mon code cela se passe ainsi:

- Je récupère le login en variable de session
- Je récupère le mot de passe dans la base de données associé au login (déjà un problème ici)
- Je veux tester si l'ancien mot de passe est égal au mot de passe que tape l'utilisateur
- Puis enfin, je fais sauvegarder le nouveau mot de passe

De plus, je teste si l'ancien mot de passe est correct, si ce dernier est vide, si le nouveau mot de passe est tapé identiquement les deux fois et s'il n'est pas vide.

Voici mon code:
Je pense qu'il y a aussi un gros soucis sur mon while mais je ne vois pas quoi, et de plus cette structure marche très bien sur d'autres pages de mon site. Le javascript marche très bien, mes variables extraites de la page précédentes existent aussi.

Le mot de passe n'est pas changé, les erreurs ne sont pas exécutés, et une page blanche s'affiche comme résultat

Merci pour votre aide

Cordialement

Thomas

<?php  

session_start();  

$cnx = mysql_connect( "localhost", "root", "" );  

mysql_select_db('test final bdd');  

if(isset($_POST['pwd_ancien']))      $pwd_ancien=$_POST['pwd_ancien'];  
else      $pwd_ancien="";  

if(isset($_POST['pwd_new']))      $pwd_new=$_POST['pwd_new'];  
else      $pwd_new="";  

if(isset($_POST['pwd_new_verif']))      $pwd_new_verif=$_POST['pwd_new_verif'];  
else      $pwd_new_verif="";  

$login = $_SESSION['login'];  

$sql = "SELECT pwd  
  FROM user  
  WHERE login=".$login;  
    


$requete = mysql_query($sql);  

while($dnn = @mysql_fetch_array($requete))  

{  
if (empty($pwd_ancien)) {  
 echo "<script>alert(\"Taper votre ancien mot de passe!\")  
    history.go(-1);</script>"; }  
else {  
 if ($pwd_ancien != $dnn['pwd']) {  
  echo "<script>alert(\"Taper correctement votre ancien mot de passe!\")  
     history.go(-1);</script>"; }  
 else {  
  if (empty($pwd_new) or empty($pwd_new_verif)) {  
   echo "<script>alert(\"Confirmer le nouveau mot de passe!\")  
      history.go(-1);</script>"; }  
  else {  
   if ($pwd_new != $pwd_new_verif) {  
    echo "<script>alert(\"Erreur de frappe sur le nouveau mot de passe!\")  
        history.go(-1);</script>"; }  
   else {  
    $sql2 = "UPDATE user  
      SET pwd = '$pwd_new'  
      WHERE login='$login'";  
          
    $requete = mysql_query($sql2); }  
  }  
 }  
}  
}  


mysql_close();   

?> 




7 réponses

Utilisateur anonyme
1 juin 2012 à 16:31
Bonjour

C'est que tu n'entres pas dans le while...
Et tu n'y entres pas car il n'y a aucune réponse à ta requête.
Et il n'y a aucune réponse car ta requête est incorrecte. Tu as oublié les apostrophes autour de la valeur de login :
$sql = "SELECT pwd  
  FROM user  
  WHERE login='$login'";

Et pourquoi d'ailleurs ne fais -tu pas directement :

$sql = "SELECT *
  FROM user  
  WHERE login='$login' AND pwd='$pwd_ancien'";
0
En fait je ne mets pas les apostrophes car php et sql le comprennent aussi et j'ai toujours eu ce réflexe (en cours...) enfin avec ou sans j'ai essayé ça ne changeait rien malheureusement...

Pour ta seconde requête, j'y avais pensé mais malheureusement se serait juste pour une exploitation "utile" du changement de mot de passe. Ou alors je ne vois pas comment (disons qu'il fait chaud et j'ai un peu de mal à raisonner là...)

J'ai besoin de tous mes messages d'erreurs complets pour les utilisateurs.

Et quand tu dis que je ne rentre pas dans mon while? je ne comprends pas en fait. Je sens qu'il y a qqch de bien évident qui m'échappe mais j'ai beau lire et relire et comparer avec mes autres requêtes, je ne vois pas l'évident malheureusement

en tout cas merci d'avoir apporté ton avis

Thomas
0
En fait je ne mets pas les apostrophes car php et sql le comprennent aussi
Mais ça n'a pas le même sens !
Supposons que $login contienne toto
Quand tu écris WHERE login=".$login;
ça devient WHERE login=toto
Et mysql va chercher une ligne ou le champ login est égal au champ toto. Ceci n'a pas de sens, car tu n'as aucun champ qui s'appelle toto !
Alors que quand tu écris WHERE login='$login'", ça devient WHERE login='toto' et là, mysql recherche bien une ligne où le champ login contient la valeur toto.

en tout cas merci d'avoir apporté ton avis
Ce n'est pas un avis, c'est une certitude : tu avais une erreur à ce niveau-là. Elle n'explique peut-être pas tout, il y en a peut-être d'autres, mais il n'y a aucun doute là-dessus.

Pour voir s'il y a ou non une erreur :

$requete = mysql_query($sql) or die(mysql_error());  
0
Je n'ai aucune erreur qui s'affiche. Donc voilà c'est encore et toujours un grand mystère pour moi...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
4 juin 2012 à 14:50
As-tu fait un echo 'coucou'; à l'intérieur du while pour voir si tu y entrais ?
Et un echo 'coucou2' à côté de l(update pour voir si tu arrives jusque là ?
0
Oui je l'ai fait et je n'arrivais pas jusqu'à l'update car je n'avais pas de changement de mot de passe.
Par contre, je ne sais pas par quel miracle, mon code s'est mis à fonctionné (pourtant je rechargeais mon serveur wamp et vidait régulièrement mon cache). Enfin toujours est t'il que mes messages d'erreurs fonctionnent et que ma table se met à jour. Pas comme je le veux mais ça marche, il ne met reste plus qu'à régler tout ça pour que cela fonctionne comme je le souhaite

En tout cas merci de ton aide

Cordialement

Thomas
0
Petite précision, mon code marche correctement sous IE...
Les problèmes arrivent sur mozilla et chrome! donc se n'était pas que le code...
Désolé de t'avoir fait perdre du temps!
Bonne journée
Thomas
0
Utilisateur anonyme
4 juin 2012 à 15:46
J'avais fait l'essai chez moi avec firefox, et j'avais trouvé que ça marchait...
Bonne journée à toi aussi.
0