Condition ne fonctionne pas

Résolu/Fermé
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - Modifié par barnabe0057 le 28/12/2016 à 15:00
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 28 déc. 2016 à 23:49
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
Modifié par NHenry le 28/12/2016 à 15:06
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
28 déc. 2016 à 15:56
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
28 déc. 2016 à 15:57
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
28 déc. 2016 à 16:23
... 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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié par barnabe0057 le 28/12/2016 à 17:02
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
28 déc. 2016 à 18:38
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié par barnabe0057 le 28/12/2016 à 20:07
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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 déc. 2016 à 21:30
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
28 déc. 2016 à 21:51
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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 déc. 2016 à 22:13
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
28 déc. 2016 à 22:20
Ca ne change rien, j'ai une page blanche.
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié par barnabe0057 le 28/12/2016 à 22:12
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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 déc. 2016 à 22:30
Et en ajoutant
echo "<br>_post: ";
var_dump ($_POST);
?
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
Modifié par barnabe0057 le 28/12/2016 à 22:42
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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 déc. 2016 à 23:30
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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 déc. 2016 à 23:34
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
28 déc. 2016 à 23:49
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