Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2011, 04h17   #1
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Par défaut Vérifier les champs d'un formulaire

Bonjour;

Est ce qu'il y a quelqu'un qui a une idée comment faire une classe de vérification des champs d'un formulaire, dans mon exemple, j'ai déterminé deux fonctions pour voir si un champs est vide et s'il contient un min et max de caractères:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
<?php
 
class verifFields{
 
	public final function isEmpty($field, $emMsg) // nom du champs a controler et le message d'erreur
		{
			if(empty($field))
			{
				echo $emMsg;	
			}
			else
			{
				echo 'name est bien';
			}
		}
 
	public final function tailleField($field, $mix=3, $max=10) 
		{
			$field = strlen($field;
			// code
			return $field;
		}
 
 
 
 
 
 
}
 
$verif = new verifFields();
$verif->isEmpty('name', 'mon Message');
 
?>
 
<form action="<?php $_SERVER['php_self']; ?>" method="POST">
<input type="text" name="name" />
<input type="submit" />
</form>
 
<?php
echo 'nom est:  '.$name.'<br>';
?>
merci pour votre aide
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 09h08   #2
Membre du Club
 
Homme
Autre
Inscription : juin 2011
Messages : 49
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Autre
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 49
Points : 61
Points : 61
Salut,

Je ne sais pas si c'est ce que tu souhaites faire, mais en utilisant les Expressions Régulières (RegEx) tu peux vérifier que tes champs respectent bien un certain format (adresse mail, numéro de téléphone, etc ...). Quand aux dates, les fonctions natives de PHP te permettent déjà de la faire facilement.
unnamed-anonymous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 09h12   #3
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Citation:
Envoyé par unnamed-anonymous Voir le message
Salut,

Je ne sais pas si c'est ce que tu souhaites faire, mais en utilisant les Expressions Régulières (RegEx) tu peux vérifier que tes champs respectent bien un certain format (adresse mail, numéro de téléphone, etc ...). Quand aux dates, les fonctions natives de PHP te permettent déjà de la faire facilement.
La fonction filter_input() est là pour ça...
Les Regex à toutes les sauces c'est le plus mauvais assaisonnement.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 10h18   #4
Membre du Club
 
Homme
Autre
Inscription : juin 2011
Messages : 49
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Autre
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 49
Points : 61
Points : 61
Citation:
Envoyé par transgohan Voir le message
La fonction filter_input() est là pour ça...
Les Regex à toutes les sauces c'est le plus mauvais assaisonnement.
Je n'avais jamais utilisé cette fonction, c'est toujours bon à savoir ;-)
Mais en l’occurrence comme je disais, tout dépend du type de vérifications à effectuer ... Je ne suis pas familier de cette fonction mais il semblerait qu'elle ne couvre pas toutes les fonctionnalités des RegEx ?
unnamed-anonymous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 11h32   #5
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Citation:
Envoyé par unnamed-anonymous Voir le message
Je n'avais jamais utilisé cette fonction, c'est toujours bon à savoir ;-)
Mais en l’occurrence comme je disais, tout dépend du type de vérifications à effectuer ... Je ne suis pas familier de cette fonction mais il semblerait qu'elle ne couvre pas toutes les fonctionnalités des RegEx ?
Elle couvre bien plus que ce que tu pourrais imaginer.
Et couplée avec d'autres vérifications si besoin est cela reste 10 000 fois plus rapide et optimisé qu'une regex.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 13h31   #6
Membre du Club
 
Homme
Autre
Inscription : juin 2011
Messages : 49
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Autre
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 49
Points : 61
Points : 61
Ca fait bien longtemps que je ne me suis plus penché sur du PHP, mais la prochaine fois j'essaierai d'y penser ...
unnamed-anonymous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 06h34   #7
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Je voudrais créer une classe afin de vérifier différents champs par différentes fonctions, par exemple:

+ Vérifier la longueur d'un texte,
+ Les regex d'un texte,
+ Email valide ou non,
+ L'insertion des textes,
+ Etc,..

Merci
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 14h10   #8
Invité régulier
 
