Page 1 sur 1

changer le mot de passe dans un formulaire

Posté : 12 avr. 2015, 10:57
par blinz
Salut,
J'ai un petit formulaire avec plusieurs champs et dedans 2 champs qui me pose problème, l'utilisateur peut changer son mot de passe si il le souhaite, ça marche mais le problème est que même si il ne poste pas de nouveau de mot de passe ça lui change quand même, où est l'erreur svp ? :/ ( je n'aimis que l'essentiel du code )
<?php              
                  $erreurs = array();

                  if(!empty($_POST)) {
					   
				  
		if($_POST['email'] != "" && !preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$_POST['email'])){
		$erreurs['email'] = "Veuillez verifier la saisie de votre e-mail";
		}
							
		if($_POST['password'] != $_POST['newpassword']){
		$erreurs['password'] = "les mots de passe ne sont pas identique";
		}
	   
                 if( empty( $erreurs)  ){
					   
		 $modif = $bdd->prepare("UPDATE user SET email =:email, password=:password WHERE id_user  =".$_SESSION['membre']['id_user ']);
				   
                  $modif->execute(array(
                  'email' => $_POST['email'],
		  'password' => sha1($_POST['password'])  
                  ));

	 $reponse = $bdd->query('SELECT * FROM simply_user WHERE id_user  = '.$_SESSION['membre']['id_user ']);
	 $donnees = $reponse->fetch(PDO::FETCH_ASSOC);
?>
				
     <label>Email</label>
     <div class="input-group input-group animated bounceInRight">
     <span class="input-group-addon"><i class="fa fa-envelope white"></i></span>
     <input class="form-control" type="text" name="email" value="<?php echo  !empty($donnees['email']) ? htmlentities($donnees['email']) : NULL;?>" /></div>

      <br> 

       
       <label for="email">Nouveau mot de passe</label>
       <div class="input-group input-group">
       <span class="input-group-addon"><i class="fa fa-lock white"></i></span>
       <input class="form-control" type="text" id="password" name="password" value="<?php htmlentities ($_POST['password']);?>" /></div>
       
       <br>
      
       <label for="email">Confirmer mot de passe</label>
       <div class="input-group input-group">
       <span class="input-group-addon"><i class="fa fa-lock white"></i></span>
       <input class="form-control" type="password" id="password"  name="newpassword" value="<?php htmlentities ($_POST['newpassword']);?>" /></div>
       <?php if(isset($erreurs['password'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['password'].'</div>';?>

Re: changer le mot de passe dans un formulaire

Posté : 12 avr. 2015, 15:21
par tof73
$erreurs = array();
if( empty( $erreurs) ){

c'est le nombre d'éléments du tableau qu'il faut tester.

Re: changer le mot de passe dans un formulaire

Posté : 12 avr. 2015, 18:04
par blinz
je vérifie avec dans mon code déjà :
<?php              
                  $erreurs = array();

                  if(!empty($_POST)) {
					   
				  
		if($_POST['email'] != "" && !preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$_POST['email'])){
		$erreurs['email'] = "Veuillez verifier la saisie de votre e-mail";
		}
							
		if($_POST['password'] != $_POST['newpassword']){
		$erreurs['password'] = "les mots de passe ne sont pas identique";
		}
	   
                 if( empty( $erreurs)  ){
Je ne vois tjr pas le problème du coup
Ce ne viens pas de mon principe pour vérifié les mot de passe ?
j'ai :
//Verification du doublon des mots de passe
					if($_POST['password'] != $_POST['newpassword']){
					$erreurs['password'] = "les mots de passe ne sont pas identique";
					}
:(

Re: changer le mot de passe dans un formulaire

Posté : 12 avr. 2015, 19:32
par Ryle
Hello !

En fait, c'est ta requête qui ne va pas, ou plus exactement qui ne convient pas à tous les cas.
Si l’utilisateur ne modifie pas son mot de passe, tu recevras néanmoins les valeurs des champs password et newpassword qui sont envoyées par ton formulaire. Si l'utilisateur n'a pas renseigné de nouveau mot de passe, alors $_POST['password'] et $_POST['newpassword'] sont bien identiques et contiennent une chaine vide.

Il te faut donc rajouter un test supplémentaire pour vérifier si $_POST['password'] est vide auquel cas il ne faut pas le mettre à jour, mais seulement actualiser l'adresse email de l'utilisateur dans ton update, sans toucher au mot de passe... :)

Re: changer le mot de passe dans un formulaire

Posté : 12 avr. 2015, 21:54
par blinz
c'est à dire quelque chose comme :
if(!empty( $_POST['password'])  ){
					
					if($_POST['password'] != $_POST['newpassword']){
					$erreurs['password'] = "les mots de passe ne sont pas identique";
					}
					
					}
Je laisse ma requete inchangé ?

Re: changer le mot de passe dans un formulaire

Posté : 12 avr. 2015, 22:33
par Ryle
Non ça n'est pas suffisant... là tu ne fais que conditionner le contrôle du mot de passe. Si l'utilisateur ne change pas son mot de passe, ce n'est pas une erreur de sa part, c'est à toi d'adapter ton traitement pour prendre cela en compte :)

Le problème se situe ici :
$modif = $bdd->prepare("UPDATE user SET email =:email, password=:password WHERE id_user  =".$_SESSION['membre']['id_user ']);
$modif->execute(array(
   'email' => $_POST['email'],
   'password' => sha1($_POST['password'])  
));
Avec ce code, tu vas systématiquement mettre à jour l'email ET le mot de passe. Si $_POST['password'] est vide, il ne faut pas faire d'update du champ password et donc prévoir le cas où tu dois mettre à jour email ET mot de passe et le cas où tu ne dois mettre QUE l'email :)

Re: changer le mot de passe dans un formulaire

Posté : 12 avr. 2015, 23:26
par blinz
je dois pas être loin, nan ?
<?php              
                   $erreurs = array();

                   if(!empty($_POST)) {
					   
						
						if($_POST['email'] != "" && !preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$_POST['email'])){
						$erreurs['email'] = "Veuillez verifier la saisie de votre e-mail";
						}
					
					
						
						if($_POST['password'] != $_POST['newpassword']){
						$erreurs['password'] = "les mots de passe ne sont pas identique";
						}
					
					   if( empty( $erreurs)  ){
						   
					  		
					   $modif = $bdd->prepare("UPDATE simply_user SET email =:email, interet=:interet, id_region=:id_region, id_departements=:id_departements WHERE id_simply_user =".$_SESSION['membre']['id_simply_user']);
					   
					 
					  $modif->execute(array(
					  'email' => $_POST['email'],
					  'interet' => serialize($_POST['interet']),
					  'id_region'=>regionIdByDepartement($_POST['departements']),
					  'id_departements'=>$_POST['departements']
					  ));
					  
					  
					  
						  if(!empty($_POST['password'])) {
						 	
						  $modif_pass = $bdd->prepare("UPDATE simply_user SET  password=:password WHERE id_simply_user =".$_SESSION['membre']['id_simply_user']);
						   
						
						  $modif_pass->execute(array(
						  'password' => sha1($_POST['password']),
						  ));
				  
				  
				  
					            
					 echo '<div class="container"><div class="col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2">
					<div class="alert alert-success okay" role="alert"> <i class="fa fa-smile-o"></i>
					Vos modifications ont bien était prise en compte</div></div></div>';
	
					}else{
					echo '<div class="container"><div class="col-md-6 col-md-offset-2 col-sm-8 col-sm-offset-2"><br>
						<div class="alert alert-danger okay" role="alert">Renseignez les champs  vides</div></div></div>';
					}
						
					}
				
				   }

				         
               ?>

Re: [RESOLU] changer le mot de passe dans un formulaire

Posté : 13 avr. 2015, 12:36
par Ryle
C'est effectivement une solution :)

Le mot de passe de l'utilisateur ne sera ainsi mit à jour que lorsque celui-ci sera renseigné :)