Bonjour à toutes et à tous,
je suis débutants en php et il se trouve que j'essai de faire une page d'inscription or le probleme cest que mes données rentrés dans les champs ne s'enregistre pas dans ma base de donnée... :( je ne serai pas contre un petit coup de main merci :)
voila mon code :
(désolé de donner le code sous une forme aussi brute... mais je ne sais pas faire les capture qui vont bien sous sublime text si vous pouviez me donner le tuyaux je serai pas contre aussi :) )

<!DOCTYPE html>

<?php
try
{
$host = 'localhost';
$database = 'pseudo_mdp';
$identifiant = 'root';
$password = 'root';
$db = new PDO('mysql:host='.$host.';dbname='.$database.'', $identifiant, $password);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}catch(PDOException $e){
echo 'La base de donnée n\'est pas disponible pour le moment. <br />';
echo ''.$e->getMessage().'<br />';
echo 'Ligne : '.$e->getLine();
}
?>

<html>
<head>
<meta charset="utf-8" />
<title>Inscription réussi</title>
</head>

<body>

<?php

if( !empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['mot_de_passe']) && !empty($_POST['verification_mot_de_passe']))
{
    // Sécurité
    $pseudo = addslashes(htmlspecialchars(htmlentities(trim($_POST['pseudo']))));
    $email = addslashes(htmlspecialchars(htmlentities(trim($_POST['email']))));
    $mot_de_passe = sha1($_POST['mot_de_passe']);
    $verification_mot_de_passe = sha1($_POST['verification_mot_de_passe']);
    if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email)) // on vérifie si l'email à un format valide.
    {
        if($mot_de_passe == $verification_mot_de_passe) // on vérifie que les deux mots de passe soient identique.
        {

            //$req = $db->query("SELECT pseudo FROM login WHERE Pseudo = '$pseudo'"); // On séléectionne le champ (pseudo) dans notre table login où pseudo est égale au champ pseudo rentré par l'utilisateur
            $count = $req->rowCount(); // on rowCount() la requete, donc rowcount retournera une valeur si il trouve.
            if($count == 0) // si il ne trouve pas une valeur, alors c'est bon

            {   
                $req = $db->prepare("INSERT INTO login ( Pseudo, Email, Mdp) VALUES( ':pseudo', ':email', ':mot_de_passe' )");
                $req->execute(array(

                   ':pseudo' => $pseudo,
                    ':email' => $email,
                    ':mot_de_passe' => $mot_de_passe 
                ));

                header('Location: inscription_réussi.php');
            }
            else{
                $message = 'Cette adresse e-mail est déjà utilisé.';
            }
        }else{
            $message = 'Cet identifiant est déjà utilisé.';
        }
    }else{
        $message = 'Vos mots de passe ne sont pas identique.';
    }
}

?>

<?= $message; ?>
<form action="inscription_reussi .php" method="post">
<div class="form-group">
<label for="pseudo">
Votre identifiant
</label>
<input type="text" name="pseudo" id="pseudo" class="form-control">
</div>
<div class="form-group">
<label for="email">
Votre adresse e-mail
</label>
<input type="text" name="email" id="email" class="form-control">
</div>
<div class="form-group">
<label for="mot_de_passe">
Votre mot de passe
</label>
<input type="password" name="mot_de_passe" id="mot_de_passe" class="form-control">
</div>
<div class="form-group">
<label for="verification_mot_de_passe">
Confirmez votre mot de passe
</label>
<input type="password" name="verification_mot_de_passe" id="verification_mot_de_passe" class="form-control">
</div>
<input type="submit" value="s'inscrire" />
S'inscrire
</button>
</form>

</body>
</html>

<!--comentaire html-->

5 réponses


SLK
Réponse acceptée

