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 -
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.
Merci d'avance pour votre aide.
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.
A voir également:
- Condition ne fonctionne pas
- Excel cellule couleur si condition texte - Guide
- Excel condition ou - Guide
- Nbval avec condition ✓ - Forum Excel
- Je ne suis pas un robot confidentialité - conditions - Forum Facebook
- Condition optimale téléphone ✓ - Forum Mobile
3 réponses
1) Pour filtrer une requête, regarde la clause SQL "WHERE "
2)
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"
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"
Comment faire pour comparer deux chaînes de caractères ?
J'ai essayé avec strcmp ou avec in_array mais ça ne fonctionne pas.
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(); ?>
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(); ?>
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(); ?>
Je récapitule, voilà ce qui marche pour l'instant :
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.
<?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.
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(); ?>
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(); ?>
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é.
Après utiliser une requête paramétrée t'évitera d'avoir un risque d'injection SQL.
Comment l'as-tu implémenté ?
As-tu une erreur ?
As-tu essayé la requête dans PHPMyAdmin ?