Inscription : février 2008
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 11
Points : 8
Points : 8
Citation:
Envoyé par isitien Voir le message
Je voudrais créer une classe afin de vérifier différents champs par différentes fonctions, par exemple:

+ Vérifier la longueur d'un texte,
+ Les regex d'un texte,
+ Email valide ou non,
+ L'insertion des textes,
+ Etc,..

Merci
Salut,

Je me suis bricolé cette fonction que tu n'as qu'a ajouter dans ta class:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
class TaClass {
public $message;
 
	public function check_FormData($champs){
 
		// tous les champs du formulaire ne sont pas tous obligatoire
		// liste des champs obligatoirs. Il doivent correspondre au nom de ton formulaire
		$champs_obligatoirs = array('nom'=>'','prenom'=>'','adresse'=>'','cp'=>'','ville'=>'','email'=>'');
 
		foreach($champs as $key=>$value){
 
			if (array_key_exists($key, $champs_obligatoirs)) {
 
				if(empty($value)){
 
					$this->message= 'Le champ '. $key.' ne peut pas rester vide.';
					return false;
 
				}
 
			}
 
		}
		// Vérification de l'email
		if($champs['email'] != ''){
 
			//Appel de la function check_eamil()
			if($this->check_email($champs['email'])){
 
				} else {
 
					$this->message =  '<div class="error">Le format de votre email n\'est pas correct ('. $champs['email'] .')</div>';
					return false;
 
				}
 
		} else {
 
			$this->message =  '<div class="error">L\'email ne peut pas rester vide</div>';
			return false;
 
		} // fin de vérification de l'email
 
 
 
		// Si tout est OK, on appel la fonction pour incérer les données dans la table mysql  
		$this->insert_FormData($data);
 
	}
 
	public function check_email($email){
 
	  if(preg_match('`^\w([-_.]?\w)*@\w([-_.]?\w)*\.([a-z]{2,4})$`',$email)){
 
		  return true;
 
	  } else {
 
		  return false;
 
	  }
 
 
   }
 
   private function insert_FormData($champs){
 
	  //Le scripte qui insert dans ta mysql en classique ou PDO
   }
}
Après il te suffit d'appeler la fonction lorsque on envoi un formulaire
Code :
1
2
3
4
5
6
7
8
 
$test= new TaClass ();
 
	if(isset($_POST['form_example'])){
 
              $test->check_FormData($_POST);
 
       }
Ensuite libre à toi de vérifier chaque champ de ton formulaire avec $champs['nom_de_champ']
Sp4tz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 07h26   #9
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
merci Sp4tz: j'ai pris quelques lignes de votre code, le seul soucis est pour la fonction sendData(), je veux verifier si check_FormData() retourne un true/false afin d'inserer mes donnees dans une BDD ou bien les afficher, etape transitoire qui serait de securise mes donnees envoyes par POST:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
<?php
 
		public function check_FormData($champs=array()){
 
		$champs_obligatoirs = array('MyName');
 
 	if(is_array($champs)) {
		foreach($champs as $key=>$value){
 
 			if(array_key_exists($key, $_POST))
 			{ 				
 				foreach($value as $v1=>$v2)
 				{
 
 					switch($v1)
 					{
 						case 'empty':
						if($_POST[$key] == '')
						{
							echo $key.' est '.$v2.'<br />';
							return FALSE;
						}
 
						break;	
 
 						case 'min':
						if(strlen($_POST[$key]) < $v2)
						{
							echo ' le champs ' .$key.' doit contenir au moins: '.$v2.' chars<br />';
							return FALSE;
						}
 
						break;
 
						case 'max':
						if(strlen($_POST[$key]) > $v2)
						{
							echo ' le champs ' .$key.' ne doit pas contenir plusque: '.$v2.' chars<br />';
							return FALSE;
						}
 
						break;
 
					 } // EnD switch
 
 				}
 			}
 			else
 			{
 				echo $key.' ohooooooo<br>';
 
 			}
 
 
		}
		}
 
 
	} // end check fields
 
 
 	public function sendData() {
 
 
		if($this->check_FormData($champs)){
				echo 'ouiiiiiiiiiiiiiiiiiiii Greatz';
 
				} else {
					echo 'nooooooooooooon';
					}
				}
 
} // end class
 
