liste déroulante obligatoire

Invité
Invité n'ayant pas de compte PHPfrance

03 mai 2009, 12:31

Salut, je cherche a rendre ma liste obligatoire et récupérer les infos :?
j'arrive avec les champs input mais pas avec le select :cry:

Je vous montre comment j'opère pour les input

Déjà le champ

Code : Tout sélectionner

<tr> <td class="label"><label>Site Internet*</label></td> <td class="field"> <?php if ($fehler["site"] != "") { echo $fehler["site"]; } ?> <input type="text" name="site" maxlength="25" value="<?php echo $_POST[site]; ?>" size="20" <?php if ($fehler["site"] != "") { echo 'class="errordesignfields"'; } ?>/> </td> </tr>
Mes requêtes

Code : Tout sélectionner

$site = $_POST["site"]; $site = stripslashes($site); if(!$site) { $fehler['site'] = "<font color=#FC8484>S.V.P, indiquez votre <strong>adresse internet</strong>.<br /></font>";}
C'est possible de mettre le même genre de code dans un select !?

Code : Tout sélectionner

<select id='select7' name='moisdeb' class='color-select'> <option value="m" selected>mois </option> <option value="01">janvier</option> <option value="02">février</option> <option value="03">mars</option> </select>
je crois que j'ai tout essayé et je commence à douter
Merci pour le coup de pouce :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mai 2009, 12:42

Lorsque tu tests " if(!$site) ", tu vas en fait demander à php de considérer que la variable $site contient un booléen, et vérifier si la valeur de celui-ci est faux ou pas. Si le champ est laissé vide ou contient la valeur 0, alors php considérer que $site est un booléen égal à FALSE, pour toute autre valeur, il considérera qu'il est égal à TRUE.

