Requête update [Résolu]

Messages postés
16
Date d'inscription
lundi 30 mars 2015
Statut
Membre
Dernière intervention
16 avril 2015
- - Dernière réponse : challenger11
Messages postés
16
Date d'inscription
lundi 30 mars 2015
Statut
Membre
Dernière intervention
16 avril 2015
- 16 avril 2015 à 15:23
Bonjour,
je réalise un script pour la récupération du mot de passe oublié je suis dnas la phase de génération d'une clé j'arrive pas à insérer la clé généré dans la base de données donc voici mon code :
<?php

mysql_connect('localhost','root','');
mysql_select_db('utilisateur');
if (isset($_POST['envoyer'])&&(!empty($_POST['email'])))
{
$email = $_POST['email'];

$sql = "SELECT id, pseudo, email FROM users WHERE email='".mysql_real_escape_string($email)."' LIMIT 1" ;
$res = mysql_query($sql)or exit('Erreur SQL ligne '.__LINE__.' : '.mysql_error());
if (@mysql_num_rows($res)!=1)  die('Email inconnu');
$row = mysql_fetch_assoc($res);
$pseudo = $row['pseudo'];
$umail = $row['email'];
$uk=$row['id'];

//généré une clé unique
$key = sha1(uniqid(rand()));
$sql = 'UPDATE users SET keys="'.$key.'" WHERE id="'.$uk.'"';
$res = mysql_query($sql)or exit('Erreur SQL ligne '.__LINE__.' : '.mysql_error()) ;

}
?>

<html>
<head></head>
<body>
<form name="f" method="post">
<fieldset>
	<legend>Mot de passe oublié ?</legend>
	<label for="email">Email</label>
	<input name="email" placeholder="Mail@domain.com" type="email"><br>
	<input name="envoyer" type="submit" value="envoyer">
</fieldset>
</form>
</body>
</html>

Il m'affiche ce message erreur de syntaxe :Erreur SQL ligne 21 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
c'est à dire dans cette requête
 $sql = 'UPDATE users SET keys="'.$key.'" WHERE id="'.$uk.'"';
Afficher la suite 

1 réponse

Messages postés
26116
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 août 2019
314
0
Merci
Bonjour,

1 - Préfères encapsuler tes string (la requête SQL par exemple) par des DOUBLE-QUOTES au lieu des SIMPLES..
Cela t'évitera de devoir systématiquement mettre des "'.$toto.'" ...

2 - Pour ce qui est de ton souci... fais un ECHO de la requête ... puis TESTES LA directement dans ta BDD.

3 - Lorsque tu écris tes requêtes (et que tu les testes en direct dans ta BDD..) n'hésites pas à y faire des retours à la ligne. Ainsi phpMyadmin ou HeidiSQL (ou tout autre logiciel de manipulation de BDD..) t'indiquera la ligne EXACT où se trouve le PB


Ce qui donne:
$sql = "UPDATE users 
          SET keys='$key'
         WHERE id='$uk'";

echo "<br> La requete à tester dans la BDD est :<br>".$sql;

jordane45
Messages postés
26116
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 août 2019
314 -
challenger11
Messages postés
16
Date d'inscription
lundi 30 mars 2015
Statut
Membre
Dernière intervention
16 avril 2015
-
Merci Jordane45 pour votre réponse j'ai fais comme tu m'a dis mais c'est pareil ainsi il m'indique erreur dans la ligne 2 c'est à dire ici :
 SET keys='$key' 
jordane45
Messages postés
26116
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 août 2019
314 > challenger11
Messages postés
16
Date d'inscription
lundi 30 mars 2015
Statut
Membre
Dernière intervention
16 avril 2015
-
Bien sûr.. tu as testé en direct la requête GENEREE (c'est à dire dans laquelle $key est remplacé par sa véritable valeur....

Par contre.. tu feras attention ... KEY / KEYS est un mot clé MYSQL .. il vaudrait donc mieux que tu nommes ton champ différemment.
challenger11
Messages postés
16
Date d'inscription
lundi 30 mars 2015
Statut
Membre
Dernière intervention
16 avril 2015
-
Effectivement j'ai remplacé keys par cles et sa marche merci infiniment Jordan à très bientôt .
Commenter la réponse de jordane45