condition avant validation

cris84100
Invité n'ayant pas de compte PHPfrance

03 janv. 2014, 15:58

Bonjour à tous,

j'ai un formulaire de changement de mot de passe sur lequel je voudrais rajouter la condition de vérification de remplissage de tous les champs.
Si un champ manque, j'affiche une erreur idem pour tout les champs, le formulaire ne sera pas envoyé.
Je vous joins mon code :
Un grand merci pour votre aide...
<?php

if(!empty($_POST['ancien_mot_passe']) && !empty($_POST['nouveau1_mot_passe']) && !empty($_POST['nouveau2_mot_passe']))//chagement de mot de passe
	{
	
		//sécurisation des variables
		$ancien_mot_passe = mysql_real_escape_string(htmlspecialchars($_POST['ancien_mot_passe']));
		$nouveau1_mot_passe = mysql_real_escape_string(htmlspecialchars($_POST['nouveau1_mot_passe']));
		$nouveau2_mot_passe = mysql_real_escape_string(htmlspecialchars($_POST['nouveau2_mot_passe']));
		
		//vérification de l'exactitude de l'ancien mot de passe
		$sql_infos = mysql_query('SELECT mot_passe FROM '.$prefix.'membres WHERE id='.$_SESSION[$prefix.'id']);
        	$donnees = mysql_fetch_array($sql_infos);
		$ancien_mot_passe_hash = md5($ancien_mot_passe);
		
		if ($ancien_mot_passe_hash == $donnees['mot_passe']) //vérification par mesure de sécurité
		{
			if ($nouveau1_mot_passe == $nouveau2_mot_passe) //si les deux mots de passe sont bons, alors on change de mot de passe
			{
				$mot_passe = md5($nouveau1_mot_passe);
				mysql_query('UPDATE '.$prefix."membres SET mot_passe='".$mot_passe."' WHERE id='".$_SESSION[$prefix.'id']."'")or die(mysql_error());
				echo stop($lang['mot_pass_change'],'modifier_profil.php');
				
				mail("".$_POST['email']."","Changement de mot de passe","Cher(e) ".$_POST['pseudo'].",\n\nVous venez de changer votre mot de passe.\n\nVotre nouveau mote de passe de connexion est le suivante :\n\nMot de passe : ".$_POST['nouveau1_mot_passe']."\n\nConnectez vous maintenant sur http://www..\n\n","From: Espace membre <[email protected]>\r\n");
			}
			else
			{
				echo stop($lang['nouveau_mot_passe_different'], 'modifier_profil.php?action=modifier_mot_passe');
			}
		}
		else
		{
			//on indique qu'il y a eu une tentative de changement de mot de passe qui n'a pas marchée, et on décrémente le compteur
			if (isset($_SESSION[$prefix.'mot_passe_erreur']))
			{
				$_SESSION[$prefix.'mot_passe_erreur'] = $_SESSION[$prefix.'mot_passe_erreur'] - 1 ;
			}
			else
			{
				$_SESSION[$prefix.'mot_passe_erreur'] = 3 ;
			}
			
			//on informe le membre du nombre de tentatives restantes où l'on le déconnecte
			if ($_SESSION[$prefix.'mot_passe_erreur'] > 0)
			{
				echo stop($lang['erreur'].' : '.$lang['bad_password'].'<br />'.$lang['il_ne_vous_reste_que'].' '.$_SESSION[$prefix.'mot_passe_erreur'].' '.$lang['tentatives_avant_d_etre_deconnecte'].'.', 'modifier_profil.php?action=modifier_mot_passe');
			}
			else
			{
				echo stop($lang['erreur'].' : '.$lang['bad_password'].'<br />'.$lang['desole_mais_vous_avez_ete_deconnecte'], 'index.php');
				
				//On détruit la session
				session_destroy();
				//Destruction des cookies.
				if (isset($_COOKIE[$prefix.'pseudo'],$_COOKIE[$prefix.'mot_passe']))
				{
					setcookie($prefix.'pseudo','',0);
					setcookie($prefix.'mot_passe','',0);
				}
			}
		}
	}
?>

Mammouth du PHP | 2278 Messages

03 janv. 2014, 17:33

Il est plus simple de modifier le formulaire:
<input type ="text" required ="required" name = "login" />
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

cris84100
Invité n'ayant pas de compte PHPfrance

03 janv. 2014, 17:40

bonjour,

effectivement, je connaissais pas !

je vais utiliser ça c'est plutôt pas mal, merci

si toutefois quelqu'un a une idée en php, je prends

Mammouth du PHP | 2278 Messages

03 janv. 2014, 17:54

De même tu as un type = "email" qui évite bien des soucis.
Pour le reste il faut se fier à filter_var dans le code PHP
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 453 Messages

03 janv. 2014, 21:49

houlà attention !

l'attribut required fonctionne à partir de IE9 de mémoire. Tandis que l'attribut email, faut attendre IE10. ;)
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Mammouth du PHP | 2278 Messages

03 janv. 2014, 22:10

Une fois de plus Internet Explorer est à la traine.
Mais ce n'est le navigateur qye d'yne partie des internautes utilisant Winquelque chose et pas le premier voir:
http://gs.statcounter.com/#browser-ww-m ... 201312-bar
ou
http://www.w3counter.com/globalstats.php
1) Le fait que ça ne fonctionne pas signifie simplement que ce champ peut rester vide lors de l'envoi du formulaire. Or j'ai dit que ça simplifiait les tests pas que ça les supprimait.
2) Idem pour le type email pour lequel je signale aussi l'existence d filter_var
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

cris84100
Invité n'ayant pas de compte PHPfrance

05 janv. 2014, 17:05

Bonjour et merci de vos réponses.

Merci également de classer en résolut le sujet..