Salut,

  • Ta base de données s'appelle vraiment "peuso_mdp" ? Ce n'est pas le nom de la table plutôt ?

  • Sinon, ta table s'appelle bien "login" c'est bon ? (en général on met les noms de table au pluriel, c'est pour ça que je demande).

  • Place un try/catch pour voir s'il y a un message (et si oui, donne-le nous) :

try { 
    $req = $db->prepare("INSERT INTO login ( Pseudo, Email, Mdp) VALUES( ':pseudo', ':email', ':mot_de_passe' )");
    $req->execute(array(
        ':pseudo' => $pseudo,
        ':email' => $email,
        ':mot_de_passe' => $mot_de_passe 
    ));
}
catch (PDOException $e) { 
    echo 'ERREUR :<br>' . $e->getMessage() . '<br>';
}
  • Ta requête SELECT est commentée dans le code que tu nous as donné.

  • Tu n'as pas vraiment répondu à la question de @Mikachu (est-ce qu'on voit "je suis dans le if" quand tu exécute le code ?)

  • les messages des 2 derniers else ne correspondent pas aux tests que tu fais.

  • Évite les accents dans les noms de fichiers : inscription_réussi.php, c'est une source d'ennuis quand (ou si) tu changera de serveur.

(reussiE, tant qu'a faire)

désolé de donner le code sous une forme aussi brute... mais je ne sais pas faire les capture qui vont bien sous sublime text si vous pouviez >me donner le tuyaux je serai pas contre aussi

Non surtout pas, on déteste les captures d'écran parce-qu'on ne peut pas réutiliser le code pour te répondre.
Ce forum utilise le markdown, c'est très facile, regarde ici :
http://rmarkdown.rstudio.com/authoring_basics.html

[EDIT]
Par rapport à la remarque de @Lartak :
Ah oui bien vu, du coup le execute aussi :

$req->execute(array(
    ':pseudo' => $pseudo,
    ':email' => $email,
    ':mot_de_passe' => $mot_de_passe 
));

à remplacer par :

$req->execute(array(
    "pseudo" => $pseudo,
    "email" => $email,
    "mot_de_passe" => $mot_de_passe 
));

Es-tu sûr de rentrer dans ta condition $count == 0 ?
Pour le savoir mets un var_dump("je suisdans le if") juste apres.
Exemple:

if($count == 0) // si il ne trouve pas une valeur, alors c'est bon
{
      var_dump("je suisdans le if");
      $req = $db->prepare("INSERT INTO login ( Pseudo, Email, Mdp) VALUES( ':pseudo', ':email', ':mot_de_passe' )");
      ...

PS:

Juste pour l'optimisation, et aussi gérer mieux les adresses mails (car il y a maintenant des emails avec plus de 4 lettres a la fin, style .paris ou .online etc...).
(cf: http://php.net/manual/fr/function.filter-var.php )

Remplace:

  if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email))

Par:

  if(filter_var($email, FILTER_VALIDATE_EMAIL))

Merci beaucoup:) de ta réponse Mikachu mais malgré les modif qu tu m'a dis de faire le probleme est toujours le meme ce que je saisis dans mes champs ne senregistre pas dans ma table dans la bdd:/

Bonjour.
Pourquoi est-ce que dans ta requête SQL, tu mets :pseudo, :email et :mot_de_passe entre guillemets alors qu'il n'en faut pas ?
Remplaces donc :

$req = $db->prepare("INSERT INTO login ( Pseudo, Email, Mdp) VALUES( ':pseudo', ':email', ':mot_de_passe' )");

Par :

$req = $db->prepare("INSERT INTO login (Pseudo, Email, Mdp) VALUES(:pseudo, :email, :mot_de_passe)");

Sinon, es-tu sur d'avoir des majuscules en début de nom des colonnes de la table ?
En général on ne met aucune majuscule dans les noms de colonnes des tables.

Merci a tous pour votre aide il se trouve qu'avec toutes vos soluce et une petites réedition le programme est fonctionnel un grand merci à tous:)