Inscription non effectué dans ma base de donnée
- Accueil
- Forum
- Programmation
- PHP
- Inscription non effectué dans ma base de donnée
0000 Le 30 décembre 2016 à 16:54 (Édité le 25 janvier 2019 à 17:53)
Merci de m'aider
php my admin
<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
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, uniqid, avatar)VALUES(?, ?, ?, ?, ?, ?)");
$insertmbr->execute(array($pseudo, $mail, $mdp, $key, uniqid(), "default.jpeg"));
$header="MIME-Version: 1.0\r\n";
$header.='From:"SOS-Motors.com"<confirmation@sos-motors.com>'."\n";
$header.='Content-Type:text/html; charset="uft-8"'."\n";
$header.='Content-Transfer-Encoding: 8bit';
$message='
<html>
<body>
<div align="center">
<a href="http://localhost/Site%20web/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éé ! <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>TUTO PHP</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>
TheOldNoob Le 30 décembre 2016 à 21:50 (Édité le 1 janvier 1970 à 01:00)
ça donne pas envie d'aider.
0000 Le 31 décembre 2016 à 13:29 (Édité le 1 janvier 1970 à 01:00)
Donc Bonjours et merci de m'aider
TheOldNoob Le 31 décembre 2016 à 17:36 (Édité le 1 janvier 1970 à 01:00)
0000 Le 1 janvier 2017 à 13:33 (Édité le 1 janvier 2017 à 13:39)
Oui, je n'ais aucune erreur de signaler. Il y a marqué comme quoi l'opération a été exécutée avec succée.
Zbuu Le 1 janvier 2017 à 15:29 (Édité le 1 janvier 1970 à 01:00)
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
par :
try {
$bdd = new PDO('mysql:host=localhost;dbname=espace_membre', 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
die('Erreur :' . $e->getMessage());
}
Ça te permettra de voir si tu as des erreurs au niveau de tes requêtes TheOldNoob Le 1 janvier 2017 à 17:09 (Édité le 1 janvier 1970 à 01:00)
0000 Le 1 janvier 2017 à 22:46 (Édité le 1 janvier 2017 à 22:48)
cela correspond à cette ligne
$insertmbr->execute(array($pseudo, $mail, $mdp, $key, uniqid(), "default.jpeg"));
TheOldNoob Le 2 janvier 2017 à 00:04 (Édité le 1 janvier 1970 à 01:00)
Zbuu Le 2 janvier 2017 à 00:09 (Édité le 2 janvier 2017 à 02:52)
0000 Le 2 janvier 2017 à 14:13 (Édité le 1 janvier 1970 à 01:00)
Zbuu Le 3 janvier 2017 à 00:39 (Édité le 1 janvier 1970 à 01:00)
Donc va dans ta table membres et vérifie bien que la colonne uniqid existe bel est bien.
C'est assez clair maintenant ? XD
0000 Le 3 janvier 2017 à 19:19 (Édité le 1 janvier 1970 à 01:00)
Zbuu Le 3 janvier 2017 à 21:08 (Édité le 3 janvier 2017 à 21:16)
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, avatar) VALUES(?, ?, ?, ?, ?)");
$insertmbr->execute(array($pseudo, $mail, $mdp, $key, "default.jpeg"));
Ah mais tu es en local ? Si oui alors tu n'a peut être pas configuré l'envoie de mail ?
Essaye de supprimé ou commenté cette ligne (le temps de testé, voir si c'est a cause de ça) :
//mail($mail, "Confirmation de compte", $message, $header);
Essaie de t'inscrire et regarde dans ta base de donnée si ça fonctionne
Oh est quelques chose quelques qui n'a rien avoir avec ton problème c'est n'est pas un peu grand un pseudo de 255 caractères ? lol
0000 Le 4 janvier 2017 à 14:29 (Édité le 4 janvier 2017 à 14:38)
Oui je suis en local avec wamps-serveur. j'ai déjà configuré les mails et cela marche très bien sur ma page de contacte.
J'ai essayer de m'inscrire mais rien n'a faire.
Pour les 255 caractères c'est vrai que c'est un peut beaucoup je rectifierai. mdr
on me signale cette erreur
La ligne 33:
$insertmbr->execute(array($pseudo, $mail, $mdp, $key, "default.jpeg"));
Zbuu Le 4 janvier 2017 à 18:47 (Édité le 1 janvier 1970 à 01:00)
Donc soit tu modifies ta requête est insère quelques chose dans le champs confirme ou alors tu modifies ton champs et tu lui met une valeur par défaut via phpmyadmin
Balatharas Le 5 janvier 2017 à 08:05 (Édité le 1 janvier 1970 à 01:00)
0000 Le 5 janvier 2017 à 20:13 (Édité le 1 janvier 1970 à 01:00)
Zbuu Le 5 janvier 2017 à 23:16 (Édité le 1 janvier 1970 à 01:00)
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse, confirmkey, avatar, confirme) VALUES(?, ?, ?, ?, ?, '0')");
Ou mettre la valeur '0' par défaut directement dans la base de donnée comme ça tu ne sera pas obligé de le précisé dans ta requête
Ensuite pour mettre le champ confirme a '1' comme tu envoies un email à l'utilisateur il te suffit de faire une vérification dans ta page confirmation par exemple :
<?php
// Si $_GET['pseudo'] et $_GET['key'] ne sont pas vide
if (!empty($_GET['pseudo']) && !empty($_GET['key'])) {
// Recherche du pseudo dans la base de donnée
$q = $db->prepare('SELECT * FROM users WHERE pseudo = ?');
$q->execute([$_GET['pseudo']]);
$user = $q->fetch();
// Si l'utilisateur existe et que $_GET['key'] est égale la key de l'utilisateur
if ($user && $user['key'] === $_GET['key']) {
// Confirmation de l'utilisateur
$q = $db->prepare('UPDATE users SET confirme = 1 WHERE pseudo = ?');
$q->execute([$_GET['pseudo']]);
// Redirection vers la page profil
header('Location: profil.php');
exit();
} else {
// L'utilisateur ou la key ne correspont pas on redirige vers l'index
header('Location: index.php');
exit();
}
} else {
// Le pseudo ou la key n'est pas renseigné
// On redirige l'utilisateur vers l'index
header('Location: index.php');
exit();
}
0000 Le 6 janvier 2017 à 20:08 (Édité le 1 janvier 1970 à 01:00)
Zbuu Le 6 janvier 2017 à 20:49 (Édité le 1 janvier 1970 à 01:00)
Le plus souvent sur les sites ils affichent les news/articles
0000 Le 6 janvier 2017 à 21:20 (Édité le 6 janvier 2017 à 21:41)
Si j'ai bien compris il faut que lors de la connexion il vérifie si le champ confirme de ma base est a 1 (si oui alors on le renvoie sur l'index sinon un message d’erreur lui indique de confirmer son compte).
Zbuu Le 7 janvier 2017 à 09:21 (Édité le 1 janvier 1970 à 01:00)
0000 Le 7 janvier 2017 à 11:58 (Édité le 7 janvier 2017 à 11:59)
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_POST['formconnexion'])) {
$mailconnect = htmlspecialchars($_POST['mailconnect']);
$mdpconnect = sha1($_POST['mdpconnect']);
if(!empty($mailconnect) AND !empty($mdpconnect)) {
$requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ? AND motdepasse = ?");
$requser->execute(array($mailconnect, $mdpconnect));
$userexist = $requser->rowCount();
if($userexist == 1) {
$userinfo = $requser->fetch();
$_SESSION['id'] = $userinfo['id'];
$_SESSION['pseudo'] = $userinfo['pseudo'];
$_SESSION['mail'] = $userinfo['mail'];
header("Location: profil.php?id=".$_SESSION['id']);
} else {
$erreur = "Mauvais mail ou mot de passe !";
}
} else {
$erreur = "Tous les champs doivent être complétés !";
}
}
?>
<html>
<head>
<title>Connection</title>
<meta charset="utf-8">
</head>
<body>
<div align="center">
<h2>Connexion</h2>
<br /><br />
<form method="POST" action="">
<input type="email" name="mailconnect" placeholder="Mail" />
<input type="password" name="mdpconnect" placeholder="Mot de passe" />
<br /><br />
<input type="submit" name="formconnexion" value="Se connecter !" />
<p>Vous n'avez pas encore de compte ? <a href="inscription.php"> inscrivez vous</a> </p>
</form>
<?php
if(isset($erreur)) {
echo '<font color="red">'.$erreur."</font>";
}
?>
</div>
</body>
</html>
Zbuu Le 7 janvier 2017 à 12:31 (Édité le 1 janvier 1970 à 01:00)
$requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ? AND motdepasse = ? AND confirme = 1");
Du coup si l'utilisateur essaie de se connecter sans avoir confirmer son compte il tombera sur le message "Mauvais mail ou mot de passe" après a toi de modifier ton code si tu veux que l'utilisateur est plutôt un message du type "Vous n'avez pas encore confirmer votre compte" au lieu du "mauvais mail ou mot de passe"