Bonsoir tout le monde!
Je rame un peu avec mon formulaire moitié représentation procédurale moitié POO!
Je n'arrive pas à utiliser une variable qui se trouve hors de la classe filter, appeler la variable $pseudo_free et $email_free pour savoir se que contiennent celles ci et donc savoir si l' email ou le pseudo est déja utiliser, je ne sais pas trop comment mi prendre!
mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Formulaire</title> <meta http-equiv="Content-Language" content="fr" /> <meta name="description" content="inscription BLablabla" /> </head> <?php /*$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', ''); $reponse = $bdd->prepare('SELECT COUNT(*) AS nbr FROM membres WHERE login =:pseudo'); $reponse->bindValue(':pseudo',$_POST['Identifiant'] , PDO::PARAM_STR); $reponse->execute(); $pseudo_free =($reponse->fetchColumn()==0)?1:0;*/ /*$rep = $bdd->prepare('SELECT COUNT(*) AS nbr FROM membres WHERE email =:mail'); $rep->bindValue(':mail',$email , PDO::PARAM_STR); $rep->execute(); $rep->CloseCursor(); $email_free=($reponse->fetchColumn()==0)?1:0;*/ class FilterTest { public static function _call($a,$b){ $erreur = false; switch ($b){ case "STRING_IDENT": $string = self::check_space($a); /*if(!$pseudo_free){ $string = false; $erreur = 'Votre pseudo est déjà utilisé.'; } else*/if(strlen($string)<3 ){ $string = false; $erreur = 'Votre identifiant doit contenir plus de 3 caractères'; } elseif(strlen($string)>20 ){ $string = false; $erreur = 'Votre identifiant doit contenir moins de 20 caractères'; } elseif(preg_match('#^[a-z0-9àáâãäçèééêëìíîïñðòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝ ._\'-]{3,20}$#i', $string)){ $string=$string; } else{ $string = false; $erreur='Cet identifiant ne correspond pas aux exigences de l\'administrateur.'; } break; case "STRING_PASSWORD": $string=trim($a); $_POST['PasswordConfirm']=trim($_POST['PasswordConfirm']); if($string!=$_POST['PasswordConfirm']){ $string = false; $erreur = 'Les deux mots de passe que vous avez insérés ne correspondent pas.'; } elseif(strlen($string)<3){ $string = false; $erreur = 'Votre mot de passe doit contenir plus de 3 caractères'; } else{ $string= sha1('Gr@1n2s3l1' . md5($string) . 'gRaIn2$eL2'); } break; case "STRING_EMAIL": $string = self::check_space($a); $_POST['EmailConfirm']= self::check_space($_POST['EmailConfirm']); /*if(!$email_free){ $string = false; $erreur = 'L\'adresse email que vous avez insérée est déjà utilisée.'; }*/ if($string!=$_POST['EmailConfirm']){ $string = false; $erreur = 'Les deux adresses email que vous avez entrées ne correspondent pas.'; } elseif(strlen($string)>320){ $string = false; $erreur = 'Votre adresse email comporte trop de caractères.'; } elseif(preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#i', $string)){ $string=$string; } else{ $string = false; $erreur='Vous avez inséré une adresse email non valide.'; } break; } return array('value'=>$string,'erreur'=>$erreur); } public static function check_space($string){ $temp=trim($string); $string=""; for ( $i = 1 ; $i < strlen($temp) +1 ; $i ++ ){ if ( $temp[$i-1]==" " && $temp[$i]==" "){ } else{ $string.= $temp[$i-1] ; } } return $string; } } $options = array( 'Identifiant' => array( 'filter' => FILTER_CALLBACK, 'options' =>create_function('$a','return FilterTest::_call($a,"STRING_IDENT");') ), 'Password' => array( 'filter' => FILTER_CALLBACK, 'options' => create_function('$a','return FilterTest::_call($a,"STRING_PASSWORD");') ), 'Email' => array( 'filter' => FILTER_CALLBACK, 'options' => create_function('$a','return FilterTest::_call($a,"STRING_EMAIL");') ) ); $resultat = filter_input_array(INPUT_POST, $options); if($resultat != null)//Si le formulaire a bien été posté. { //Enregistrer des messages d'erreur perso. $messageErreur = array( 'Identifiant' => $resultat['Identifiant']['erreur'], 'Email' => $resultat['Email']['erreur'], 'Password' => $resultat['Password']['erreur'] ); $nbrErreurs = 0; ?> <ul> <?php foreach($options as $cle => $valeur) //Parcourir tous les champs voulus. { if(empty($_POST[$cle])) //Si le champ est vide. { echo '<li> Veuillez compléter le champ requis « ' . $cle . ' ».</li><br/>'; $nbrErreurs++; } else if($resultat[$cle]['value'] == false) //S'il n'est pas valide. { echo '<li>' .$messageErreur[$cle] . '</li><br/>'; $nbrErreurs++; } } ?> </ul> <?php if($nbrErreurs > 0){ echo '<p>Les erreurs suivantes se sont produites pendant votre inscription :</p>'; } if($nbrErreurs == 0) { echo 'Bonjour ' . $resultat['Identifiant']['value'] . '!<br/> '; echo 'Ton adresse de messagerie est bien ' . $resultat['Email']['value'] . '.<br/>'; echo 'Ton mot de passe est ' . $resultat['Password']['value'] . '.<br/>'; } } else { echo 'Vous n\'avez rien posté.'; } ?> </html>
ou bien rajouter une classe "Manager" qui pourra gérer chaque action:
Je suis un peu pommé, si on pouvait m'éguiller ça serait sympa!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Formulaire</title> <meta http-equiv="Content-Language" content="fr" /> <meta name="description" content="inscription BLablabla" /> </head> <?php class Manager { private $_db; // Instance de PDO public function __construct($db) { $this->setDb($db); } public function add() { $q = $this->_db->prepare('INSERT INTO membres SET nom = :nom'); $q->bindValue(':nom', $_POST['Identifiant']); $q->execute(); } public function exists($info) { $q = $this->_db->prepare('SELECT COUNT(*) FROM membres WHERE nom = :nom'); $q->execute(array(':nom' => $_POST['Identifiant'])); return (bool) $q->fetchColumn(); } public function setDb(PDO $db) { $this->_db = $db; } } class FilterTest { public static function _call($a,$b){ $erreur = false; switch ($b){ case "STRING_IDENT": $string = self::check_space($a); /*if(!$pseudo_free){ $string = false; $erreur = 'Votre pseudo est déjà utilisé.'; } else*/if(strlen($string)<3 ){ $string = false; $erreur = 'Votre identifiant doit contenir plus de 3 caractères'; } elseif(strlen($string)>20 ){ $string = false; $erreur = 'Votre identifiant doit contenir moins de 20 caractères'; } elseif(preg_match('#^[a-z0-9àáâãäçèééêëìíîïñðòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝ ._\'-]{3,20}$#i', $string)){ $string=$string; } else{ $string = false; $erreur='Cet identifiant ne correspond pas aux exigences de l\'administrateur.'; } break; case "STRING_PASSWORD": $string=trim($a); $_POST['PasswordConfirm']=trim($_POST['PasswordConfirm']); if($string!=$_POST['PasswordConfirm']){ $string = false; $erreur = 'Les deux mots de passe que vous avez insérés ne correspondent pas.'; } elseif(strlen($string)<3){ $string = false; $erreur = 'Votre mot de passe doit contenir plus de 3 caractères'; } else{ $string= sha1('Gr@1n2s3l1' . md5($string) . 'gRaIn2$eL2'); } break; case "STRING_EMAIL": $string = self::check_space($a); $_POST['EmailConfirm']= self::check_space($_POST['EmailConfirm']); /*if(!$email_free){ $string = false; $erreur = 'L\'adresse email que vous avez insérée est déjà utilisée.'; }*/ if($string!=$_POST['EmailConfirm']){ $string = false; $erreur = 'Les deux adresses email que vous avez entrées ne correspondent pas.'; } elseif(strlen($string)>320){ $string = false; $erreur = 'Votre adresse email comporte trop de caractères.'; } elseif(preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#i', $string)){ $string=$string; } else{ $string = false; $erreur='Vous avez inséré une adresse email non valide.'; } break; } return array('value'=>$string,'erreur'=>$erreur); } public static function check_space($string){ $temp=trim($string); $string=""; for ( $i = 1 ; $i < strlen($temp) +1 ; $i ++ ){ if ( $temp[$i-1]==" " && $temp[$i]==" "){ } else{ $string.= $temp[$i-1] ; } } return $string; } } $options = array( 'Identifiant' => array( 'filter' => FILTER_CALLBACK, 'options' =>create_function('$a','return FilterTest::_call($a,"STRING_IDENT");') ), 'Password' => array( 'filter' => FILTER_CALLBACK, 'options' => create_function('$a','return FilterTest::_call($a,"STRING_PASSWORD");') ), 'Email' => array( 'filter' => FILTER_CALLBACK, 'options' => create_function('$a','return FilterTest::_call($a,"STRING_EMAIL");') ) ); $db = new PDO('mysql:host=localhost;dbname=combats', 'root', ''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); / $manager1 = new Manager($db); $resultat = filter_input_array(INPUT_POST, $options); if($resultat != null)//Si le formulaire a bien été posté. { //Enregistrer des messages d'erreur perso. $messageErreur = array( 'Identifiant' => $resultat['Identifiant']['erreur'], 'Email' => $resultat['Email']['erreur'], 'Password' => $resultat['Password']['erreur'] ); $nbrErreurs = 0; ?> <ul> <?php foreach($options as $cle => $valeur) //Parcourir tous les champs voulus. { if(empty($_POST[$cle])) //Si le champ est vide. { echo '<li> Veuillez compléter le champ requis « ' . $cle . ' ».</li><br/>'; $nbrErreurs++; } else if($resultat[$cle]['value'] == false) //S'il n'est pas valide. { echo '<li>' .$messageErreur[$cle] . '</li><br/>'; $nbrErreurs++; } } ?> </ul> <?php if($nbrErreurs > 0){ echo '<p>Les erreurs suivantes se sont produites pendant votre inscription :</p>'; } if($nbrErreurs == 0) { echo 'Bonjour ' . $resultat['Identifiant']['value'] . '!<br/> '; echo 'Ton adresse de messagerie est bien ' . $resultat['Email']['value'] . '.<br/>'; echo 'Ton mot de passe est ' . $resultat['Password']['value'] . '.<br/>'; /*$manager->add(); */ } } else { echo 'Vous n\'avez rien posté.'; } ?> </html>
Merci
Partager