Traitement formulaire de plusieurs champs

Petit nouveau ! | 3 Messages

17 nov. 2020, 20:16

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 .

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

17 nov. 2020, 21:00

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.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

17 nov. 2020, 21:19

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 nov. 2020, 11:20

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é.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

18 nov. 2020, 13:05

Excellent , merci beaucoup c'est exactement ce que je cherchais .