Formulaire enregistrement mot de passe

Fermé
kmorel - 2 août 2018 à 13:33
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 3 août 2018 à 10:01
Bonjour les amis. je suis entrain de créer un site internet et dans un premier temps les membres doivent s'enregistrer et recevoir un lien dans leur mail qui doit ensuite les rediriger vers une page sur laquelle ils doivent créer un mot de passe. et la j'ai un petit problème avec l'écriture du code. voila un peu ce que j'ai farfouillé.

code du formulaire:

<form method="post" action="traitement-creation_pass">
			
				<legend>Se connecter</legend>	
			
			<p><label for="mail">Votre adresse mail</label>:<br/><input type="email" name="mail"id="mail" autofocus  required/>
			<p><label for="pass1">Choississez votre mot de passe</label>:<input type="password" name="pass1" id="pass1" required/>
			<p><label for="pass2">Confirmez votre mot de passe</label>:<input type="password" name="pass2" id="pass2" required/>
			<p><input type="submit" value="valider" class="envoi"/> </p><br/>


code de la page de traitement:

<?php error_reporting(E_ALL); ini_set('display_errors', TRUE);ini_set('display_startup_errors', TRUE);?>
		<?php try{
$bdd =new PDO('mysql:host=localhost;
 dbname=reveil; charset=utf8', 'root', '');
// Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());}?>
	
	<?php
	// Hachage du mot de passe
	$mail= !empty($_POST['mail']) ? $_POST['mail'] : NULL;

			$pass_hache = sha1($_POST['pass1']);
			// Vérification des identifiants
			$sql ='SELECT id, Nom FROM info_membres WHERE Mail = :Mail';
			$datas=array(
			':Mail' => $mail);
			$resultat = $sql->fetch();
			if (!$resultat){echo '<p>Mauvais mail!</p>
			<form method="post" action="verification">
			
				<legend>Se connecter</legend>	
			
			<p><label for="mail">Votre adresse mail</label>:<input type="email" name="mail"id="mail" required/>
			<p><label for="pass">Votre mot de passe</label>:<input type="password" name="pass" id="pass" required/>
			<p><input type="submit" value="valider" class="envoi"/> </p><br/>
			<P><a href="inscription">Inscription</a></p>
			
			</form>';}
			else{session_start();
			$_SESSION['id'] = $resultat['id'];
			$_SESSION['nom'] = $resultat['Nom'];
			
			$sql= 'INSERT INTO info_membres (mot_de_passe) Values(:mot_de_passe) WHERE id='$_SESSION[id]'' ;
			$datas=array(
			':mot_de_passe'=>$pass_hache;
			
			echo '<p>Vous êtes connecté</p>'
			?>
			
			<?php try{
  $req = $bdd->prepare($sql);
  $req->execute($datas);
  
  }catch(Exception $e){
    echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();} ?>
			


Merci d'avance pour votre aide!

2 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 2 août 2018 à 13:54
bonjour, quel est le petit problème?
à ta place, moi je ferais un UPDATE plutôt qu'un INSERT pour modifier un enregistrement dans une table.
par ailleurs, il est préférable d'utiliser password_hash pour hacher le mot de passe, et password_verify pour vérifier un mot de passe.
0
voici mon nouveau code:

?php error_reporting(E_ALL);ini_set('display_errors', TRUE);ini_set('display_startup_errors', TRUE);
 // Hachage du mot de passe
 $mail= !empty($_POST['mail']) ? $_POST['mail'] : NULL;
 $password= !empty($_POST['pass1']) ? $_POST['pass1'] : NULL; 
 $hash = password_hash($password,PASSWORD_BCRYPT) ;
   
   // Vérification des identifiants
   $[/sql/sqlintro.php3 sql] ='SELECT id, Nom FROM info_membres WHERE Mail = :Mail';
   $datas=array(
   ':Mail' => $mail);
   $resultat = $sql->fetch() ;
   try{
  $req = $bdd->prepare($sql);
  $req->execute($datas);}catch(Exception $e)
  {echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();}
  
   if (!$resultat){echo '<p>Mauvais mail!</p>
   <form method="post" action="verification">
   
    <legend>Se connecter</legend> 
   
   <p><label for="mail">Votre adresse mail</label>:<input type="email" name="mail"id="mail" required/>
   <p><label for="pass">Votre mot de passe</label>:<input type="password" name="pass" id="pass" required/>
   <p><input type="submit" value="valider" class="envoi"/> </p><br/>
   <P><a href="inscription">Inscription</a></p>
   
   </form>';}
   else
   $_SESSION['id'] = $resultat['id'];
   $_SESSION['nom'] = $resultat['Nom'];
   
   $sql= 'UPDATE INTO info_membres (mot_de_passe) Values(:mot_de_passe) WHERE id ='.$_SESSION['id'].'' ;
   $datas=array(':mot_de_passe'=>$hash);
   
   echo '<p>Vous êtes connecté</p>';
   try{
  $req = $bdd->prepare($sql);
  $req->execute($datas);}catch(Exception $e)
  {echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();} ?>


et comme erreur ça me dit:
Fatal error: Call to a member function fetch() on string in C:\wamp64\www\Test\traitement-creation_pass.php on line 11
Call Stack


que dois-je faire svp?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > kmorel
Modifié le 2 août 2018 à 19:29
exemples d'utilisation de fetch:
https://www.php.net/manual/fr/pdostatement.fetch.php

tu n'y es pas encore, mais voici un exemple de SQL UPDATE:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;


par ailleurs, si je comprends ce que tu fais, chacun peut changer n'importe quel mot de passe. je pense que tu dois envoyer un secret avec l'email, et vérifier ce secret au retour du formulaire.
tu pourrais, au moment d'envoyer le mail, créer un texte au hasard, le joindre au mail et l'enregistrer dans la base de données, avec le moment de l'envoi du mail. quand le formulaire revient, vérifier que le secret est récent et correct, et accepter le nouveau mot de passe. si le secret renvoyé par formulaire est incorrect, effacer la date pour forcer à demander un nouveau secret.
0
si j'utilise mal le fetch comment faire alors pour récupérer les données issues de la sélection de l'id et du nom?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > kmorel
2 août 2018 à 21:14
eh bien, analyser les exemples, et corriger ta façon de faire.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
3 août 2018 à 10:01
Bonjour,

parfois une image est mieux qu'un long discours...


0