Résolu Erreur sql: syntax mail

arbilus

Expert
Bonjour, j'ai ce message d'erreur depuis que j'ai fait quelques modifs à un de mes scripts:

Erreur SQL !
SELECT id FROM **_users WHERE **_email = *****@gmail.com
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 '@gmail.com' at line 1

Je ne comprend pas pourquoi .
Voila la requète:

[cpp]$sql1 = 'SELECT id FROM **_users WHERE **_email = '.mysql_real_escape_string($_SESSION['logged']).'';
$req1 = mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error());
$idd = mysql_fetch_array($req1); [/cpp]

Le but c'est que quand le type se connecte on récupère son adresse email (utilisée pour de la connexion) dans une session php puis on utilise cette adresse email pour trouver l'id du membre afin d'activer d'autres requètes etc..

De plus (mais c'est pas vraiment le problème), j'ai essayé de crypter le mail lors de la création de la session:

[cpp] session_start();
$_SESSION['logged'] = md5($qmail["**_email"]);
header('Location: **/index.php'); // ici l'espace membre
exit();[/cpp]

Mais si je fait ça, 1 j'ai toujours le message d'erreur en amont, ET 2, il m'indique [cpp]WHERE **_email = xKejhhgs7876$%[/cpp] etc.. Où xKejhhgs7876$% est la version cryptée du mail .. Bref, j'aimerais ne plus avoir ce message et savoir comment (si c'est possible) récupérer la version "décryptée" (les guillements car je sais que ce n'est pas possible de décrypter du md5) de la valeur dans le session php afin de l'utiliser dans ma requete sql .
 

magellan

Modérâleur
Staff
Une remarque étrange selon moi (mais je peux me tromper lourdement)
Code:
   1. $sql1 = 'SELECT id FROM **_users WHERE **_email =  '.mysql_real_escape_string($_SESSION['logged']).'';
   2. $req1 = mysql_query($sql1) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error());
   3. $idd = mysql_fetch_array($req1);
La requête SQL est entre cotes ('), donc la chaîne retournée est bien
Code:
SELECT id FROM **_users WHERE **_email =  '
J'ignore comment les "**" seront interprétés, car, à mon sens, le SQL ne connaît pas le double étoile.
Comment était le script au préalable? Contenait-il une requête de recherche?

Second point sur la requêtre
Code:
'SELECT id FROM **_users WHERE **_email =  '.mysql_real_escape_string($_SESSION['logged']).''
je vois ceci à la fin :
Code:
.''
Etant donné que les deux guillemets précédentes sont bien ouvrantes/fermantes, j'ai un doute sur l'exécution d'un point et puis "vide" ...
 

magellan

Modérâleur
Staff
Pour l'encryption, ce n'est pas l'adresse que l'on doit crypter, mais plutôt le mot de passe, si tant est qu'il soit stocké dans la BDD.

De là:
- Pour comparer un résultat de crypto, il faudrait alors passer TOUTE LA TABLE à la crypto, pour produire une égalité correcte, ou alors crypter à la volée les données, pour que le "select" compare bien la valeur cryptée transmisse à celle retournée par le serveur.
Je ne vois de toute façon pas trop l'intérêt de crypter l'adresse, à moins d'avoir un souci réel de sécurité. Tant que le mot de passe n'est pas transmis, aucun intérêt ou presque de protéger cette valeur.
 

arbilus

Expert
Meilleure réponse
Les deux **, c'est pour des possibles raisons de sécurité, on sait jamais :whistle: .
Quant à la réponse à ma question, j'ai finalement trouvé !
[cpp]$sql1 = "SELECT id FROM **_users WHERE **_email = '". mysql_real_escape_string($_SESSION['logged']) ."'";
[/cpp]
Quant à l'encryption, après reflexion je n'en est strictement pas besoin car il est impossible pour n'importe qui de récupérer les données d'une session php (si on a bien tapé le code ..) . De plus pour créer la session il y a avant des vérifs des identifiants tapés dans la BDD .
 

magellan

Modérâleur
Staff
Donc y avait bien un souci de guillemets à la fin;)

Je ne suis pas si manche que ça:p
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 829
Membres
1 586 367
Dernier membre
ramkin
Partager cette page
Haut