Requête update

Résolu
challenger11 Messages postés 16 Date d'inscription lundi 30 mars 2015 Statut Membre Dernière intervention 16 avril 2015 - 16 avril 2015 à 12:10
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.'"';
A voir également:

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
16 avril 2015 à 12:43
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;

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
16 avril 2015 à 12:44
PS: L'extension MYSQL_ est OBSOLÈTE... lis ceci :
http://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
0
challenger11 Messages postés 16 Date d'inscription lundi 30 mars 2015 Statut Membre Dernière intervention 16 avril 2015
16 avril 2015 à 13:04
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' 
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344 > challenger11 Messages postés 16 Date d'inscription lundi 30 mars 2015 Statut Membre Dernière intervention 16 avril 2015
16 avril 2015 à 14:18
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.
0
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
Effectivement j'ai remplacé keys par cles et sa marche merci infiniment Jordan à très bientôt .
0
Rejoignez-nous