Condition ne fonctionne pas

Résolu
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   -  
barnabe0057 Messages postés 14455 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

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > barnabe0057 Messages postés 14455 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
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
... WHERE AdresseEmail="'.$courriel.'"'
Après utiliser une requête paramétrée t'évitera d'avoir un risque d'injection SQL.
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
C'est le traitement de la requête qui me pose problème, plutôt que la requête elle-même.
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
As-tu essayé ma suggestion ?
Comment l'as-tu implémenté ?
As-tu une erreur ?
As-tu essayé la requête dans PHPMyAdmin ?
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > yg_be Messages postés 23541 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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
Ca ne change rien, j'ai une page blanche.
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
Et en ajoutant
echo "<br>_post: ";
var_dump ($_POST);
?
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > yg_be Messages postés 23541 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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > yg_be Messages postés 23541 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