Vérification sql

Signaler
-
Messages postés
32498
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2021
-
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 :)

1 réponse

Messages postés
32498
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2021
348
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