Aide explication requete AND OR et XOR

Hector187 Messages postés 8 Statut Membre -  
Hector187 Messages postés 8 Statut Membre -
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

  1. yenku Messages postés 11 Statut Membre 3
     
    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
  2. Hector187 Messages postés 8 Statut Membre
     
    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
  3. Utilisateur anonyme
     
    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
  4. Hector187 Messages postés 8 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
  7. Hector187 Messages postés 8 Statut Membre
     
    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