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-->
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:)