Requête MySQL et caractères spéciaux.
Posté : 03 janv. 2017, 01:19
Bonsoir,
Je souhaite sécuriser une partie de mon site en vérifiant l'identifiant (en fait l'e-mail) et le mot de passe de l'utilisateur.
Lorsque je fais un teste avec un mot de passe normal (du genre blaBla01+), tout se déroule normalement.
Je suis donc passé à l'étape supérieure en faisant un test avec un utilisateur ayant un mot de passe contenant des caractères spéciaux (en l'occurrence le mot de passe tesbb'ttt"aa %ù$*£ù¨éà@+-_A). Bien évidemment, là ça plante lamentablement (et la session ne s'initialise pas).
Ce qui est très étonnant, c'est que je fais en sorte de récupérer la requête SQL via un 'echo' et qu'après en avoir fait un copier-coller dans MySQL, je m'aperçois que la requête SQL s'exécute normalement et que j'obtiens bien le résultat attendu. Malgré tout, ça ne fonctionne pas dans le script PHP.
Pour info, la requête SQL récupérée par la procédure echo est la suivante :
SELECT * FROM TableConnexion WHERE email = "[email protected]" AND MotDePasse = "tesbb\'ttt\"aa %ù$*£ù¨éà@+-_A";
Je souhaite sécuriser une partie de mon site en vérifiant l'identifiant (en fait l'e-mail) et le mot de passe de l'utilisateur.
Lorsque je fais un teste avec un mot de passe normal (du genre blaBla01+), tout se déroule normalement.
Je suis donc passé à l'étape supérieure en faisant un test avec un utilisateur ayant un mot de passe contenant des caractères spéciaux (en l'occurrence le mot de passe tesbb'ttt"aa %ù$*£ù¨éà@+-_A). Bien évidemment, là ça plante lamentablement (et la session ne s'initialise pas).
Ce qui est très étonnant, c'est que je fais en sorte de récupérer la requête SQL via un 'echo' et qu'après en avoir fait un copier-coller dans MySQL, je m'aperçois que la requête SQL s'exécute normalement et que j'obtiens bien le résultat attendu. Malgré tout, ça ne fonctionne pas dans le script PHP.
Pour info, la requête SQL récupérée par la procédure echo est la suivante :
SELECT * FROM TableConnexion WHERE email = "[email protected]" AND MotDePasse = "tesbb\'ttt\"aa %ù$*£ù¨éà@+-_A";
<?php
// Si l'utilisateur tente de se connecter, alors on vérifie ses identifiants avant d'ouvrir la connexion.
if (isset($_POST['identifiant']) && isset($_POST['pwd'])) {
$cnx = mysqli_connect('localhost', 'root', 'MotDePasse', 'MaBDD');
$identifiant = mysqli_real_escape_string($cnx, $_POST['identifiant']); //Cela pour gérer les caractères spéciaux de $_POST['identifiant'].
$pwd = mysqli_real_escape_string($cnx, $_POST['pwd']); //Cela pour gérer les caractères spéciaux de $_POST['pwd'].
$sqlRqte = SELECT * FROM TableConnexion WHERE email = \"".$identifiant."\" AND MotDePasse = \"".$pwd."\";"
$rqteMdp = mysqli_query($cnx, $sqlRqte);
if (mysqli_num_rows($rqteMdp) == 1) {
session_start();
echo "<script language='javascript'> window.alert('session ouverte'); </script>";
}
else {
echo $sqlRqte."<br>"; // Lorsque je fais un copier-coller de cette sortie dans MySQL : ca marche !!!
echo mysqli_num_rows($rqteMdp); // Ca me retourne 0 alors que le SQL de la ligne précédente fonctionne dans MySQL.
echo "<script language='javascript'> window.alert('session fermee'); </script>";
}
mysqli_free_result($rqteMdp);
mysqli_close($cnx);
}
?>