Condition complexe, besoin d'aide

Résolu/Fermé
lonestone1 - 16 déc. 2013 à 14:50
 lonestone1 - 18 déc. 2013 à 16:21
Bonjour,
Je suis en train d'essayer de faire une requête peut être (trop)complexe pour mon niveau et je viens demander votre aide avant de faire n'importe quoi.
Sur mon futur site lorsqu'un admin postera un article il devra choisir entre 5 catégories (qui sont des select). Pour sécurisé le tout j'aimerais afficher une erreur si:
- l'admin ne choisis aucune des 5 catégories
- l'admin choisis plus d'une catégorie donc 2,3,4 ou 5 catégorie

voici le début de code:
if(empty($_POST['category_one']) & empty($_POST['category_two']) & empty($_POST['category_three']) & empty($_POST['category_four']) & empty($_POST['category_five'])
	OR !empty($_POST['category_one']) & !empty($_POST['category_two']) & !empty($_POST['category_three']) & !empty($_POST['category_four']) & !empty($_POST['category_five'])
	OR empty($_POST['category_one']) & !empty($_POST['category_two']) & !empty($_POST['category_three']) & !empty($_POST['category_four']) & !empty($_POST['category_five'])
	OR empty($_POST['category_two']) & !empty($_POST['category_one']) & !empty($_POST['category_three']) & !empty($_POST['category_four']) & !empty($_POST['category_five'])
	OR empty($_POST['category_three']) & !empty($_POST['category_one']) & !empty($_POST['category_two']) & !empty($_POST['category_four']) & !empty($_POST['category_five'])
	OR empty($_POST['category_four']) & !empty($_POST['category_one']) & !empty($_POST['category_two']) & !empty($_POST['category_three']) & !empty($_POST['category_five'])
	OR empty($_POST['category_five']) & !empty($_POST['category_one']) & !empty($_POST['category_two']) & !empty($_POST['category_three']) & !empty($_POST['category_four'])
){ 
	
$erreur_category = "Une erreur est survenue"; 
$valid = false; 
}


le code est loin d'être terminé mais je me rend compte que je me prends peut être trop la tête, y aurais il un moyen de faire plus simple et plus lisible ?

merci d'avance pour votre aide.

2 réponses

Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
16 déc. 2013 à 16:04
Une manière simple de procéder serait de tout simplement compter le nombre de champs qui ont été remplis:

$nb_cat=0;

// Pour chaque catégorie (1,2,3,4 et 5):
// Si le champ n'est pas vide, on ajoute 1 au compteur.
$nb_cat += ( !empty( $_POST['category_one'] ) ) ? 1 : 0 ;
$nb_cat += ( !empty( $_POST['category_two'] ) ) ? 1 : 0 ;
$nb_cat += ( !empty( $_POST['category_three'] ) ) ? 1 : 0 ;
$nb_cat += ( !empty( $_POST['category_four'] ) ) ? 1 : 0 ;
$nb_cat += ( !empty( $_POST['category_five'] ) ) ? 1 : 0 ;

if( $nb_cat <= 0 )
{
	$erreur_category = "Vous devez choisir au moins une catégorie.";
}
else if( $nb_cat > 1 )
{
	$erreur_category = "Vous devez choisir une seule catégorie.";
}


Il y a d'autres manières de procéder mais celle-ci me semble la plus simple.

Bonne chance!
0
merci c'est exactement ce qu'il me fallait !!
0
Bonjour, tu te prend la tête pour rien ! voici un petit code pour toi !:

<?php
if(isset($_POST['cat'])) //Check si on poste quelque chose
{
$cat = $_POST['cat'];
if($cat === '0')
{
echo 'Veuillez choisir une catégorie';
}else {

echo'La catégorie est ok et il s\'agit de la catégorie: '.$cat.''; //ton code de traitement ici

}
}


?>



<form action ="" method="post">
<select name="cat">


<option value="0">Rien</option>

<?php
for ($i = 1; $i <= 5; ++$i)
echo '<option value= ' . $i . '> Catégorie ' .$i . '</option>';
?>
</select>
<input type="submit" Value="envoyer">
</form>

</select>


J'espère que j'ai réussi à t'aider. Bon script !
ps: j'ai pas trop bien indenté mais je pense que tu peux comprendre :)
0