// utilisation
	if(isset($_POST['send'])){ //form_example
 
              $f->check_FormData(array(
			  'MyName'=>array('empty'=>'le champs est vide', 'min'=>5, 'max'=>15)
 
			  ));
 
 
              echo $f->sendData();
       }
 
 
?>
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 10h46   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
Envoyé par isitien Voir le message
Je voudrais créer une classe afin de vérifier différents champs par différentes fonctions, par exemple:

+ Vérifier la longueur d'un texte,
+ Les regex d'un texte,
+ Email valide ou non,
+ L'insertion des textes,
+ Etc,..

Merci
Les filtres sont faits pour toi
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 10h53   #11
Invité régulier
 
Inscription : février 2008
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 11
Points : 8
Points : 8
Citation:
Envoyé par isitien Voir le message
merci Sp4tz: j'ai pris quelques lignes de votre code, le seul soucis est pour la fonction sendData(), je veux verifier si check_FormData() retourne un true/false afin d'inserer mes donnees dans une BDD ou bien les afficher, etape transitoire qui serait de securise mes donnees envoyes par POST:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?php
 
		public function check_FormData($champs=array()){
 
		[...]
 			}
 			else
 			{
 				echo $key.' ohooooooo<br>';
 
 			}
 
 [...]
 
 
?>
je mettrai un return true ici:

Code :
1
2
3
4
5
6
else
 			{
 				// echo $key.' ohooooooo<br>';
                                 return true;
 
 			}
ensuite

Code :
1
2
3
4
5
6
7
8
9
10
11
12
public function sendData() {
 
 
		if($this->check_FormData($champs)){
				echo 'ouiiiiiiiiiiiiiiiiiiii Greatz';
                                // retour du true et on pass a la fonction qui insert les données. attention a bien sécuriser les données avant (injections sql)
				} else {
					echo 'nooooooooooooon';
					}
				}
 
} // end class
Sp4tz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/07/2011, 04h53   #12
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
est ce que vous avez une proposition au niveau de protection contre les injection au sein de la meme class?
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 08h42   #13
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Utilise des requêtes préparées pour te prémunir contre les injections SQL.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2011, 09h32   #14
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Citation:
Envoyé par Benjamin Delespierre Voir le message
Utilise des requêtes préparées pour te prémunir contre les injections SQL.
est ce que vous pouvez me donner un exemple sur les requetes preparees et executees en PDO?
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 12h35   #15
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Code :
1
2
3
4
$query = "INSERT INTO table (a, b, c) VALUES (:a, :b, :c)";
$stmt = $pdo->prepare($query);
if ($stmt->execute(array(':a' => 1, ':b' => 2, ':c' => 3)))
 echo "Insert done."
C'est dans la doc.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/07/2011, 12h43   #16
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Citation:
Envoyé par Benjamin Delespierre Voir le message
Les filtres sont faits pour toi
oui, mais qu'à partir de PHP 5.2.0

__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 08h40   #17
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
j'ai fait un test de ma fonction dans une class, le teste retourne toujours 'this is false' alors le var_dump retourn bool(true) si TRUE et bool(false) si FALSE:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
<?php
class isFunction {
 
function isTrue($string)
{
    if($string == 'Test')
    {
        return TRUE;
    }
    else
    {
        return False;
    }
}
 
function checkData()
{
    if($this->isTrue($string))
    {
        echo 'this is true';
    }
    else
    {
        echo 'this is false';
    }
}
 
 
}
 
$row = new isFunction();
var_dump($row->isTrue('Test'));
$row->checkData();
 
?>
c'est quoi le probleme dans ma class

merci
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 10h12   #18
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 803
Points : 35 803
Code :
if($this->isTrue($string))
Je pense que ta méthode cherche encore le chapeau d'où $string doit sortir
Si tu utilises une variable dans une méthode, tu dois la définir au préalable (comme tu le fais d'ailleurs dans le test
Code :
var_dump($row->isTrue('Test'));
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 10h24   #19
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
pardon c'etait un exemple pour me situer, je les ai declare ici mais ca marche pas
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h19.


 
 
 
 
Partenaires

Hébergement Web