[sql] probleme de requete de mise a jour
Résolu/Fermé
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
-
4 juin 2007 à 03:08
webtotoche Messages postés 69 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 3 novembre 2007 - 4 juin 2007 à 22:36
webtotoche Messages postés 69 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 3 novembre 2007 - 4 juin 2007 à 22:36
A voir également:
- [sql] probleme de requete de mise a jour
- Mise à jour pilote - Guide
- Mise a jour airpods - Guide
- Mise a jour windows 10 - Guide
- Mise a jour xiaomi - Guide
- Mise a jour chromecast - Guide
5 réponses
webtotoche
Messages postés
69
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
3 novembre 2007
7
4 juin 2007 à 16:09
4 juin 2007 à 16:09
Salut !
Quel est le contenu de $query ?
Tu as éxécuté cette requête aves phpMyadmin ? Que retourne-t-il comme message d'erreur ?
_
Quel est le contenu de $query ?
Tu as éxécuté cette requête aves phpMyadmin ? Que retourne-t-il comme message d'erreur ?
_
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 329
4 juin 2007 à 17:01
4 juin 2007 à 17:01
Salut webtotoche,
$query = "UPDATE user SET user_status = 1 WHERE (user_password = '$GET[hash]') AND (user_timestamp = 'base64_decode($GET[stamp])')";
$result = mysql_query($query) or die(mysql_error());
--> je n'ai pas de message d'erreur, donc la fonction passe, et me retourne :
car il n'y a pas eu de modif dans la table... (car (mysql_affected_rows() == 1) est faux !)
----
avec un exemple :
si je fais :
donc j'ai mis la valeur user_timestamp de la base de données directement, c'est ok, la requete fonctionne
si je fais :
ce qui revient en réalité à :
c'est pas ok, la requete fonctionne pas.
y'a un soucis, base64_decode(base64_encode(1180950895)) ne me retourne pas le bon résultat apparement. bizarre.
une idée ?
$query = "UPDATE user SET user_status = 1 WHERE (user_password = '$GET[hash]') AND (user_timestamp = 'base64_decode($GET[stamp])')";
$result = mysql_query($query) or die(mysql_error());
--> je n'ai pas de message d'erreur, donc la fonction passe, et me retourne :
else { echo 'L\'opération demandée n\'est pas possible. Ressayez en faisant un copier/coller de l\'adresse qui vous a été fournie dans le mail. Si cela ne fonctionne toujours pas, <a href="./contact.php" title="Signaler un problème">contactez un administrateur</a> en précisant votre login d\'inscription.'; }
car il n'y a pas eu de modif dans la table... (car (mysql_affected_rows() == 1) est faux !)
----
avec un exemple :
$hash = a034c9a555cec60b7987fded5ed3c126 ; $timestamp = 1180950895 ; $stamp = base64_encode($timestamp) ;
si je fais :
UPDATE user SET user_status = 1 WHERE (user_password = '$hash ') AND (user_timestamp = '1180950895')
donc j'ai mis la valeur user_timestamp de la base de données directement, c'est ok, la requete fonctionne
si je fais :
UPDATE user SET user_status = 1 WHERE (user_password = 'a034c9a555cec60b7987fded5ed3c126') AND (user_timestamp = 'base64_decode($stamp)')
ce qui revient en réalité à :
UPDATE user SET user_status = 1 WHERE (user_password = 'a034c9a555cec60b7987fded5ed3c126') AND (user_timestamp = 'base64_decode(base64_encode(1180950895))')
c'est pas ok, la requete fonctionne pas.
y'a un soucis, base64_decode(base64_encode(1180950895)) ne me retourne pas le bon résultat apparement. bizarre.
une idée ?
webtotoche
Messages postés
69
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
3 novembre 2007
7
4 juin 2007 à 17:45
4 juin 2007 à 17:45
J'ai essayé de reproduire ton problème, sans y parvenir. Peux-tu donner des infos sur la structure de la table ?
_
y'a un soucis, base64_decode(base64_encode(1180950895)) ne me retourne pas le bon résultat apparement. bizarre.? ? ? Tu es sûr ?
_
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 329
4 juin 2007 à 17:56
4 juin 2007 à 17:56
Re, ci dessous ma table :
avec user_status par défaut à 0
et oui je suis sur :
--> Nombre d'enregistrements affectés : 1 (traitement: 0.0028 sec.)
--> Nombre d'enregistrements affectés : 0 (traitement: 0.0094 sec.)
c'est donc bien de decode/encode qui merdouille... mais pourquoi ? apparement pas de probleme de syntaxe...
CREATE TABLE `user` ( `user_id` int(11) NOT NULL auto_increment, `user_name` varchar(25) character set latin1 collate latin1_general_cs NOT NULL, `user_password` varchar(32) character set latin1 collate latin1_general_cs NOT NULL, `user_email` varchar(50) character set latin1 collate latin1_general_cs NOT NULL, `user_timestamp` varchar(20) character set latin1 collate latin1_general_cs NOT NULL, `user_status` binary(1) NOT NULL, ) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=27 ;
avec user_status par défaut à 0
et oui je suis sur :
UPDATE user SET user_status = 1 WHERE (user_password = 'a034c9a555cec60b7987fded5ed3c126') AND (user_timestamp = '1180950895')
--> Nombre d'enregistrements affectés : 1 (traitement: 0.0028 sec.)
UPDATE user SET user_status = 1 WHERE (user_password = 'a034c9a555cec60b7987fded5ed3c126') AND (user_timestamp = 'base64_decode(base64_encode(1180950895))')
--> Nombre d'enregistrements affectés : 0 (traitement: 0.0094 sec.)
c'est donc bien de decode/encode qui merdouille... mais pourquoi ? apparement pas de probleme de syntaxe...
webtotoche
Messages postés
69
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
3 novembre 2007
7
4 juin 2007 à 18:26
4 juin 2007 à 18:26
$query = "UPDATE user SET user_status = 1 WHERE (user_password = '$GET[hash]') AND (user_timestamp = 'base64_decode($GET[stamp])')";
$_GET['stamp'] au lieu de $GET[stamp] ? :-)
$query = 'UPDATE user SET user_status = 1 WHERE (user_password = "'.$_GET['hash'].'") AND (user_timestamp = "'.base64_decode($_GET['stamp']).'")';ça marche ;-)
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 329
4 juin 2007 à 19:42
4 juin 2007 à 19:42
lol, en fait y'avait carrément des problèmes de syntaxe dans la requete !
merci de l'aide.
quelle est la signification de des points (.) dans :
et pourquoi faut il coupler les guillets doubles et les guillements simples ?
Pour le $_GET j'aurais pu m'en rendre compte..
mais c'est la journée je fais n'importe quoi. j'ai passé deux heure sur une analyse cette apres midi, a pas comprendre pourquoi je n'avais pas le mm résultat sur 2 logiciels différents... pour finalement me rendre compte que mes données source n'etaient pas les meme !
merci webt_ !
merci de l'aide.
quelle est la signification de des points (.) dans :
(user_password = "'.$_GET['hash'].'")
et pourquoi faut il coupler les guillets doubles et les guillements simples ?
Pour le $_GET j'aurais pu m'en rendre compte..
mais c'est la journée je fais n'importe quoi. j'ai passé deux heure sur une analyse cette apres midi, a pas comprendre pourquoi je n'avais pas le mm résultat sur 2 logiciels différents... pour finalement me rendre compte que mes données source n'etaient pas les meme !
merci webt_ !
webtotoche
Messages postés
69
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
3 novembre 2007
7
4 juin 2007 à 21:56
4 juin 2007 à 21:56
quelle est la signification de des points (.) dans :
(user_password = "'.$_GET['hash'].'")
Dans ce contexte le point sert à concaténer les chaines de caractères.
et pourquoi faut il coupler les guillets doubles et les guillements simples ?
Plusieurs possibilités :
1. Pas obligé, là c'est ma façon de coder :-)
(Ceci étant, j'ai vu, et appris, partout que le nom de l'indice est entre simple-quotes dans un $_GET, mais j'ai fait des essais en les omettant et ça marche quand même)
2. si tu construis ta chaine $query en concaténant des chaines et des variables chaines, tu peux tout encadrer par des double-quote, l'expression sera bien "évaluée" :
-----------
Mais c'est déconseillé lorsqu'il y a une une fonction :
-----------------
-----------------
Pour le $_GET j'aurais pu m'en rendre compte..
Tu n'es pas seul sur ce coup-là ;-)
_
(user_password = "'.$_GET['hash'].'")
Dans ce contexte le point sert à concaténer les chaines de caractères.
et pourquoi faut il coupler les guillets doubles et les guillements simples ?
Plusieurs possibilités :
1. Pas obligé, là c'est ma façon de coder :-)
(Ceci étant, j'ai vu, et appris, partout que le nom de l'indice est entre simple-quotes dans un $_GET, mais j'ai fait des essais en les omettant et ça marche quand même)
2. si tu construis ta chaine $query en concaténant des chaines et des variables chaines, tu peux tout encadrer par des double-quote, l'expression sera bien "évaluée" :
$dec = base64_decode($_GET[stamp]); $query = "UPDATE user SET user_status = 1 WHERE (user_password = '$_GET[hash]') AND (user_timestamp = '$dec')";ça marche
-----------
Mais c'est déconseillé lorsqu'il y a une une fonction :
$query = "UPDATE user SET user_status = 1 WHERE (user_password = '$_GET[hash]') AND (user_timestamp = 'base64_decode($_GET[stamp])')";ça marche pas
-----------------
$query = "UPDATE user SET user_status = 1 WHERE (user_password = '$_GET[hash]') AND (user_timestamp = '".base64_decode($_GET[stamp]).'")";ça marche
-----------------
Pour le $_GET j'aurais pu m'en rendre compte..
Tu n'es pas seul sur ce coup-là ;-)
_
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 329
4 juin 2007 à 22:05
4 juin 2007 à 22:05
quelle est la signification de des points (.) dans :
(user_password = "'.$_GET['hash'].'")
Dans ce contexte le point sert à concaténer les chaines de caractères.
mais dans ce cas, je n'ai rien a concaténer ! j'ai uniquement ma variable $_get['hash']... si j'avais eu qqch de ce style : $user.$_GET['hash'] j'aurais compris, mais là :s
(user_password = "'.$_GET['hash'].'")
Dans ce contexte le point sert à concaténer les chaines de caractères.
mais dans ce cas, je n'ai rien a concaténer ! j'ai uniquement ma variable $_get['hash']... si j'avais eu qqch de ce style : $user.$_GET['hash'] j'aurais compris, mais là :s
webtotoche
Messages postés
69
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
3 novembre 2007
7
4 juin 2007 à 22:36
4 juin 2007 à 22:36
La réponse est dans le 1. :
c'est ma façon de coder :-)
Patapé ! J'avais oublié de le préciser...
c'est ma façon de coder :-)
Patapé ! J'avais oublié de le préciser...