Problème conditions
Résolu
flo39400
Messages postés
596
Date d'inscription
Statut
Membre
Dernière intervention
-
flo39400 Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
flo39400 Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
Bonsoir, voilà je débute tout juste est j'ai un problème de conditions.
En temps normal je devrais pas pouvoir m'inscrire si j'ai le même pseudo ou la même adresse mais pourtant j'arrive a le faire je me demande pourquoi.
Si vous pouvez m'aider.
En temps normal je devrais pas pouvoir m'inscrire si j'ai le même pseudo ou la même adresse mais pourtant j'arrive a le faire je me demande pourquoi.
Si vous pouvez m'aider.
<?php $bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', ''); if(isset($_POST['forminscription'])) { if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) { $pseudo = htmlspecialchars($_POST['pseudo']); $mail = htmlspecialchars($_POST['mail']); $mail2 = htmlspecialchars($_POST['mail2']); $mdp = sha1($_POST['mdp']); $mdp2 = sha1($_POST['mdp2']); $pseudolength = strlen($pseudo); if($pseudolength <= 25) { $reqpseudo = $bdd->prepare("SELECT * FORM membres WHERE pseudo = ?"); $reqpseudo->execute(array($pseudo)); $pseudoexist = $reqpseudo->rowCount(); if($pseudoexist == 0) { if($mail == $mail2) { if(filter_var($mail, FILTER_VALIDATE_EMAIL)) { $reqmail = $bdd->prepare("SELECT * FORM membres WHERE mail = ?"); $reqmail->execute(array($mail)); $mailexist = $reqmail->rowCount(); if($mailexist == 0) { if($mdp == $mdp2) { $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)"); $insertmbr->execute(array($pseudo, $mail, $mdp)); $erreur = "Votre compte a bien été créé !"; } else { $erreur = "Vos mots de passe ne correspondent pas !"; } } else { $erreur = "Adresse mail déjà uttilisée !"; } } else { $erreur = "Votre adresse mail n'est pas valide !"; } } else { $erreur = "Vos adresses mail ne correspondent pas !"; } } else { $erreur = "Votre pseudo est déjà uttilisée !"; } } else { $erreur = "Votre pseudo ne doit pas dépasser 25 caractères !"; } } else { $erreur = "Tous les champs doivent être complétés !"; } } ?> <html> <head> <title>Mon site</title> <meta charset="utf-8"> </head> <body> <div align="center"> <h2>Inscription</h2> <br/><br/><br/> <form method="POST" action=""> <table> <tr> <td align="right"> <label for="pseudo">Pseudo :</label> </td> <td> <input type="text" placeholder="Votre pseudo" id="pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>" /> </td> </tr> <tr> <td align="right"> <label for="mail">Mail :</label> </td> <td> <input type="email" placeholder="Votre e-mail" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>"/> </td> </tr> <tr> <td align="right"> <label for="mail2">Confirmation du mail :</label> </td> <td> <input type="email" placeholder="Confirmez votre mail" id="mail2" name="mail2" value="<?php if(isset($mail2)) { echo $mail2; } ?>"/> </td> </tr> <tr> <td align="right"> <label for="mdp">Mot de passe :</label> </td> <td> <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" /> </td> </tr> <tr> <td align="right"> <label for="mdp2">Confirmation du mot de passe :</label> </td> <td> <input type="password" placeholder="Confirmez votre MDP" id="mdp2" name="mdp2" /> </td> </tr> <tr> <td></td> <td> <br/> <input type="submit" name="forminscription" value="Je m'inscris" /> </td> </tr> </table> </form> <?php if(isset($erreur)) { echo '<font color= "red">'.$erreur."</font>"; } ?> </div> </body> </html>
A voir également:
- Problème conditions
- Mise en forme conditionnelle excel plusieurs conditions - Guide
- Je ne suis pas un robot confidentialité - conditions ✓ - Forum Mail
- Comment débloquer "je ne suis pas un robot" ✓ - Forum Windows 8 / 8.1
- Libreoffice calc si plusieurs conditions ✓ - Forum LibreOffice / OpenOffice
- Désactiver un robot captcha - Forum Facebook
3 réponses
Salut,
La méthode rowCount() de PDO ne garantie par de retourner le nombre de ligne pour une requête de type SELECT (cf. doc) : https://www.php.net/manual/fr/pdostatement.rowcount.php
Tu peux trouver sur cette même doc un exemple de récupération du nombre de ligne via une requête SELECT COUNT(*) et d'un fetchColumn() à la place de rowCount() : https://www.php.net/manual/fr/pdostatement.rowcount.php#example-1065
Bonne journée,
La méthode rowCount() de PDO ne garantie par de retourner le nombre de ligne pour une requête de type SELECT (cf. doc) : https://www.php.net/manual/fr/pdostatement.rowcount.php
Tu peux trouver sur cette même doc un exemple de récupération du nombre de ligne via une requête SELECT COUNT(*) et d'un fetchColumn() à la place de rowCount() : https://www.php.net/manual/fr/pdostatement.rowcount.php#example-1065
Bonne journée,
Bonsoir, donc après quelques recherche je suis arrivé a cela:
Donc au début je voulais récupérer la variable ['tot'] via $reqpseudo['tot'].
Mais j'ai eu une erreur Fatal.
Avec ce code j'ai bien mon message d'erreur en bas comme quoi: "Votre pseudo est déjà utilisé !" mais un message d'erreur aussi tel que: "Notice: Object of class PDOStatement could not be converted".
J'aimerai comprendre afin d'évité ce problème a l'avenir.
Merci d'avance.
$reqpseudo = $bdd->prepare("SELECT COUNT(*) AS tot FORM membres WHERE pseudo = ?"); $reqpseudo->execute(array($pseudo)); //$pseudoexist = $reqpseudo->fetchColumn(); if($reqpseudo == 0)
Donc au début je voulais récupérer la variable ['tot'] via $reqpseudo['tot'].
Mais j'ai eu une erreur Fatal.
Avec ce code j'ai bien mon message d'erreur en bas comme quoi: "Votre pseudo est déjà utilisé !" mais un message d'erreur aussi tel que: "Notice: Object of class PDOStatement could not be converted".
J'aimerai comprendre afin d'évité ce problème a l'avenir.
Merci d'avance.
Tu ne peux normalement pas comparer l'objet $reqpseudo avec la valeur 0 puisque cette objet un est PDOStatement et pas directement le résultat de ta requête, d'où le message d'erreur Notice je pense.
L'utilisation de fetchColumn() sur l'objet $reqpseudo est normalement la bonne méthode.
Peux tu stp nous montrer le message d'erreur complet de l'erreur Fatal avec si possible le code correspondant ?
L'utilisation de fetchColumn() sur l'objet $reqpseudo est normalement la bonne méthode.
Peux tu stp nous montrer le message d'erreur complet de l'erreur Fatal avec si possible le code correspondant ?
$reqpseudo = $bdd->prepare("SELECT COUNT(*) AS tot FORM membres WHERE pseudo = ?"); $reqpseudo->execute(array($pseudo)); $pseudoexist = $reqpseudo->fetchColumn(); if($pseudoexist == 0)
Donc la aucun message d'erreur mais le code ne sert a rien car le compte est crée sans vérifié si le pseudo est présent dans la base de donnée.
$reqpseudo = $bdd->prepare("SELECT COUNT(*) AS tot FORM membres WHERE pseudo = ?"); $reqpseudo->execute(array($pseudo)); $pseudoexist[tot] = $reqpseudo->fetchColumn(); if($pseudoexist == 0)
Donc la j'ai bien le message d'erreur: "Votre pseudo est déjà utilisée !"
Et j'ai un le message de la part du serveur: "Notice: Use of undefined constant tot - assumed 'tot' in C:\wamp64\www\site\inscription.php on line 19"
$reqpseudo = $bdd->prepare("SELECT COUNT(*) AS tot FORM membres WHERE pseudo = ?"); $reqpseudo->execute(array($pseudo)); if($pseudoexist == 0)
La donc la condition n'est pas bonne en plus de cela le serveur m'affiche un serveur.
Donc condition fausses.
Message: "Notice: Undefined variable: pseudoexist in C:\wamp64\www\site\inscription.php on line 20"
je vous montre cela, pour la condition doit être vrai pour le serveur car sinon il devrait avoir une erreur.