Aide explication requete AND OR et XOR

Fermé
Hector187 Messages postés 8 Date d'inscription mercredi 13 mars 2013 Statut Membre Dernière intervention 2 avril 2013 - 22 mars 2013 à 05:46
Hector187 Messages postés 8 Date d'inscription mercredi 13 mars 2013 Statut Membre Dernière intervention 2 avril 2013 - 24 mars 2013 à 15:55
Bonjour,



j'étudie les requêtes sql et je ne comprend pas pourquoi cela m'affiche ces résultats en fonction du AND OR ou XOR voici la requête :

$req = $bdd->prepare('SELECT pseudo, mot_de_passe FROM inscription WHERE pseudo != :pseudo XOR mot_de_passe != :mot_de_passe ') ;
$req->execute(array('pseudo' => $_POST['pseudo'], 'mot_de_passe' => $_POST['mot_de_passe'])) or die(print_r($bdd->errorInfo()));
while ($donnees = $req->fetch())
{
echo $donnees['pseudo'] . ' ' . $donnees['mot_de_passe'];
}

pour le test la BDD contient juste deux entrées donc avec le XOR ca me renvoie l'entrée une de ma BDD.
Avec le AND ca me renvoie juste l'entrée deux de ma BDD
Et avec le OR tte la BDD s'affiche je ne comprend pas la logique !!!! le tout en rentrant dans le formulaire qui renvoie les $_POST un identifiant correct et un mot de passe erroné !
Une explication pour m'aider a moins que ce message soit incompréhensible :-(

6 réponses

yenku Messages postés 11 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 22 mars 2013 3
22 mars 2013 à 10:32
Bonjour,

Voici la réponse que je peux t'apporter en fonction de ce que j'ai compris de ton poste.

Le AND ne te renvoie que l'entrée deux de ta BDD car il te renvoie que la chose valide.

Le OR te renvoie toute la BDD car c'est un ou et il suffit qu'une chose soit vrai pour que la condition soient vérifiée.

j'espère avoir été claire.

Voici quelques liens de tuto vidéo pour la connexion a un espace membre d'un site web en php avec BDD:

https://www.grafikart.fr/tutoriels/gestion-membre-229
https://www.grafikart.fr/tutoriels/niveau-permissions-php-148
https://www.grafikart.fr/tutoriels/developper-site-jour7-authentification-189

Cordialement Yenku.
0
Hector187 Messages postés 8 Date d'inscription mercredi 13 mars 2013 Statut Membre Dernière intervention 2 avril 2013
22 mars 2013 à 17:12
Salut Yenku merci pour ton explication ;-) alors j'apporte quelques précisions voici la BDD à deux entrée :
1) pseudo : Hector pass : Priam
2) pseudo : Achyll pass : WestCoast

j'entre dans mon formulaire :
pseudo : Hector
pass : 1234

Donc pour le OR ok comme l'une des deux entrées est valide ça me renvoie toute la BDD.

Mais le AND je bloque : pourquoi l'entrée deux (achyll westcoast) alors que je rentre une partie des identifiant de l'entrée une ?
0
Utilisateur anonyme
22 mars 2013 à 17:39
Bonjour

Donc pour le OR ok comme l'une des deux entrées est valide
Justement non ! Dans ton test, tu ne vérifie pas l'égalité mais la différence !
Donc le ou fonctionne car il y a toujours au moins un champ différent
Avec le AND tu vérifies que les DEUX champs sont mauvais à la fois, c'est donc bien la deuxième,ligne qui satisfait la condition
Et le XOR est ok sur la première ligne car un champ est bon et l'autre mauvais.
0
Hector187 Messages postés 8 Date d'inscription mercredi 13 mars 2013 Statut Membre Dernière intervention 2 avril 2013
Modifié par Hector187 le 22/03/2013 à 20:08
Le père merci pour ton éclaircissement (encore merci à yenku aussi ;-)) mais il doit me manquer un petit truck dans la compréhension globale.

je reprend ma requête avec XOR qui m'affiche mon entrée une et je rajoute le codage suivant :

if($donnees['pseudo'] != $_POST['pseudo'])
{
echo 'Pseudo invalide veuillez réessayé';
}
elseif($donnees['mot_de_passe'] != $_POST['mot_de_passe'])
{
echo 'mot de passe invalide veuillez réessayé';
}
else
{
echo 'identifiants invalide veuillez réessayé';
}

je ne comprend pas pourquoi dans le cas ou le pseudo est bon et le mot de passe incorrect cela m'affiche dans tout les cas l'echo du if et pas celui du elseif ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
22 mars 2013 à 22:46
As-tu écrit hector ou Hector avec les mêmes majuscules / minuscules dans ton formulaire que ce qu'il y a dans ta base ?
Si tu n'as pas écrit exactement de la même manière, ça peut expliquer ce que tu vois. Car MySQL ne tient pas compte (ne général) de la casse, alors que PHP en tient compte. Donc tu peux bien avoir 'Hector'='hector' pour MySQL alors que 'Hector'!='hector' pour PHP
0
Hector187 Messages postés 8 Date d'inscription mercredi 13 mars 2013 Statut Membre Dernière intervention 2 avril 2013
24 mars 2013 à 15:55
Le père encore une fois je te remercie tu as compris direct.

Maintenant tout marche parfaitement je vais pouvoir passer aux exercices suivant ;-)

j'espère pouvoir te renvoyer l'ascenseur un jour.
0