Taitement d'une liste de selection

Taitement d'une liste de selection - PHP - Programmation

Marsh Posté le 16-08-2005 à 17:32:41    

bonjour,  
Je voudrais pouvoir accéder aux éléments d'une liste de sélection afin de faire un traitement. mon script est le suivant:  
 
<form name="frm" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">  
 <select name="base">  
 <option value="1">Année1  
 <option value="2">Année2  
 <option value="3">Année3  
 <option value="4">Année4  
 </select>  
 
</form>  
<?  
 //Accès aux éléments d'une liste de sélection  
if($selecteur=="1" )
 //traitement1
else
 //traitement2
 
?>  

Reply

Marsh Posté le 16-08-2005 à 17:32:41   

Reply

Marsh Posté le 16-08-2005 à 17:36:49    

$_POST te permet dans ton cas (method="post" ) récupérer la variable $_POST['base']
 
Donc:
 

Code :
  1. $selecteur = isset($_POST['base']) ? $_POST['base'] : 0;


 
 
 


---------------
www.renderfarm.online
Reply

Marsh Posté le 16-08-2005 à 17:48:21    

J'ai exécuté le code suivant et il affiche toujour 0.
J'aurais voulu qu'il affiche l'élément sélectionné.
 
<?
 function message($v)
  {echo 'Bonjour ' . $v;
   
}
?>
 
<form name="frm" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">
 <select name="base">
 <option value="1">Année1
 <option value="2">Année2
 <option value="3">Année3
 <option value="4">Année4
 </select>
 
</form>
<?
 $selecteur = isset($_POST['base']) ? $_POST['base'] : 0;
 echo $selecteur;
?>

Reply

Marsh Posté le 16-08-2005 à 17:56:42    

Normal, un formulaire est fait pour renvoyer les données à une nouvelle page (dans ton cas la même page que le formulaire, PHP_SELF) une fois le bouton "submit" déclenché (qui n'est d'ailleurs pas présent dans ton exemple).
 
Il faut donc analyser le contenu du formulaire dans une seconde phase, les résultats ne peuvent pas apparaître au même moment que le formulaire vide apparaît, puisque l'utilisateur n'a encore rien choisi... Ce n'est pas propre au language PHP ou HTML, c'est de la simple logique. Un caissier ne va pas rendre la monnaie à l'acheteur alors qu'il n'a même pas encore payé... Désolé pour l'exemple "neuneu" mais c'est ce que j'ai trouvé de mieux pour illustrer le problème :)
 
Rajoutes donc un <input type="submit" value="Envoyer le formulaire" /> qui sera le bouton qui va renvoyer les données.
Tu peux donc maintenant choisir l'Année, puis appuyer sur le bouton, et ensuite tu pourras analyser les données avec $_POST['base']


Message édité par dotfx le 16-08-2005 à 18:27:52

---------------
www.renderfarm.online
Reply

Marsh Posté le 17-08-2005 à 10:25:50    

Merci, la solution suivante marche
<form name="frm" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">
 <select name="base">
 <option value="1">Année1
 <option value="2">Année2
 <option value="3">Année3
 <option value="4">Année4
 </select>
<input type="submit" value="Envoyer le formulaire" />
</form>
<?
 $selecteur = isset($_POST['base']) ? $_POST['base'] : 0;
 echo $selecteur;
?>
 
est t-il possible de ne pas utiliser de bouton submit mais l'événement onChande de la balise <select name="base" onChange='...'>

Reply

Marsh Posté le 17-08-2005 à 10:28:17    

Oui:
 
onChange="this.form.submit"
 
Dans ce cas tu n'as plus besoin de l'input submit.


---------------
www.renderfarm.online
Reply

Marsh Posté le 17-08-2005 à 10:42:13    

Merci de ton aide ceci marche.
 
<form name="frm" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">
 <select name="base" onChange="this.form.submit();">
 <option value="0">Votre choix
 <option value="1">Année1
 <option value="2">Année2
 <option value="3">Année3
 <option value="4">Année4
 </select>
</form>
<?
 $selecteur = isset($_POST['base']) ? $_POST['base'] : 0;
 echo $selecteur;
?>

Reply

Marsh Posté le 17-08-2005 à 11:05:05    

Au lieu d'appeler la methode submit comme suit,
 
