Page 1 sur 1

Petit "foutage de tête" de la part de l'ordinateur ou erreur de ma part ?

Posté : 27 mai 2017, 10:49
par lucieemtl
Bonjour à toutes et à tous,

Je viens vers vous aujourd'hui car j'ai clairement l'impression qu'il y'a quelque chose de pas logique dans mon ordi !

Je fais le script suivant pour changer mon mot de passe :

Le formulaire :
<form method="post" id="modifMdpEM" action="functions/mdp.php">
	<p><i class="fa fa-info-circle"></i> Pour modifier votre mot de passe, vous aurez besoin de renseigner celui actuel, d'en choisir un nouveau, et de retaper le nouveau mot de passe choisi.</p>
	<div class="col-xs-12 col-sm-6">
		<input type="password" class="form-control underlined pwdInputEM" name="pwd0" placeholder="Mot de passe actuel"/>
	</div>
	<div class="col-xs-12 col-sm-6">
		<input type="password" class="form-control underlined pwdInputEM" name="pwd1" placeholder="Nouveau mot de passe"/>
	</div>
	<div class="col-xs-12 col-sm-6">
		<input type="password" class="form-control underlined pwdInputEM" name="pwd2" placeholder="Veuillez saisir le nouveau mot de passe"/>
	</div>
	<button class="modifMDPEMBtn btn btn-primary">Modifier</button>
</form>
<div id="result3"></div>

Le PHP de traitement :

<?php
session_start();
$lien = mysqli_connect('localhost','root','root','ls_bdd');
mysqli_query($lien,"SET NAMES UTF8");
if(isset($_POST['pwd0']) && isset($_POST['pwd1']) && isset($_POST['pwd2'])){	
	if((md5($_POST['pwd0']) != $_SESSION['pwd']) || ($_POST['pwd0'] == "")){
		echo	"<div class=\"card card-warning animated rubberBand\">
					<div class=\"card-header\">
						<div class=\"header-block\">
							<p class=\"title\"><i class=\"fa fa-times-circle\"></i>Mot de passe incorrect ou trop court !</p>
						</div>
					</div>
				</div>";
	}
	else{
		if(preg_match('#^(?=.*[a-z]).{6,}$#', $_POST['pwd1'])) {
			if(($_POST['pwd1'] == $_POST['pwd2']) && ($_POST['pwd1'] !== $_POST['pwd0']) && ($_POST['pwd2'] !== $_POST['pwd0'])){
				$nouveau = md5($_POST['pwd1']);
				$req = "UPDATE ls_membres SET pwd = '".$nouveau."' WHERE name='".$_SESSION['nom']."' AND firstName='".$_SESSION['prenom']."';";
				$res = mysqli_query($lien, $req);
				if (!$res) {
					echo "Erreur dans la requête";
				}
				else {
					echo 	"<div class=\"card card-success\">
								<div class=\"card-header\">
									<div class=\"header-block\">
										<p class=\"good title\"><i class=\"fa fa-check-circle\"></i>Nouveau mot de passe enregistré avec succès !</p>
									</div>
								</div>
							</div>";
					$_SESSION['pwd'] = $nouveau;
				}
			}
			else{
				echo	"<div class=\"card card-warning animated rubberBand\">
							<div class=\"card-header\">
								<div class=\"header-block\">
									<p class=\"title\"><i class=\"fa fa-times-circle\"></i>Les deux mots de passe ne correspondent pas.</p>
								</div>
							</div>
						</div>";
			}
		}
		else{
			echo	"<div class=\"card card-warning animated rubberBand\">
						<div class=\"card-header\">
							<div class=\"header-block\">
								<p class=\"title\"><i class=\"fa fa-times-circle\"></i>Mot de passe trop court. <br/>Veuillez choisir un mot de passe à au moins 6 caractères.</p>
							</div>
						</div>
					</div>";
		}
	}
}
?>

Et l'ajax qui traite le résultat :

<script>
$('#modifMdpEM').submit(function(event){
	var formUrl = $(this).attr("action");
	$.ajax(
	{
		url : formUrl,
		type: "POST",
		data: $(this).serialize(),
		success:function(data, textStatus, jqXHR) 
		{
			$('#result3').html(data);
			if($('#result3 .card .card-header .header-block p').hasClass('good')){
				window.setTimeout( function(){
					location.reload()
				}, 2500 );
			}
		}
	});
	event.preventDefault();
});
</script>
Et j'ai ce résultat :
Mot de passe incorrect ou trop court ! - soit le message d'erreur relatif quand on a pas rentré le bon mot de passe actuel au départ..
J'ai déjà testé ce script pour la partie admin ça marche alors pourquoi pas là ? ... J'ai même tester si pwd1 et pwd2 n'étaient pas égales à pwd0...
Bref pourquoi cet abruti me donne ce message d'erreur alors que la partie AJAX recharge bien la page du fait de trouver la class good, et que le mot de passe est bien enregistré ?
Je comprends mais alors carrément rien là...

De l'aide s'il vous plaît ? :(

Re: Petit "foutage de tête" de la part de l'ordinateur ou erreur de ma part ?

Posté : 27 mai 2017, 16:37
par kevin254kl
Bonjour,

Ici tu dois forcément vérifier ta condition

Code : Tout sélectionner

if((md5($_POST['pwd0']) != $_SESSION['pwd']) || ($_POST['pwd0'] == "")){
Es-tu sur de la valeur de

Code : Tout sélectionner

$_SESSION['pwd'])
Essaye de vérifier les valeurs en testant :

Code : Tout sélectionner

<?php print_r($_POST); print_r($_SESSION); ?>
Mauvaise idée de stoker un mot de passe en session.

Re: Petit "foutage de tête" de la part de l'ordinateur ou erreur de ma part ?

Posté : 28 mai 2017, 00:32
par Robervale
Oui car ton erreur doit sans doute venir de là

Re: Petit "foutage de tête" de la part de l'ordinateur ou erreur de ma part ?

Posté : 29 mai 2017, 18:05
par lucieemtl
J'ai tout essayé, rien n'y faisait, mon ordinateur n'avait pas envie ! (c'est à croire je vous jure !)
Du coup je ne l'ai pas stocké dans une session et j'ai mis un message pour le client comme quoi le nouveau mot de passe sera demandé à la prochaine connexion.

Re: Petit "foutage de tête" de la part de l'ordinateur ou erreur de ma part ?

Posté : 29 mai 2017, 20:11
par kevin254kl
Sinon tu peux faire une simple requête sql pour récupérer le mot de passe et ensuite le comparer.