Problème php et requête sql
Thomas
-
Utilisateur anonyme -
Utilisateur anonyme -
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
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(); ?>
A voir également:
- Problème php et requête sql
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Logiciel sql - Télécharger - Bases de données
- Jointure sql ✓ - Forum MySQL
- Php alert ✓ - Forum PHP
7 réponses
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 :
Et pourquoi d'ailleurs ne fais -tu pas directement :
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'";
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
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
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 :
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());
Je n'ai aucune erreur qui s'affiche. Donc voilà c'est encore et toujours un grand mystère pour moi...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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à ?
Et un echo 'coucou2' à côté de l(update pour voir si tu arrives jusque là ?
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
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