Vérification sql

- - Dernière réponse : jordane45
Messages postés
23571
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2018
- 4 juin 2016 à 19:50
Bonsoir,

Jusque la, mon code php d'inscription fonctionnais, et la, je ne sais pas pourquoi, lors de l’inscription, si un pseudo existe déjà, l'ajout dans la Bdd se fait.

Php:
	
<?php
     session_start();
     echo "<p class=\"menu1\"><a class=\"menu\" href=\"index.php\">Accueil</a> <a class=\"menu\" href=\"membre.php\">Membre</a> <a class=\"menu\" href=\"classement.php\">Classement</a><a class=\"menu\" href=\"contact.php\">Contact</a> </p><br />";
          if(isset($_SESSION['pseudo']))
 {
  echo "<span class=\"connexuser\" align=\"right\">Bonjour et Bienvenue " .  $_SESSION['pseudo'] . " ! <a href=\"membre.php?pseudo=" . $_SESSION['pseudo'] . "\"><img src=\"Images/imagettes/bonsai.png\" border=\"0\" width=\"24\"/></a>   <a href=\"shop.php\"><img src=\"Images/imagettes/cart.png\" border=\"0\" width=\"24\"/></a>   <a href=\"editeProfil.php\"><img src=\"Images/imagettes/settings.png\" border=\"0\" width=\"24\"/></a>   <a href=\"deconnexion.php\"><img src=\"Images/imagettes/power.png\" border=\"0\" width=\"24\"/></a> </span>";
 }
else
{
echo "<span class=\"connexuser\"><a href=\"login.php\">Connexion</a> ou <a href=\"register.php\">Inscription</a> </span>";
}
?>
</div>
</header>
<main class="corps">
<div align="center">
<?php if (!empty($_SESSION['pseudo'])) {
        echo "<span style='color:red;'>Pour vous inscrire, vous ne devez pas être connecté. <a href='deconnexion.php'>Deconnexion</a>";
    } else { ?>
        <h2>Inscription</h2>
        <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 (!empty($_POST['pseudo'])) { echo htmlspecialchars($_POST['pseudo']); } ?>"/>
                    </td>
                </tr>
                <tr>
                    <td align="right">
                        <label for="mail">Mail :</label>
                    </td>
                    <td>
                        <input type="email" placeholder="Votre mail" id="mail" name="mail"
                               value="<?php if (!empty($_POST['mail'])) { echo htmlspecialchars($_POST['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 (!empty($_POST['mail2'])) { echo htmlspecialchars($_POST['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 align="center">
                        <br/>
                        <input type="submit" name="forminscription" value="Je m'inscris"/>
                    </td>
                </tr>
            </table>
        </form>
<?php
    }
    if (!empty($_POST)) {
        if (!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
            try {
                $bdd = new PDO('mysql:host=******;dbname=****;charset=utf8', '****', '*****');
                $bdd->seAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch (PDOException $e) {
                die('Erreur : '.$e->getMessage());
            }
              
              
            $pseudo = $_POST['pseudo'];
            $mail = $_POST['mail'];
            $mail2 = $_POST['mail2'];
            $mdp = sha1($_POST['mdp']);
            $mdp2 = sha1($_POST['mdp2']);
  
            $today  = new DateTime();
              
            $pseudolength = strlen($pseudo);
            if ($pseudolength <= 50) {
                if ($mail == $mail2) {
                    if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
                        $reqmail = $bdd->prepare("SELECT COUNT(*) FROM Membre WHERE email = ?");
                        $queryEmail = $reqmail->execute(array($mail));
                        if($queryEmail === false) {
                            die("Erreur de requête : " . print_r($reqmail->errorInfo()));
                        }
                        if ($reqmail->fetch()["c"] == 0) {
                            $reqpseudo = $bdd->prepare("SELECT COUNT(*) FROM Membre WHERE pseudo = ?");
                            $queryPseudo = $reqpseudo->execute(array($pseudo));
                            if($queryPseudo === false) {
                                die("Erreur de requête : " . print_r($reqpseudo->errorInfo()));
                            }
                            if ($reqmail->fetch()["c"] == 0) {
                                if ($mdp == $mdp2) {
                                    $insertmbr = $bdd->prepare(
                                        "INSERT INTO Membre(pseudo, email, mdp, dayI, monthI, yearsI) VALUES(?, ?, ?, ?, ?, ?)"
                                    );
                                    $queryResult = $insertmbr->execute(array($pseudo, $mail, $mdp, $today->format("j"), $today->format("n"), $today->format("Y")));
                                    if($queryResult === false) {
                                        die("Erreur de requête : " . print_r($insertmbr->errorInfo()));
                                    }
                                    echo "<span class=\"erreur\">Le compte ".htmlspecialchars($pseudo)." a bien été créé ! Vous pouvez désormais <a href=\"login.php\">vous connecter</a>, ou même acceder a votre profil <a href=\"membre.php?pseudo=".$pseudo."\">votre plante.</span></a>";
                                } else {
                                    $erreur = "Vos mots de passes ne correspondent pas !";
                                }
                            } else {
                                $erreur = "Le pseudo " .  htmlspecialchars($pseudo) . " est déjà utilisé !";
                            }
                        } else {
                            $erreur = "L'adresse mail " . htmlspecialchars($mail) . " déjà utilisée !";
                        }
                    } else {
                        $erreur = "L'adresse mail " . htmlspecialchars($mail)  . " n'est pas valide !";
                    }
                } else {
                    $erreur = "L'adresses mail " . htmlspecialchars($mail) . " ne correspondent pas !";
                }
            } else {
                $erreur = "Votre pseudo ne doit pas dépasser 50 caractères !";
            }
        } else {
            $erreur = "Tous les champs doivent être complétés !";
        }
    }
  
    if (isset($erreur)) {
        echo '<span class="erreur">' . htmlspecialchars($erreur) . "</span></p>";
    }
  
    ?>