Donc pour un input, cette méthode peut fonctionner (faut juste que l'utilisateur ne veuille pas spécifier la valeur 0, sans quoi php considérer qu'il n'a rien renseigné). Pour un select simple, c'est un peu différent, dans la mesure où tu as toujours une option de sélectionnée.

La valeur de ton option sélectionnée par défaut étant "m", php considérer que la variable est spécifiée et ne demandera pas de la renseigner.

Tu peux donc au choix modifier la valeur de la première option de ton select (une value à vide produira le même effet qu'un input non renseigné) ou modifier ton test php et contrôller la valeur spécifié. Basiquement, cela donnerait :
if ($_POST['moisdeb'] == 'm')
  echo "Le mois est obligatoire";
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

03 mai 2009, 14:39

super sympa :D

c'est possible de fixer le mois après un rafraichissement
Je vais essayé d'être plus clair !!

Exemple une personne mets toutes ses infos mais oublie un champs donc arrive les messages (Vous n'avez pas remplis le champ)dans mon cas il est obligé de recommencer son choix date vous voyez le truc ?

Mammouth du PHP | 661 Messages

03 mai 2009, 19:12

dans ce cas, tu dois vérifier toutes les lignes de ton <select>
<select id='select7' name='moisdeb' class='color-select'>
                <option value="m"<? if(empty($_POST['moisdeb']) || $_POST['moisdeb'] == 'm') echo 'selected'; ?>>mois </option>
                <option value="01"<? if(!empty($_POST['moisdeb']) &&$_POST['moisdeb'] == '01') echo 'selected'; ?>>janvier</option>
                <option value="02"<? if(!empty($_POST['moisdeb']) && $_POST['moisdeb'] == '02') echo 'selected'; ?>>février</option>
                <option value="03"<? if(!empty($_POST['moisdeb']) && $_POST['moisdeb'] == '03') echo 'selected'; ?>>mars</option>
              </select>
 
Dans ce genre là ... ;)

Invité
Invité n'ayant pas de compte PHPfrance

04 mai 2009, 10:43

merci bcp Nours312,

Et si je fais ça qui fonctionne aussi, qu'est qui est le mieux ?
<select  id='select7' name='moisdeb' class='color-select'>
                <option value="m" selected>mois</option>
                <option value="01" <?php if ($_POST["moisdeb"] == "01" ) { echo "selected"; } ?> >01</option>
                <option value="02" <?php if ($_POST["moisdeb"] == "02" ) { echo "selected"; } ?> >02</option>
                <option value="03" <?php if ($_POST["moisdeb"] == "03" ) { echo "selected"; } ?> >03</option>
</select>
Quel serai la différence ?

Invité
Invité n'ayant pas de compte PHPfrance

04 mai 2009, 10:47

Bien sur avec janvier, février, mars etc à la place de 01, 02, 03 etc.. que j'ai oublié de noter :?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 mai 2009, 11:16

La différence est un avertissement de php si tu accèdes à la page sans que $_POST["moisdeb"] ne soit renseigné. Si les "notices" sont activés dans la configuration du serveur, php va te mettre un message d'avertissement à chaque fois tu vas faire appel à $_POST["moisdeb"] alors que celui-ci n'existe pas.

Le fait d'utiliser la fonction empty() (bien qu'en l'occurence un isSet() soit suffisant) permet à php de tester au préalable si la variable $_POST["moisdeb"] existe, avant de la comparer, et évite ainsi l'avertissement lorsque celle-ci n'est pas définie.

Mais tu peux aussi n'effectuer ce test qu'une seule fois au début et vérifier ensuite la valeur :
<?php 
$mois = 'm'; // par défaut
if (isSet($_POST['moisdeb'])) // si la variable existe
  $mois = $_POST['moisdeb']; // on récupère sa valeur.
?>
<select  id='select7' name='moisdeb' class='color-select'> 
    <option value="m" selected>mois</option> 
    <option value="01" <?php if ($mois == "01") { echo "selected"; } ?> >Jan</option> 
    <option value="02" <?php if ($mois == "02") { echo "selected"; } ?> >Fev</option> 
    <option value="03" <?php if ($mois == "03") { echo "selected"; } ?> >Mar</option> 
</select> 
Je te recommande par ailleurs de garder le test sur l'option "m" afin de n'avoir qu'une seule option de sélectionnée. Pour le moment, pour la majorité des navigateurs, si tu as un attribut "selected" sur 2 options d'une liste simple, c'est le dernier qui l'emporte... pour le moment...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

04 mai 2009, 12:51

Ok merci je vais adopter cette méthode :wink:

Invité
Invité n'ayant pas de compte PHPfrance

04 mai 2009, 14:24

Je vais encore profiter de la qualité des réponses 8-)

j'aimerai afficher une liste déroulante de 5/6 choix en fonction du choix de la première liste !
Je ne sais pas si je m'exprime correctement :?

Exemple:
j'ai une liste avec 3 choix
en fonction de mon choix s'affiche une autre liste de 5/6 choix en fonction de mon premier choix

C'est une question de choix :mrgreen:

Il faut obligatoirement passer par l'ajax et la BDD pour faire un truc comme ça ?
Merci pour les conseils

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 mai 2009, 14:30

Beuh... non... il ne faut pas obligatoirement...

La bdd c'est juste un endroit où vont se trouver tes données... elles pourraient tout aussi bien se trouver dans un fichier plat, xml, excel, ou un peu plus loin dans ton script que ça n'y changerait pas grand chose mis à part le moyen d'y accéder :)

Quant à ajax, ben pareil, ce n'est qu'un moyen d'accès qui permet d'intérroger le serveur en javascript sans quitter la page. Mais si tes infos sont déjà présentes dans ton script, aucun besoin d'aller les demander au serveur alors que javascript peut les trouver un peu plus haut ou plus bas :)

Le forum FAQ contient des explications détaillées sur ce sujet :
:arrow: Formulaires : Listes déroulantes dynamiques liées

Tu trouveras des solutions avec et sans ajax. C'est une piste que tu peux suivre, voire qu'il te suffit d'adapter selon tes besoins ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

04 mai 2009, 15:10

Mais dans tous les tuto que j'ai lu et même dans celui que tu me dis il parle de base de donnée !! :?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 mai 2009, 17:42

Parce que c'est le plus commun :)

Mais je peux t'en faire une juste en javascript et html :
<select name="A" onchange="show(this.options[this.selectedIndex].value);">
  <option value="1">Choisissez...</option>
  <option value="1">Sport</option>
  <option value="2">Couleur</option>
</select>

<select name="A1" id="A1">
  <option value="1">Football</option>
  <option value="2">Curling</option>
</select>

<select name="A2" id="A2" style="display:none">
  <option value="1">Rouge</option>
  <option value="2">Vert avec des rayures jaunes et des taches mauves</option>
</select>

<script type="text/javascript">
/**
 * Affiche la seconde liste en fonction de la valeur sélectionnée
 */
function show(id) {
  for (var i=1; i<=2; i++) { // masque les "sous-select" (id allant de 1 à 2)
     document.getElementById('A' + i).style.display = 'none';
  }
  // affiche le select demandé
  document.getElementById('A' + id).style.display = 'inline';
}
</script>
Bon... c'est une version basique faite rapidement, mais ça te permet de voir qu'il n'est pas nécessaire d'avoir une base de données, ni d'utiliser ajax dès lors où tes listes sont définies dès le départ :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

06 mai 2009, 16:12

Merci encore une fois ! ça c'est une précieuse aide :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 mai 2009, 16:16

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...