Condition ne fonctionne pas

Résolu
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -  
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je ne comprend pas pourquoi la condition if ne fonctionne pas, le reste fonctionne très bien.

<?php

$courriel = "contact@domaine.tld";

try
{
$bdd = new PDO('mysql:dbname=postfix;host=localhost;charset=utf8', 'root', 'password', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}

catch(Exception $e)
{
      die('Connection failed : '.$e->getMessage());
}

$reponse = $bdd->query('SELECT username FROM mailbox');

while ($donnees = $reponse->fetch())
{

echo $donnees['username'] . '<br />';

if ($courriel == $donnees)
{
echo 'adresse trouvée !!! <br />';
break;
}

}

$reponse->closeCursor();

?>


Merci d'avance pour votre aide.

3 réponses

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    1) Pour filtrer une requête, regarde la clause SQL "WHERE "
    2)
    $courriel = "contact@domaine.tld";
    echo $donnees['username'] 
    if ($courriel == $donnees)

    Comment veux-tu qu'un tableau soit égal à une chaine de caractères ?
    J'interviens principalement en VB6 et VB.NET, avec un peu de C#, mais la modération m'amène souvent sur d'autre langages.
    En VB.NET pensez à activer "Option Explicit" et "Option Strict"
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Merci pour ton aide.

      J'essaie de créer un formulaire qui permettra à quiconque de créer un compte sur mon serveur de messagerie, j'ai une première page avec le formulaire qui envoie l'adresse courriel désirée à cette page. Cette page vérifie dans la base de données Postfix que le courriel ne soit pas déjà utilisé.
      0
    2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Je ne trouve pas quelle condition appliquer pour vérifier si le courriel existe déjà dans la base de données.
      0
    3. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      ... WHERE AdresseEmail="'.$courriel.'"'
      Après utiliser une requête paramétrée t'évitera d'avoir un risque d'injection SQL.
      0
    4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      C'est le traitement de la requête qui me pose problème, plutôt que la requête elle-même.
      0
    5. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      As-tu essayé ma suggestion ?
      Comment l'as-tu implémenté ?
      As-tu une erreur ?
      As-tu essayé la requête dans PHPMyAdmin ?
      0
  2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Comment faire pour comparer deux chaînes de caractères ?

    J'ai essayé avec strcmp ou avec in_array mais ça ne fonctionne pas.

    <?php
    
    $courriel = $_POST['courriel'];
    
    try
    {
    $bdd = new PDO('mysql:dbname=postfix;host=localhost;charset=utf8', 'root', 'password', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    
    catch(Exception $e)
    {
          die('Connection failed : '.$e->getMessage());
    }
    
    $reponse = $bdd->query('SELECT username FROM mailbox');
    
    while ($donnees = $reponse->fetch())
    {
    if (strcmp($courriel, $donnees) == 0);
    {
    echo 'adresse indisponible !!! <br />';
    break;
    }
    
    }
    $reponse->closeCursor();
    
    ?>
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Et ainsi?
      <?php
      $courriel = $_POST['courriel'];
      try
      {
      $bdd = new PDO('mysql:dbname=postfix;host=localhost;charset=utf8', 'root', 'password', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
      }
      catch(Exception $e)
      {
            die('Connection failed : '.$e->getMessage());
      }
      $reponse = $bdd->query("SELECT count(*) as nb FROM mailbox WHERE username = '$courriel'");
      echo $reponse;
      $donnees = $reponse->fetch());
      $nb= $donnees['nb'];
      echo $nb;
      if $nb > 0 {
      echo 'adresse indisponible !!! <br />';
      break;
      }
      $reponse->closeCursor();
      ?>
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci pour ta réponse, pas moyen de savoir si ça marche, rien ne s'affiche, même pas les variables.
        0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Et en ajoutant ceci avant le try?
      <?php
      $courriel = $_POST['courriel'];
      echo "<br>_post: ";
      var_dump ($_POST);
      try
      {
      $bdd = new PDO('mysql:dbname=postfix;host=localhost;charset=utf8', 'root', 'password', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
      }
      catch(Exception $e)
      {
            die('Connection failed : '.$e->getMessage());
      }
      $sql="SELECT count(*) as nb FROM mailbox WHERE username = '$courriel'";
      echo "<br>sql :".$sql;
      $reponse = $bdd->query($sql);
      $donnees = $reponse->fetch());
      $nb= $donnees['nb'];
      echo "<br>nb :"$nb;
      if $nb > 0 {
      echo 'adresse indisponible !!! <br />';
      break;
      }
      $reponse->closeCursor();
      ?>
      0
    3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Ca ne change rien, j'ai une page blanche.
      0
  3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Je récapitule, voilà ce qui marche pour l'instant :

    <?php
    
    $courriel = $_POST['courriel'];
    
    try
    {
    $bdd = new PDO('mysql:dbname=postfix;host=localhost;charset=utf8', 'root', 'password', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    
    catch(Exception $e)
    {
          die('Connection failed : '.$e->getMessage());
    }
    
    $reponse = $bdd->query('SELECT username FROM mailbox');
    
    while ($donnees = $reponse->fetch())
    {
    echo $donnees['username'] . '<br />';
    //echo 'adresse indisponible !!! <br />';
    //break;
    }
    $reponse->closeCursor();
    
    ?>


    Ce que je trouve étrange, c'est que je peux afficher les champs de la base mais je ne peux pas les comparer à une variable.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Et en ajoutant
      echo "<br>_post: ";
      var_dump ($_POST);
      ?
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Ca m'affiche ça :

        _post: array(1) { ["courriel"]=> string(7) "hvjjcvc" } admin@domaine.tld
        contact@domaine.tld
        gravedigger@domaine.tld
        mattermost@domaine.tld


        Un petit charabia avec ce que j'ai tapé dans le formulaire ("hvjjcvc"), suivi de mes 4 comptes de messagerie en gras
        0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Et ainsi?
      <?php
      $courriel = $_POST['courriel'];
      echo "<br>_post: ";
      var_dump ($_POST);
      try
      {
      $bdd = new PDO('mysql:dbname=postfix;host=localhost;charset=utf8', 'root', 'password', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
      }
      catch(Exception $e)
      {
            die('Connection failed : '.$e->getMessage());
      }
      $sql='SELECT count(*) as nb FROM mailbox WHERE username = "'.$courriel.'"';
      echo "<br>sql :".$sql;
      $reponse = $bdd->query($sql);
      $donnees = $reponse->fetch());
      $nb= $donnees['nb'];
      echo "<br>nb :"$nb;
      if $nb > 0 {
      echo 'adresse indisponible !!! <br />';
      break;
      }
      $reponse->closeCursor();
      ?>
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Ou bien:
      <?php
      
      $courriel = $_POST['courriel'];
      
      try
      {
      $bdd = new PDO('mysql:dbname=postfix;host=localhost;charset=utf8', 'root', 'password', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
      }
      
      catch(Exception $e)
      {
            die('Connection failed : '.$e->getMessage());
      }
      
      $reponse = $bdd->query('SELECT username FROM mailbox');
      
      while ($donnees = $reponse->fetch())
      {
         echo $donnees['username'] . '<br />';
         if $donnees['username'] == $courriel
         {
            echo 'adresse indisponible !!! <br />';
            break;
         }
      }
      $reponse->closeCursor();
      
      ?>
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Celui-là fonctionne ! Mais j'ai dû rajouter des parenthèses au if.

        Ouf, je vais pouvoir passer à la suite.

        Un grand merci pour votre patience à tous les deux, à très vite je pense !
        0