données variables dans les parenthèses d'un if()

Eléphant du PHP | 186 Messages

18 févr. 2010, 16:57

Bonjour à tous.

J'ai un formulaire qui doit être rempli en plusieurs langues et dont les champs peuvent varier selon les langues.

Par exemple, mon formulaire en francais, langue par défaut, contient les champs génériques "nom", "description", "catégorie". J'effectue des contrôles sur ces 3 champs pour vérifier s'ils sont bien remplis.

Le processus du formulaire est le suivant.
En premier, le formulaire est en francais et l'on doit renseigner les 3 champs. Une fois validé, les données francaises sont enregistrées et l'on revient sur le formulaire pour le remplir en anglais. Sauf que l'anglais n'étant pas pour moi la langue par défaut, je n'ai que les champs "nom" et "description" à remplir, le champs "catégorie" n'étant plus visible.

Au niveau de ma vérification de remplissage des champs, j'ai donc 3 champs à contrôler en francais et seulement 2 pour l'anglais. Je rappelle que mon formulaire est le même quelque soit la langue à remplir.

Pour le moment, je procède comme suit pour effectuer les vérifications:

Etape 1:
if($lang==$langue_par_defaut){
    $if_ko=$nom=='' || $description=='' || $categorie=='';
    $if_ok=$nom!='' && $description!='' && $categorie!='';
} else {
    $if_ko=$nom=='' || $description=='';
    $if_ok=$nom!='' && $description!='';
}
Etape 2:
if($if_ko){
   //je met mes conditions genre, si $nom est égal à rien, alors $message_erreur1="vous n'avez pas renseigné de nom"; etc...
} elseif($if_ok){
  //j'enregistre les infos en bdd
}
La question que je me pose, c'est: Y aurait il un moyen dans l'étape 1 de ne déclarer que les éléments qui viendront en plus de la vérification commune à toutes les langues plutôt que de réecrire à chaque fois tous les conditions?

J'ai essayé certaines choses sans résultats concluants.

Merci.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 févr. 2010, 18:09

Avec un tableau ?
// on stocke ici les noms des champs à vérifier
$champsDefaut = Array('nom', 'description');
$champsOptionnels(
	'fr'=>Array('categorie')
);

// on fusionne le tableau des champs par défaut et ceux liés à la langue en cours
$champsAverifier = array_merge($champsDefaut, champsOptionnels[$lang]);

$formValide = true;
foreach ($champsAverifier as $champ) {
        // variable dynamique, on récupère la valeur de $champ pour en faire une nouvelle variable, et récupérer la valeur de celle-ci
	$formValide = !empty(${$champ}); 
}
Au passage, tes tests sont redondants, tu peux alléger :
if($formValide){
   //je met mes conditions genre, si $nom est égal à rien, alors $message_erreur1="vous n'avez pas renseigné de nom"; etc...
} else {
  //j'enregistre les infos en bdd
}

dreadmcdn
Invité n'ayant pas de compte PHPfrance

18 févr. 2010, 18:21

Merci ouckileou pour ta réponse.

Je vais creuser la question puisque mes tests ne se limitent pas à vérifier si les champs sont vides, j'ai parfois une vérification supplémentaire sur les valeurs rentrées.

Bonne continuation à tous.