Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP/Créer un espace membres

1 décembre 2020 à 2:03:15

Bonjour,

Depuis quelques jours j'essaie de créer un espace membre en suivant le cours "TP: Créer un espace membres" de Mathieu Nebra. J'ai réussi d'inscrire un seul membre qui apparaît bien dans la bdd, mais lorsque je veux inscrire une deuxième personne je reste bloqué sur le message: "Le pseudo est déjà utilisé !" alors que le pseudo est différent. Je ne vois pas l'erreur. Quelqu'un peut m'aider? Merci

voici le code:

inscription1.php :

<!DOCTYPE html>
<html>
	<head>
		<title>INSCRIPTION</title>
		<meta charset="rtf-8" />
		<link href="style.css" rel="stylesheet" />
	</head>
	<body>
		<div align="center">
		<h1>Bienvenue dans mon Site !</h1>
		<h2>Inscription</h2>
		<form method="post" action="inscription1_post.php">
			<table>
				<tr>
					<td><label for="text">Votre Pseudo :</label> </td>
					<td><input type="text" id ="pseudo" name="pseudo" /></td>
				</tr>
				<tr>
					<td><label for="password">Votre Mot de passe :</label> </td>
					<td><input type="password" id ="pass" name="pass" /></td>
				</tr>
				<tr>
					<td><label for="password">Reconfirmer votre mot de passe :</label> </td>
					<td><input type="password" id ="verif_pass" name="verif_pass" /></td>
				</tr>
				<tr>
					<td><label for="email">Votre Mail :</label> </td>
					<td><input type="email" id ="mail" name="mail" /></td>
				</tr>
				<tr>
					<td></td>
					<td><input type="submit" value="Je m'inscris" /></td>
				</tr>

			</table>
		</form>
		</div>
	</body>
</html>

inscription1_post.php :

<?php

//on ouvre la Base de Données

try 

{

$bdd = new PDO ('mysql:host=localhost;dbname=test;charset=utf8', 'root' ,'', array(PDO::ATTR_ERRMODE =>PDO::ERRMODE_EXCEPTION));

}//si on ne la troue pas on envoie un message d'erreur et on arrete le script

catch(Exception $e)

{

die('Erreur:'. $e->getMessage());

}

// on recherche une variable qui nous dira si pseudo est libre

$libre = true;

// si tous les variables existent...

if(isset($_POST['pseudo']) AND isset($_POST['pass']) AND isset($_POST['mail']))

{

//on recherche dans la BDD tous les pseudos de la table membres..

$req = $bdd ->query('SELECT pseudo FROM membres');

// on stock les donnees dans une variable dont que la variable n'est pas lu en entier

while($donnees = $req-> fetch())

{

//si le pseudo recupere est different des membre dans la bdd

if ($_POST['pseudo'] = !$donnees)

{

//alors on entre le nouveau pseudo dans la bdd

$libre=true;

//si le password est le meme que le confirme..

if($_POST['pass'] == $_POST['verif_pass'])

{

//...et que l'adresse mail est valide..

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

{

//alors on code le mot de pass, on le securise..

$pass_hache = password_hash($_POST['pass'], PASSWORD_DEFAULT);

//je libere le cursor..

$req->closeCursor();

//..et on cree un nouveau membre, dont la date de la creation se situe maintenant

$req = $bdd->prepare('INSERT INTO membres(pseudo, pass, mail, date_inscription)VALUES(:pseudo, :pass, :mail, NOW())');

//dont le pseudo et le email sont ceux qui ont ete envoyé et le mot de passe hache

$req->execute (array('pseudo'=>$_POST['pseudo'], 'pass'=>$pass_hache, 'mail'=>$_POST['mail']));

//avant de nous rediriger vers la page de connexion

header ("location: connexion1.php");

}

else

{

echo 'Erreur: L\'adresse mail n\'est pas valide !';

}

}

else

{

echo 'Erreur :les mots de passes ne sont pas identiques !';

}

}

else

{

//sinon le pseudo n'est pas libre

$libre=false;

//..et on affiche 'pseudo deja utilise'

echo 'le pseudo est déjà utilisé !';

//puis on arrete de comparer les donnees

break;

}

}

}

else

{

echo 'un des champs n\'est pas rempli !';

}

// j'arrete le curseur de recherche

$req->closeCursor();

?>

