Problème requête UPDATE [Résolu]

Signaler
-
 omlaly -
Bonjour,

Je suis confronté à un problème tout bête !

Je voudrais faire une requête SQL de mise à jour de données (donc
UPDATE
). Je fais un test if et ça ne passe pas dans ce test (je ne sais pas pourquoi)

Quand je l'essaye, je n'ai pas d'erreur (la page est toute blanche) et quand je vais voir sur PHPMyAdmin, la requête SQL n'a pas fonctionné (c'est la même adresse e-mail qu'avant).

Voici le code PHP :
$adresse_email = mysql_real_escape_string($_POST['adresse_email']);
$ancien_password = sha1($_POST['ancien_password']);
$nouveau_password = sha1($_POST['nouveau_password']);
$user_pseudo = $_SESSION['user_pseudo'];

// Mise à jour des données saisies par l'utilisateur

$query_bon_utilisateur_adresse_email=mysql_query("SELECT * FROM user WHERE user_email = '$adresse_email'") or die('Erreur lors de la mise à jour de l\'adresse e-mail'.mysql_error()); // Envoie une requête à un serveur MySQL
$query_bon_utilisateur_password=mysql_query("SELECT user_mdp FROM user WHERE user_mdp = '$ancien_password'") or die('Erreur lors de la mise à jour du mot de passe'.mysql_error()); // Envoie une requête à un serveur MySQL

if(mysql_num_rows($query_bon_utilisateur_adresse_email) ==1){ // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
mysql_query("UPDATE user SET user_email=\'$adresse_email\' WHERE user_pseudo=\'$user_pseudo\'") or die('Erreur lors de la requête SQL de mise à jour des données saisies par l\'utilisateur (adresse e-mail)'.mysql_error()); // Envoie une requête à un serveur MySQL

echo "Votre adresse e-mail a été mise à jour avec succès !";
}

if(mysql_num_rows($query_bon_utilisateur_password) == 1){ // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
mysql_query("UPDATE user SET user_mdp '$nouveau_password' WHERE user_email '$adresse_email'") or die('Erreur lors de la requête SQL de mise à jour des données saisies par l\'utilisateur (mot de passe)'.mysql_error()); // Envoie une requête à un serveur MySQL
echo "Votre mot de passe a été mis à jour avec succès !";
}
}


Voici le CREATE TABLE de la table user :
CREATE TABLE IF NOT EXISTS `user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_comptesactives` decimal(10,0) NOT NULL,
  `user_pseudo` varchar(255) CHARACTER SET utf8 NOT NULL,
  `user_mdp` varchar(255) CHARACTER SET utf8 NOT NULL,
  `user_date_inscription` datetime NOT NULL,
  `user_naissance` date NOT NULL,
  `user_email` varchar(255) CHARACTER SET utf8 NOT NULL,
  `user_localisation` varchar(255) CHARACTER SET utf8 NOT NULL,
  `user_profession` varchar(255) CHARACTER SET utf8 NOT NULL,
  `user_avatars` varchar(255) CHARACTER SET utf8 NOT NULL,
  `user_derniere_visite` datetime NOT NULL,
  `user_bannis` int(11) NOT NULL,
  `user_acces` int(1) unsigned NOT NULL DEFAULT '2',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=103 ;


En attendant vos réponses, je continue mes recherches...
Cordialement

11 réponses

C'est bon, problème réglé.

Cordialement
Messages postés
14725
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
144
Bonjour,

"UPDATE user SET user_email=\'$adresse_email\' WHERE user_pseudo=\'$user_pseudo\'"
Les \ servent à échaper certains caractères, dans ton cas, c'est pas bon :
Si séparateur de chaine ', il faut donc échapper uniquement les \ et les '
Si séparateur de chaine ", il faut donc échapper uniquement les \ et les "