Pouvez vous me corriger ?

Merci :)
Afficher la suite 

Votre réponse

1 réponse

Messages postés
23571
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2018
0
Merci
Bonjour,

Déjà ... place le code de connexion à ta BDD dans un fihcier à part que tu n'auras qu'à inclure dans les pages où tu en auras besoin...
Ca t'éviter de copier/coller 50 fois la même chose ....
Par exemple :

<?php
//Fichier de connexion à la bdd : cnxBdd.php
 try{
   $bdd = new PDO('mysql:host=******;dbname=****;charset=utf8', '****', '*****');
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erreur de connexion : ' . $e->getMessage());
} 


et pour l'utiliser, juste coller la ligne ci-dessous dans ton fichier :

  // connexion à la BDD
  require_once "cnxBdd.php";



NB: Les blocs TRY/CATCH permettent d'intercepter les éventuelles erreurs. (tu peux/dois.. aussi les utiliser sur tes requêtes ! )


Une fois la connexion correctement réalisée et sans erreur.... tu peux passer à la suite de ton code.
- Récupération "propre" des variables AVANT de les utiliser

$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$mail = !empty($_POST['mail']) ? $_POST['mail'] : NULL;
$mail2 = !empty($_POST['mail2']) ? $_POST['mail2'] : NULL;
$mdp = !empty($_POST['mdp']) ?  sha1($_POST['mdp']) : NULL;
$mdp2 = !empty($_POST['mdp2']) ? sha1($_POST['mdp2']) : NULL;



Puis pour savoir si un utilisateur existe déjà .. il faut procéder ainsi :

//Préparation de al requete 
$sql = "SELECT count(*) as NB FROM Membre WHERE mail = :mail";
$datas = array(":mail"=>$mail);

//exécution de la requete :
try{
    $prepare= $bdd->prepare($sql);
    $prepare->execute($datas);
}catch(Exception $e){
  // en cas d'erreur dans la requete
   echo "Erreur : ".$e->getMessage();
   echo "<br> Dans la requete :".$sql;
   echo "<br> Avec les variables : ";
   print_r($datas);
}

$result = $prepare->fetchAll();
if( $result[0]['NB'] == 0 ){ 
 //la suite de ton code



NB: Tu noteras que seul la variable $sql et la variable $datas ne changent d'une requête à une autre... le reste du code (dans le try/catch) reste inchangé... tu n'as donc pas à y toucher !


Cordialement, 
Jordane                                                                 
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.