connexion1.php :
<!DOCTYPE html>
<html>
<head>
<title>CONNEXION</title>
<meta charset="utf-8" />
<link href="style.css" rel="stylesheet" />
</head>
<body>
<diV align="center">
<h1>CONNEXION</h1>
<br/>
<form method="post" action="connexion1_post.php">
<table>
<tr>
<td><label for="text">Votre Pseudo :</label></td>
<td><input type="text" id="pseudo" name="pseudo" value="<?php if(isset($_COOKIE['pseudo'])){echo $_COOKIE['pseudo'];}?>" /></td>
</tr>
<tr>
<td><label for="password">Votre mot de pass :</label></td>
<td><input type="password" id="pass" name="pass" value="<?php if(isset($_COOKIE['pass_hache'])){echo $_COOKIE['pass_hache'];}?>" /></td>
</tr>
<tr>
<td><label for="auto_connect">connexion automatique</label></td>
<td><input type="checkbox" name="auto_connect" id="auto_connect" checked="checked" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="envoyer" /></td>
</tr>
</table>
</form>
</diV>
</body>
</html>
connexion1_post.php :
<?php
try
{
	$bdd= new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE=> PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
	die('Erreur :'. $e->getMessage());
}
//si les variables pseudo et pass existe..
if (isset($_POST['pseudo']) AND isset($_POST['pass']))
{	//on recherche dans la bdd le id pseudo pass, dont le pseudo...
	$req=$bdd->prepare('SELECT id, pseudo, pass FROM membres WHERE pseudo= :pseudo');
	//...correspond à celui envoyé par la variable $_POST['pseudo']
	$req->execute (array('pseudo'=>$pseudo));
	//on stocke le resultat dans une variable
	$resultat=$req->fetch();
	//on verifie si le mdp correspond à celui dans trouve dans la bdd
	$SiPasswordCorrect=password_verify($_POST['pass'], $resultat['pass']);
	//si on ne trouve pas des resultat dans la recherche..
	if(!$resultat)
	{
		echo 'Mauvais identifiant ou mot de passe !';
	}

	else
	{
		if($isPasswordCorrect) 
		{
			session_start();

			//si le bouton 'auto-connect' a été coché pendant la connexion..
       		if(isset($_POST['auto_connect']))
       		{
       			setcookie('pseudo', $_SESSION['pseudo'], time()+ 30*24*3600,null,null,false,true);
       			setcookie('pass_hache', $_SESSION['pass_hache'], time()+ 30*24*3600,null,null,false,true);
       			 include("test_cookie1.php");
       		}
       		else
			{
				$_SESSION['pseudo'] = $pseudo;
				$_SESSION['id'] = 	$_resultat['id'];

			}

			echo 'Vous êtes connecté !';

			header("location:blog1.php");

			
		}
		// sinon mdp ne correspond pas
		else
		{
			echo 'Mauvais Identifiant ou mot de passe !';
		}
	}
}
?>
test_cookie1.php :
<?php
// si il existe des cookies de connexion auto ..
if(isset($_COOKIE['pseudo']) AND isset($_COOKIE['pass_hache']))
{
    // on ouvre la base de donnée..
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root','',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    // ou, si on ne la trouve pas, on affiche un message d'erreur et on arrete le script.
    catch(Exception $e)
    {
        die('Erreur' .$e->getMessage());
    }
    // on enregistre l'id des membres dont le pseudo et le mot de passe..
    $req = $bdd->prepare('SELECT id FROM membres WHERE pseudo = :pseudo AND pass = :pass');
   
    // ..est le même que celui récupéré dans les cookies
   
    $req->execute(array('pseudo' => $_COOKIE['pseudo'], 'pass' => $_COOKIE['pass_hache']));
    
    //on stock dans une variable le resultat de la recherche (TRUE ou FALSE)
    $reponse = $req->fetch();
    // si on trouve un resultat qui correspond ..
    if($reponse == TRUE)
    {
        // ..on creer un pseudo et un mot de passe à la session grace au info des cookies recupérés.
        $_SESSION['pseudo'] = $_COOKIE['pseudo'];
        $_SESSION['pass_hache'] = $_COOKIE['pass_hache'];
    }
    $req->closeCursor();
}
// sinon on ne fait rien
?>
blog1.php :
<?php
session_start();
include('connexion1_post.php');
?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>LE BLOG</title>
		<link href="style.css" rel="stylesheet" />
	</head>
	<body>
		<h1>Bonjour <?php $_SESSION['pseudo']; ?></h1>
		<p><a href="deconnexion1.php">Déconnexion</a></p>
	</body>
</html>
deconnexion1.php :
<?php
session_start();

//suppresion des variables de la session

$_SESSION = array();
session_destroy();

//Suppression des cookies..
setcookie('pseudo', '');
setcookie('pass_hache', '');
?>
  • Partager sur Facebook
  • Partager sur Twitter
1 décembre 2020 à 2:18:24

Bonjour,

Doublon

Les doublons nuisent au bon fonctionnement du forum et sont donc interdits. Si vous vous êtes trompé de section, il suffit de signaler votre sujet au staff pour qu'il le déplace au bon endroit.

Je vous invite à continuer la discussion sur l'autre sujet : https://openclassrooms.com/forum/sujet/tp-creer-un-espace-membres-7

Je ferme ce sujet. 

  • Partager sur Facebook
  • Partager sur Twitter