<form name="frm" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">  
 <select name="base" onChange="this.form.submit();">  
 <option value="0">Votre choix  
 <option value="1">Année1  
 <option value="2">Année2  
 <option value="3">Année3  
 <option value="4">Année4  
 </select>  
</form>  
<?  
 $selecteur = isset($_POST['base']) ? $_POST['base'] : 0;  
 echo $selecteur;  
?>
 
j'aimerait pouvoir l'appeler dans une fonction afin de pouvoir faire d'autres traitement. J'ai testé l'exemple suivant mais cela ne marche pas.
 
<?
 function message()
  {this.form.submit();
   $selecteur = isset($_POST['base']) ? $_POST['base'] : 0;
   echo $selecteur;
   
 }
?>
 
<form name="frm" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">
 <select name="base" onChange="message();">
 <option value="1">Année1
 <option value="2">Année2
 <option value="3">Année3
 <option value="4">Année4
 </select>
</form>

Reply

Marsh Posté le 17-08-2005 à 11:11:52    

mmmm non, tu ne peux pas intégrer PHP et JavaScript dans une même fonction et en attendre un résultat immédiat car:
1) ce sont deux langages différents.
2) PHP s'éxecute côté serveur avant même que l'utilisateur ne fasse quoi que ce soit, puis la page est envoyée à celui-ci.
3) JavaScript s'execute sur la machine du visiteur, puis renvoit à nouveau le formulaire au serveur au moment du changement de la selection dans ton cas.
 
Je pense que tu n'as pas compris le fonctionnement de PHP. Celui-ci ne peut pas agir sur le contenu de la page web une fois chargée, puisque les données ont déjà été traîtés.
Il faut donc une seconde étape comme j'ai déjà dit, où la page sera à nouveau chargée, avec les nouvelles données du formulaire, et là oui PHP pourra évaluer les données, puis renvoyer une nouvelle page avec les résultats.


Message édité par dotfx le 17-08-2005 à 11:16:18

---------------
www.renderfarm.online
Reply

Marsh Posté le 17-08-2005 à 12:19:27    

Pourquoi dans l'exemple suivant la valeur du premier élément de la liste ie la valeur 1 n'est jamais affichée. Comment l'afficher?
 
 
<form name="frm" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">  
 <select name="base" onChange="this.form.submit();">  
 <option value="1">Année1  
 <option value="2">Année2  
 <option value="3">Année3  
 <option value="4">Année4  
 </select>  
</form>  
<?  
 $selecteur = isset($_POST['base']) ? $_POST['base'] : 0;  
 echo $selecteur;  
?>  

Reply

Marsh Posté le 17-08-2005 à 12:19:27   

Reply

Marsh Posté le 17-08-2005 à 12:24:59    

Même si le code PHP est APRÈS le formulaire dans ton cas, celui-ci est traîté AVANT sur le serveur, c'est comme ça que le PHP marche, donc $selecteur sera toujours égal à 0 la première fois puisque la page n'a pas encore été envoyée au visiteur.
 
$selecteur prendra une valeur quand le visiteur choisira une valeur, et donc AU SECOND envoi de la page.
 
 
Je me repette, PHP interprète tout ce qui se trouve entre les balises <? ?> avant d'envoyer le fichier, donc ça ne changera rien de mettre le code PHP après le formulaire.
Encore une fois, imaginons que ce soit possible, comment veux-tu que PHP puisse connaître la valeur de $selecteur si l'utilisateur n'a encore rien choisi?


---------------
www.renderfarm.online
Reply

Marsh Posté le 17-08-2005 à 14:56:19    

Avant que l'user ne sélectionne un élément de la liste $selecteur = 0. S'il séletionne Année1, c'est toujours 0 qui s'affiche. Par contre, s'il séletionne Année2, 2 s'affiche, Année3 c'est 3, Année4 c'est 4.

Reply

Marsh Posté le 17-08-2005 à 15:27:04    

mmmmmm étant donné que la première valeur par défaut est Année1, si tu la re-sélectionne le formulaire n'est pas posté: il ne se passe rien puisqu'il n'y a pas eu de changement de valeur.
Il faut donc que tu ajoutes une <option> vide qui sera celle par défaut, par exemple:
 

Code :
  1. <option value="" selected="selected">Choisissez une Année</option>


 
et
 

Code :
  1. onchange="if (this.options[this.selectedIndex].value != '') { this.form.submit(); }"


Message édité par dotfx le 17-08-2005 à 15:29:04

---------------
www.renderfarm.online
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed