Problème base de donnée
- Accueil
- Forum
- Programmation
- PHP
- Problème base de donnée
Omega Le 18 mai 2016 à 16:28 (Édité le 25 janvier 2019 à 17:51)
<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', 'monmotdepasse');
if(isset($_POST['forminscription'])) {
$pseudo = htmlspecialchars($_POST['pseudo']);
$mail = htmlspecialchars($_POST['mail']);
$mail2 = htmlspecialchars($_POST['mail2']);
$mdp = sha1($_POST['mdp']);
$mdp2 = sha1($_POST['mdp2']);
if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
$pseudolength = strlen($pseudo);
if($pseudolength <= 255) {
if($mail == $mail2) {
if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
$reqmail = $bdd->prepare("SELECT * FROM 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éé ! <a href=\"connexion.php\">Me connecter</a>";
} else {
$erreur = "Vos mots de passes ne correspondent pas !";
}
} else {
$erreur = "Adresse mail déjà utilisée !";
}
} else {
$erreur = "Votre adresse mail n'est pas valide !";
}
} else {
$erreur = "Vos adresses mail ne correspondent pas !";
}
} else {
$erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
}
} else {
$erreur = "Tous les champs doivent être complétés !";
}
}
?>
<html>
<head>
<title>espace membre</title>
<meta charset="utf-8">
</head>
<body>
<div align="center">
<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(isset($pseudo)) { echo $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(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 align="center">
<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>
Omega Le 18 mai 2016 à 18:55 (Édité le 18 mai 2016 à 18:56)
BeKidding Le 18 mai 2016 à 19:36 (Édité le 1 janvier 1970 à 01:00)
TheOldNoob Le 18 mai 2016 à 19:43 (Édité le 1 janvier 1970 à 01:00)
Tu est sur d'avoir mis un mot de passe sur ta base de données? Parce qu'en général en local il n'y a qu'un champ vide pour le mot de passe...
Balatharas Le 18 mai 2016 à 20:14 (Édité le 1 janvier 1970 à 01:00)
@Omega si ce n'est pas ça alors enlève le monmotdepasse et ne met rien.
Balatharas Le 18 mai 2016 à 20:22 (Édité le 1 janvier 1970 à 01:00)
J'ai testé ton code et apparemment c'est une erreur a la ligne 2. J'ai changer donc la connexion a la base de données: j'ai remplacer ta ligne par la mienne ce qui donne:
<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre;charset=utf8', 'root', '');
?>
Personnellement je n'ai pas trop compris l'erreur mais ce doit sans doute être les apostrophes après root: peut-être as-tu laissé "monmotdepasse". En tout cas, ce code marche parfaitement.
En espérant t'avoir aidé 😉
Longue vie à @PrimFX.
Omega Le 18 mai 2016 à 20:59 (Édité le 1 janvier 1970 à 01:00)
Omega Le 19 mai 2016 à 17:52 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 19 mai 2016 à 18:55 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 19 mai 2016 à 19:07 (Édité le 1 janvier 1970 à 01:00)
Ton code:
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
Le code qu'il faudrait mettre:
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, avatar) VALUES(?, ?, ?, ?)");
Omega Le 19 mai 2016 à 19:27 (Édité le 1 janvier 1970 à 01:00)
TheOldNoob Le 19 mai 2016 à 20:46 (Édité le 19 mai 2016 à 20:47)
Ton code, me chatouille les yeux depuis hier.
Du coup, se soir, je prend le temps d'adapté ce que j'ai fait en cours aujourd'hui a ton code.
J'éspère que ça te conviendra. Je t'invite quand même a vérifié mon code.
J'ai surtout refait un truc plus claire, avec un meilleur sécurité des mots de passe qui vont être hashé.
Le formulaire est bootstrapé, donc coté CSS, tu créer ton fichier style et tu adapte pour ton site. Sinon, tu a déjà un truc assez propre.
<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', 'monmotdepasse');
$post = array(); // Contiendra les données du formulaire nettoyées
$errors = array(); // contiendra nos éventuelles erreurs
$showErrors = false;
$success = false;
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', 'monmotdepasse');
if (!empty($_POST)) {
foreach ($_POST as $key => $value) { // Nettoyage des données
$post[$key] = trim(strip_tags($value)); // récupération du _POST dans un tableau
}
if(strlen($post['nickname']) < 2 || strlen($post['nickname']) > 50){ // on défini les propriétés de 'firstname'
$errors[] = '<div class="alert alert-danger" role="alert">Votre nom doit comporter entre 2 et 50 caractères</div>';
}
if(empty($post['email']) || !filter_var($post['email'], FILTER_VALIDATE_EMAIL)) {
$errors[] = '<div class="alert alert-danger" role="alert">Votre email n\'est pas valide</div>';
}
if(isset($post['password']) && !empty($post['password']) && strlen($post['email']) < 6) {
$errors[] = '<div class="alert alert-danger" role="alert">Votre mot de passe n\'est pas valide</div>';
}
else {
$reqEmail = $pdo->prepare('SELECT email FROM membres WHERE email = :email'); // Vérification au cas ou l'email est déjà dans la pdo
$reqEmail->bindValue(':email', $post['email']);
$reqEmail->execute();
if($reqEmail->rowCount() != 0){ // Si l'email n'est pas dans la pdo alors, on peu crée l'utilisateur
$errors[] = '<div class="alert alert-danger" role="alert">L\'email existe déjà !</div>';
}
}
if(count($errors) > 0){ // On compte les erreurs, si il y en as (supérieur a 0), on passera la variable $showErrors à true.
$showErrors = true; // valeur booleen // permettra d'afficher nos erreurs s'il y en a
$nickname = $post['nickname'];
$password = $post['password'];
$email = $post['email'];
}
else {
// On sécurise notre password en le hashant
// IMPORTANT : On ne stocke jamais de mot de passe en clair en pdo
$password = password_hash($post['password'], PASSWORD_DEFAULT);
// Insertion dans la pdo
$res = $pdo->prepare('INSERT INTO membres (nickname, email, password) VALUES(:nickname, :email, 😋assword)');
$res->bindValue(':nickname', $post['nickname'], PDO::PARAM_STR);
$res->bindValue(':email', $post['email'], PDO::PARAM_STR);
$res->bindValue(':password', $password);
if($res->execute()){
$success = true; // Pour afficher le message de réussite si tout est bon
}
else {
die(var_dump($res->errorInfo()));
}
}
}
if($success){ // On affiche la réussite si tout fonctionne
echo '<div class="alert alert-success" role="alert"> L\'utilisateur est bien créer ! </div>';
}
if($showErrors){
echo implode('<br>', $errors);
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Authentification</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Custom CSS -->
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<main class="container">
<h1 class="text-center">Formulaire d'inscription</h1>
<br>
<div class="container">
<div class="panel panel-default">
<div class="alert alert-info" role="alert"> Merci de remplire tout les champs correctement</div>
<form method="post" class="pure-form pure-form-aligned">
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Pseudo</span>
<input type="text" class="form-control" name="nickname" placeholder="Votre prénom" aria-describedby="basic-addon1">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Password</span>
<input type="password" class="form-control" name="password" placeholder="Votre mot de passe" aria-describedby="basic-addon1">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">@</span>
<input type="text" class="form-control" name="email" placeholder="Votre email" aria-describedby="basic-addon1">
</div><br>
<input type="submit" class="btn btn-primary" value="S'inscrire">
</form>
</div>
</div>
</main>
</body>
</html>
Omega Le 19 mai 2016 à 23:13 (Édité le 1 janvier 1970 à 01:00)
De plus si tu observes bien le mot de passe était hashé dans le code que j'ai mis au début du topic (lignes 8 et 9). Mis à part ces quelques détails je te remercie pour les informations que m'ont apporté ton code et espère que tu pourras m'aider à éclaircir les derniers points qui me chiffonnent.
TheOldNoob Le 20 mai 2016 à 07:58 (Édité le 1 janvier 1970 à 01:00)
ok, lol sur la ligne 57 ^^
y'a un smiley ici
:nickname, :email, assword)
:nickname, :email, 😋assword)
tu ajoute juste : et p sans espace devant assword Omega Le 20 mai 2016 à 17:15 (Édité le 1 janvier 1970 à 01:00)
Bon, une des deux erreurs et corrigée et merci seulement en voici une autre que je ne comprends pas concernant la variable nickname.
TheOldNoob Le 20 mai 2016 à 19:03 (Édité le 1 janvier 1970 à 01:00)
Le voilà corriger 😀
<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', 'monmotdepasse');
$post = array(); // Contiendra les données du formulaire nettoyées
$errors = array(); // contiendra nos éventuelles erreurs
$showErrors = false;
$success = false;
if (!empty($_POST)) {
foreach ($_POST as $key => $value) { // Nettoyage des données
$post[$key] = trim(strip_tags($value)); // récupération du _POST dans un tableau
}
if(strlen($post['nickname']) < 2 || strlen($post['nickname']) > 50){ // on défini les propriétés de 'nickname'
$errors[] = '<div class="alert alert-danger" role="alert">Votre nom doit comporter entre 2 et 50 caractères</div>';
}
if(empty($post['email']) || !filter_var($post['email'], FILTER_VALIDATE_EMAIL)) {
$errors[] = '<div class="alert alert-danger" role="alert">Votre email n\'est pas valide</div>';
}
if(isset($post['password']) && !empty($post['password']) && strlen($post['email']) < 6) {
$errors[] = '<div class="alert alert-danger" role="alert">Votre mot de passe n\'est pas valide</div>';
}
else {
$reqEmail = $bdd->prepare('SELECT email FROM users WHERE email = :email'); // Vérification au cas ou l'email est déjà dans la pdo
$reqEmail->bindValue(':email', $post['email']);
$reqEmail->execute();
if($reqEmail->rowCount() != 0){ // Si l'email n'est pas dans la pdo alors, on peu crée l'utilisateur
$errors[] = '<div class="alert alert-danger" role="alert">L\'email existe déjà !</div>';
}
}
if(count($errors) > 0){ // On compte les erreurs, si il y en as (supérieur a 0), on passera la variable $showErrors à true.
$showErrors = true; // valeur booleen // permettra d'afficher nos erreurs s'il y en a
$nickname = $post['nickname'];
$password = $post['password'];
$email = $post['email'];
}
else {
// On sécurise notre password en le hashant
// IMPORTANT : On ne stocke jamais de mot de passe en clair en pdo
$password = password_hash($post['password'], PASSWORD_DEFAULT);
// Insertion dans la pdo
$res = $bdd->prepare('INSERT INTO users (nickname, email, password) VALUES(:nickname, :email, 😋assword)');
$res->bindValue(':nickname', $post['nickname'], PDO::PARAM_STR);
$res->bindValue(':email', $post['email'], PDO::PARAM_STR);
$res->bindValue(':password', $password);
if($res->execute()){
$success = true; // Pour afficher le message de réussite si tout est bon
}
else {
die(var_dump($res->errorInfo()));
}
}
}
if($success){ // On affiche la réussite si tout fonctionne
echo '<div class="alert alert-success" role="alert"> L\'utilisateur est bien créer ! </div>';
}
if($showErrors){
echo implode('<br>', $errors);
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Authentification</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Custom CSS -->
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<main class="container">
<h1 class="text-center">Formulaire d'inscription</h1>
<br>
<div class="container">
<div class="panel panel-default">
<div class="alert alert-info" role="alert"> Merci de remplire tout les champs correctement</div>
<form method="post" class="pure-form pure-form-aligned">
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Pseudo</span>
<input type="text" class="form-control" name="nickname" placeholder="Votre prénom" aria-describedby="basic-addon1">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">Password</span>
<input type="password" class="form-control" name="password" aria-describedby="basic-addon1">
</div><br>
<div class="form-group input-group">
<span class="input-group-addon" id="basic-addon1">@</span>
<input type="text" class="form-control" name="email" placeholder="Votre email" aria-describedby="basic-addon1">
</div><br>
<input type="submit" class="btn btn-primary" value="S'inscrire">
</form>
</div>
</div>
</main>
</body>
</html>
Omega Le 21 mai 2016 à 16:02 (Édité le 1 janvier 1970 à 01:00)
TheOldNoob Le 21 mai 2016 à 17:48 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 21 mai 2016 à 18:17 (Édité le 1 janvier 1970 à 01:00)
Omega Le 21 mai 2016 à 21:15 (Édité le 1 janvier 1970 à 01:00)
Omega Le 21 mai 2016 à 21:57 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 22 mai 2016 à 15:32 (Édité le 22 mai 2016 à 15:33)
Omega Le 22 mai 2016 à 17:47 (Édité le 1 janvier 1970 à 01:00)
joris1904 Le 22 mai 2016 à 21:25 (Édité le 1 janvier 1970 à 01:00)
<?php
session_start();
require_once('php/config.php'); /* Mes fonctions */
if(isset($_POST['forminscription'])) {
$pseudo = htmlspecialchars($_POST['pseudo']);
$mail = htmlspecialchars($_POST['mail']);
$mail2 = htmlspecialchars($_POST['mail2']);
$mdp = sha1($_POST['mdp']);
$mdp2 = sha1($_POST['mdp2']);
if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
$pseudolength = strlen($pseudo);
if($pseudolength <= 255) {
if($mail == $mail2) {
if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
$reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
$reqmail->execute(array($mail));
$mailexist = $reqmail->rowCount();
if($mailexist == 0) {
if($mdp == $mdp2) {
$longueurKey = 15;
$key = "";
for($i=1;$i<$longueurKey;$i++) {
$key .= mt_rand(0,9);
}
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, confirme, avatar) VALUES(?, ?, ?, ?, ?, ?)");
$insertmbr->execute(array($pseudo, $mail, $mdp, $key,'0',"default.png"));
$header="MIME-Version: 1.0\r\n";
$header.='From:"Jorisvideo.fr"<support@jorisvideo.fr>'."\n";
$header.='Content-Type:text/html; charset="uft-8"'."\n";
$header.='Content-Transfer-Encoding: 8bit';
$message='
<html>
<body>
<div align="center">
<b>'.$pseudo.'</b>, Veuillez<a href="http://v2.jorisvideo.fr/confirmation.php?pseudo='.urlencode($pseudo).'&key='.$key.'">confirmez votre compte !</a>
</div>
</body>
</html>
';
mail($mail, "Confirmation de compte", $message, $header);
$erreur = "Votre compte a bien été créé ! Un email de confirmation de compte a été envoyé <br /><a href=\"connexion.php\">Me connecter</a>";
} else {
$erreur = "Vos mots de passes ne correspondent pas !";
}
} else {
$erreur = "Adresse mail déjà utilisée !";
}
} else {
$erreur = "Votre adresse mail n'est pas valide !";
}
} else {
$erreur = "Vos adresses mail ne correspondent pas !";
}
} else {
$erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
}
} else {
$erreur = "Tous les champs doivent être complétés !";
}
}
?>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div align="center">
<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(isset($pseudo)) { echo $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(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 align="center">
<br />
<input type="submit" name="forminscription" value="Je m'inscris" />
</td>
</tr>
</table>
</form>
<?php
if(isset($erreur))
{
echo '<font color="red">'.$erreur."</font>";
}
?>
sa devrait marche logiquement pour moi sa marche 😀