validé ton formulaire

Eléphant du PHP | 199 Messages

05 mars 2010, 21:23

Bonjour tout le monde.
Le code que je vous montre en procédural permet de valider un formulaire.
Il faut un peu l'adapter, mais ca marche.

J'espère que ca aidera certains comme PHPFRANCE m'a aidé.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Freedom: liberté égalité fraternité</title>
	 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   </head>
   <body>
		<p>Inscription pour le site </p>
		<form id='inscription' method='POST' action='inscription.php'/>
			<p>Nom  <input type="text" name="nom"/></p>
			<p>Prenom <input type="text" name="prenom"/></p>
			<p>Mail <input type="text" name="mail"/></p>
			<p>confirmation mail<input type="text" name="mail2"/></p>
			<p>Age <input type="text" name="age"/></p>
			<p>Travail <input type="text" name="travail"/></p>
			<p>pseudo <input type="text" name="pseudo"/></p>
			<p>mot de passe <input type="password" name="mdp"/></p>
			<p>confirmation mot de passe <input type="password" name="mdp2"/></p>
			<p><input type="submit" name="envoyer"/><input type="reset" name="annuler"/></p>
		</form>
   
   </body>
</html>   

<?php 

//fonction pour vérifier que les password sont les mêmes
	function pass_meme($mdp,$mdp2)
		{
			if($mdp==$mdp2)
				{
					return true;
				}
			else
				{
					return false;
				}
		}
//fonction pour vérifier que les mails sont les mêmes
	function mail_meme($mail,$mail2)
		{
			if($mail==$mail2)
				{
					return true;
				}
			else
				{
					return false;
				}
		}
		
//fonction pour vérifier que tous est rempli
	function present($nom,$prenom,$mail,$mail2,$age,$travail,$pseudo,$mdp,$mdp2)
		{
			if (!empty($nom) && !empty($prenom) && !empty($mail) && !empty($mail2) && !empty($age) && !empty($travail) && !empty($pseudo) && !empty($mdp) && !empty($mdp2))
				{
					return true;
				}
			else
				{
					return false;
				}
		}
		
//fonction de check de type 

	//fonction check string 
	function check_string($nom,$prenom,$travail,$pseudo,$mdp)
		{
			if(is_string($nom) && is_string($prenom) && is_string($travail) && is_string($pseudo) && is_string($mdp))
				{
					return true;
				}
			else
				{
					return false;
				}
		
		}
		
	//fonction check age
	function check_age($age)
		{
			if(is_numeric($age))
				{
					return true;
				}
			else
				{
					return false;
				}
		}
		
	//fonction check mail
	function check_mail($mail)
		{
			//on sépare le mail en deux parties par rapport à @
			$partie=explode("@",$mail);
								
			//taille tableaux
			$taille=count($partie);
						
			
			//doit avoir deux parties
			if($taille==2)
				{
					//on refait une séparation 
					$entete=explode(".",$partie[1]);
										
					//maintenant on vérifie ce qui se trouve après le . 
					if ($entete[1]=="fr" or $entete[1]=="com")
						{
							return true;
						}
					else
						{
							return false;
						}
				}
			else
				{
					return false;
				}
			
		
		}
		
		
	//complexité mdp
	function mdpcomplex($mdp)
		{
			//taille du mot de passe
			//le mot de passe doit être supérieur à 4
			if (strlen($mdp)>5)
				{
					return true;
				}
			else
				{
					return false;
				}
		
		}
		

	function liste_noire($nom,$prenom,$travail,$pseudo,$mdp)
		{
			//on interdit des chaines de caractères 
			$interdits=array('sexe','hilter','adolf','nazi','pornographie');
			
			//variable de vérif
			$check=true;
			
			//on vérifie que les choses rentrées ne sont pas un mot interdit
			for($i=0;$i<count($interdits);$i++)
				{
					if($nom==$interdits[$i] || $prenom==$interdits[$i] || $travail==$interdits[$i] || $pseudo==$interdits[$i] || $mdp==$interdits[$i])
						{
							$check=false;
							break;
						}				
				}
			
			return $check;
				
		}
		
	function liste_blanche($age)
		{
		//l'âge ne peut être compris qu'entre 0 et 100
			$age=0;
			
			$check=false;

			for($i=0;$i<101;$i++)
				{
					if($age==$i)
						{
							$check=true;
						}
				}
			
			return true;
		}
		
	
	function check_formulaire($nom,$prenom,$mail,$mail2,$age,$travail,$pseudo,$mdp,$mdp2)
		{
			if (present($nom,$prenom,$mail,$mail2,$age,$travail,$pseudo,$mdp,$mdp2)==true)
				{
					if(pass_meme($mdp,$mdp2)==true)
						{
							if(mail_meme($mail,$mail2))
								{
									if(check_string($nom,$prenom,$travail,$pseudo,$mdp)==true)
										{
											if(check_age($age)==true)
												{
												 
													if(check_mail($mail)==true)
														{
															if(mdpcomplex($mdp)==true)
																{
																	if(liste_noire($nom,$prenom,$travail,$pseudo,$mdp)==true)
																		{
																			if(liste_blanche($age))
																				{
																					echo "<h3 style='color:blue'> Formulaire validé</h3>";
																				}
																			else
																				{
																				   echo "<h3 style='color:red'> L'age doit etre compris entre 0 et 100 niais!</h3>";
																				}
																		}
																	else
																		{
																			echo "<h3 style='color:red'> Les propos pornographiques et racistes sont interdits espèce de sot!</h3>";
																		}
																}
															else
																{
																	echo "<h3 style='color:red'> Le mot de passe doit contenir 6 lettres neuneuh!!!!</h3>";
																}
														}
													else
														{
															echo "<h3 style='color:red'> Le mail doit être sous la forme *****@gmail.com banane!!!!</h3>";
														}
												}
											else
												{
													echo "<h3 style='color:red'> Age doit être un nombre simplet!!!!</h3>";
												}
										}
									else
										{
											echo "<h3 style='color:red'> Mettre des chaines de caractères aux noms, prenoms, travail pseudo et mot de passe andouille!!!!</h3>";	
										}
								}
							else
								{
									echo "<h3 style='color:red'> Mettre les mêmes adresses mails imbécile!!!!</h3>";	
								}
						}
					else
						{
							echo "<h3 style='color:red'> Mettre un même mot de passe idiot!!!!</h3>";
						}
				}
			else
				{
					echo "<h3 style='color:red'> Remplir toutes les cases abruti!!!!</h3>";
				}
				
		}
		
	//maintenant on essaye toutes les fonctions 
	
	//extrait des données
	
	
	extract($_POST); 
	
	if(!empty($nom))
		{
			check_formulaire($nom,$prenom,$mail,$mail2,$age,$travail,$pseudo,$mdp,$mdp2);
		}

		
	


