Page 1 sur 1

Traitement formulaire de plusieurs champs

Posté : 17 nov. 2020, 20:16
par massine
Bonjour ,

J'ai un formulaire de plus de 4O champs(input, textarea, select ...) et dans ce formulaire je possède des champs qui ont les mêmes conditions de traitement exemple:

"code postal client":

Code : Tout sélectionner

if(isset($code_p_client))) { if(preg_match('#^[0-9]{5}$#',$code_p_client)) { $code_p_client=htmlspecialchars($code_p_client); } else { $erreur="Le champ code postal client n'est pas valide"; } }else { $code_p_client=null; }
code postal boutique :

Code : Tout sélectionner

if(isset($code_p_boutique))) { if(preg_match('#^[0-9]{5}$#',$code_p_boutique)) { $code_p_client=htmlspecialchars($code_p_boutique); } else { $erreur="Le champ code postal boutique n'est pas valide"; } }else { $code_p_boutiquet=null; }
mon code fonction parfaitement , le problème c'est que actuellement je traite chaque champs tout seul :| (40 champs beaucoup de code qui se répété ).


S'il vous plait qlq'un pourrait me donner une idée sur comment je peux simplifier le traitement .

Merci par avance .

Re: Traitement formulaire de plusieurs champs

Posté : 17 nov. 2020, 21:00
par @rthur
Tu peux faire un tableau qui contiendrait pour chaque champ de ton formulaire :
- le nom de ton champ de formulaire
- le pattern associé
- le libellé de ton champ en français (pour afficher un message d'erreur clair)

Ensuite un foreach sur chaque élément de ton tableau au sein duquel tu fais la vérification.

Re: Traitement formulaire de plusieurs champs

Posté : 17 nov. 2020, 21:19
par massine
Merci pour votre réponse :
Voici ce que j'ai comme solution

Code : Tout sélectionner

$codes=['code_p_client'=>$code_p_client,'code_p_boutique'=>$code_p_boutique]; foreach ($codes as $key => $value) { if ( !empty($value)) { if(preg_match('#^[0-9]{5}$#',$value)) { $codes[$key]=htmlspecialchars($value); } else { $keyCode=explode('_', $key); $erreur[$key]="Le champ code postal ".$keyCode[2]." n'est pas valide"; } } else { $codes[$key]=null; } }


le problème c'est que si l'utilisateur supprime le champ client_p_code (avec la console) je vais avoir une variable non définie

Re: Traitement formulaire de plusieurs champs

Posté : 18 nov. 2020, 11:20
par @rthur
Je te parlais d'un seul tableau avec l'ensemble de tes champs.

Pour chaque champ tu fais une ligne comme celle-ci :
$tablo_champs[]=array('name'=>'code_p_boutique', 'pattern'=>'#^[0-9]{5}$#', 'nom_fr'=>'Code postal boutique');
Et ensuite un
foreach($tablo_champs as $champ) {
     // Ton traitement de verif (je te laisse adapter)
     if (!isset($_POST[$champ['name'])) die("Le champ ".$champ['nom_fr']." n'a pas été renseigné");
     if (!preg_match($champ['pattern'],$_POST[$champ['name'])) die("Le champ ".$champ['nom_fr']." a une valeur incorrecte.");
}
le problème c'est que si l'utilisateur supprime le champ client_p_code (avec la console) je vais avoir une variable non définie
Si un utilisateur fait une action anormale/non souhaitable, c'est plutôt normal qu'il y ait un message d'erreur. Tu peux faire un isset() si tu veux vérifier que le champ est renseigné.

Re: Traitement formulaire de plusieurs champs

Posté : 18 nov. 2020, 13:05
par massine
Excellent , merci beaucoup c'est exactement ce que je cherchais .