Donc retires les \ à tes \'.
Et réssayes.
Sinon, essayes d'afficher la requête exécutée avec un echo, pour la tester et comprendre.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
En fait, ça fait le contraire de ce que je veux, je t'explique :
-quand je fais :
if(mysql_num_rows($query_bon_utilisateur_adresse_email) ==1){
, ça fait rien (page blanche)
-quand je fais :
if(mysql_num_rows($query_bon_utilisateur_adresse_email) ==0){
, ça m'affiche
Votre adresse e-mail a été mise à jour avec succès !
.

Quand je vais sur PHPMyAdmin, je vois la nouvelle adresse e-mail.

Voici le code PHP en intégralité :
// On ouvre la session
session_start(); // Démarre une nouvelle session ou reprend une session existante

$adresse_email = $_POST['adresse_email'];
$ancien_password = sha1($_POST['ancien_password']);
$nouveau_password = sha1($_POST['nouveau_password']);
$user_pseudo = $_SESSION['user_pseudo'];

// Mise à jour des données saisies par l'utilisateur

$query_bon_utilisateur_adresse_email=mysql_query("SELECT * FROM user WHERE user_email = '$adresse_email'") or die('Erreur lors de la mise à jour de l\'adresse e-mail'.mysql_error()); // Envoie une requête à un serveur MySQL
$query_bon_utilisateur_password=mysql_query("SELECT user_mdp FROM user WHERE user_mdp = '$ancien_password'") or die('Erreur lors de la mise à jour du mot de passe'.mysql_error()); // Envoie une requête à un serveur MySQL

if(mysql_num_rows($query_bon_utilisateur_adresse_email) ==1){ // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
$affichage = mysql_query("UPDATE user SET user_email='$adresse_email' WHERE user_pseudo='$user_pseudo'") or die('Erreur lors de la requête SQL de mise à jour des données saisies par l\'utilisateur (adresse e-mail)'.mysql_error()); // Envoie une requête à un serveur MySQL

echo "Votre adresse e-mail a été mise à jour avec succès !";
}

if(mysql_num_rows($query_bon_utilisateur_password) == 1){ // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
mysql_query("UPDATE user SET user_mdp '$nouveau_password' WHERE user_email '$adresse_email'") or die('Erreur lors de la requête SQL de mise à jour des données saisies par l\'utilisateur (mot de passe)'.mysql_error()); // Envoie une requête à un serveur MySQL
echo "Votre mot de passe a été mis à jour avec succès !";
}
}


Donc, ça fait le contraire de ce que je voudrais !!!

En attendant vos réponses, je continue mes recherches...
Cordialement
Messages postés
14725
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
144
Bonjour,

Affiches la requête générée, puis testes-la dans PhpMyAdmin.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Voici le code PHP :
// On ouvre la session
session_start(); // Démarre une nouvelle session ou reprend une session existante

$adresse_email = $_POST['adresse_email'];
$ancien_password = sha1($_POST['ancien_password']);
$nouveau_password = sha1($_POST['nouveau_password']);
$user_pseudo = $_SESSION['user_pseudo'];

// Mise à jour des données saisies par l'utilisateur

$query_bon_utilisateur_adresse_email=mysql_query("SELECT * FROM user WHERE user_email = '$adresse_email'") or die('Erreur lors de la mise à jour de l\'adresse e-mail'.mysql_error()); // Envoie une requête à un serveur MySQL
$query_bon_utilisateur_password=mysql_query("SELECT user_mdp FROM user WHERE user_mdp = '$ancien_password'") or die('Erreur lors de la mise à jour du mot de passe'.mysql_error()); // Envoie une requête à un serveur MySQL

if(mysql_num_rows($query_bon_utilisateur_adresse_email) ==1){ // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
$affichage = mysql_query("UPDATE user SET user_email='$adresse_email' WHERE user_pseudo='$user_pseudo'");
echo $affichage;

echo "Votre adresse e-mail a été mise à jour avec succès !";
}

if(mysql_num_rows($query_bon_utilisateur_password) == 1){ // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
$affichage2 mysql_query("UPDATE user SET user_mdp '$nouveau_password' WHERE user_email = '$adresse_email'");
echo $affichage2;
echo "Votre mot de passe a été mis à jour avec succès !";
}
}


Voici le résultat :
1Votre adresse e-mail a été mise à jour avec succès !


Quand je teste
SELECT * FROM user WHERE user_email = '$adresse_email'
sur PHPMyAdmin, elle fonctionne :
MySQL a retourné un résultat vide (aucune ligne). ( Traitement en 0.0766 sec )


En attendant vos réponses, je continue mes recherches...
Cordialement
PS : Je pense que MySQL a retourné un résultat vide car elle ne connait pas la variable $adresse_email...
Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2
Tu penses ?

stéph
Messages postés
14725
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
144
Bonjour,

A la place de faire directement :
...=mysql_query("SELECT ...")
Passes pas une variable intermédiaire et affiches le contenu de cette variable.

Sinon, je pense que ton script souffre d'une grosse faille :
Tu vérifies séparément le mdp et l'adresse mail, de fait, on peut changer le mdp d'un membre, juste en connaissant son adresse mail.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
14725
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
144
Bonjour,

Quel était le problème (et sa solution) afin que ton expérience puisse servir à d'autres personnes en détresse.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Bonjour NHenry,

Le problème, c'était que ça ne passait pas dans la boucle.

Voici le code PHP :
$query_bon_utilisateur_password=mysql_query("SELECT user_pseudo FROM user WHERE user_pseudo='$user_pseudo' AND user_mdp='$ancien_password'") or die('Erreur lors de la récupération du mot de passe'.mysql_error()); // Envoie une requête à un serveur MySQL


if(mysql_num_rows($query_bon_utilisateur_password) == 1){ // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
mysql_query("UPDATE user SET user_mdp='$nouveau_password' WHERE user_pseudo='$user_pseudo' AND user_mdp='$ancien_password'");

echo 'Votre mot de passe a été mis à jour avec succès !';
}



En rajoutant les deux variables : $ancien_password et $nouveau_password.

Cordialement
Enfin dans le test IF, excuses-moi.

Cordialement