?>
Modifié en dernier par Superpilou le 06 mars 2010, 13:26, modifié 1 fois.

Mammouth du PHP | 985 Messages

05 mars 2010, 22:08

Salut Superpilou,
As tu vue les avertissements dans la doc php.net sur la fonction extract() ?
http://fr.php.net/manual/fr/function.extract.php
Notamment sur les données inconnues et/ou utilisateurs...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 mars 2010, 22:14

Bonjour,

Merci pour cette contribution.
Deux remarques :
- C'est un peu fouillis cet embriquement de if else
- Dans ton contrôle de l'e-mail tu n'acceptes que les e-mails en .com et .fr, ça fait un peu court quand même.

Je te recommande de regarder du côté des fonctions filter de PHP : http://fr.php.net/filter ou du côté des expressions régulières http://fr.php.net/preg_match
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 985 Messages

05 mars 2010, 22:22

Sinon dans le cas de l'utilisation de extract().
Peut-être que l'utilisation de la fonction array_map(), avant l'extract serait intéressante...
J'insiste sur le peut-être :wink:

Sinon merci pour la contribution

Et désolé pour les remarques, je suis bien placé pour savoir que c'est chiant parfois...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 199 Messages

06 mars 2010, 20:25

Au contraire j'adore les remarques car mon code n'est pas parfait.
Je l'ai fait pour un cours à donner à des gens pour leur montrer l'importance de sécuriser les données entrantes.

Pour extract, j'ai regardé mais je ne vois pas le soucis. Un soucis de sécurité?

Pour répondre à Arthur:
-j'ai fait un système de if/else pour valider petit à petit. Si la première chose est validé on passe à la deuxième....
-pour le mail, c'est à valeur d'exemple. Je pourrais tout mettre dans un tableau et faire une boucle pour vérifier.

Oui j'ai vu les filter, ca peut être utile, mais comme j'avais codé par moi même pour tester j'ai pensé je pouvais m'en passer.

Bonne soirée.

Mammouth du PHP | 985 Messages

07 mars 2010, 03:44

Pour extract, j'ai regardé mais je ne vois pas le soucis. Un soucis de sécurité?
Notamment la possibilité d'écraser une variable déjà existante.
Il faut donc utiliser le paramètre EXTR_SKIP.
(En prévision de modifications possibles du script, de sa personnalisation, montrer le bon exemple...)

Sinon pour ta vérification mail, utilise au minimum la fonction end() avec ton explode().
Sinon la moindre adresse email qui possède deux points sera refusée. C'est juste 3 lettres de plus :wink:
http://php.net/manual/en/function.end.php
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.