Liste déroulante avec onchange et conservation des données précédentes

Liste déroulante avec onchange et conservation des données précédentes - PHP - Programmation

Marsh Posté le 06-02-2006 à 12:48:33    

Bonjour à tous.
 
 
Je souhaite utiliser une liste déroulante avec un reload de la page au moyen d'un "onchange". Voici mon bout de code de test :  
 
<form action="" method=post>
<br><input type="text" name="test"><br>
<select onchange="location=this.options[this.selectedIndex].value;">
 <option value='#'>Choix multiple</option>
 <option value="?nbpersonne=1">1</option>
 <option value="?nbpersonne=2">2</option>
 
</select>
<?
$nbpersonne = $_GET[nbpersonne];
for ($i=1; $i <= $nbpersonne; $i++) {
 echo "<br>Personne".$i."<input type=\"text\" name=\"email".$i."\">";
}
?>
<br><input type="submit" name="valid" value="Valider">
</form>

 
Or lorsque la page se relance, la saisie de la text box précédente disparaît et je souhaiterais qu'elle soit conservée. Avez-vous une solution à mon problème? (il n'y a pas de validation du formulaire donc pas moyen de mettre un "value=$_POST[test]" dans l'input)
 
Merci d'avance

Reply

Marsh Posté le 06-02-2006 à 12:48:33   

Reply

Marsh Posté le 06-02-2006 à 12:50:42    

1 - On utilise les balise codes pour insérer du code :o ....
2 - Rien a voir avec le PHP , va voir du coté Javascript :jap:
3 - bonne journée :)
 
Edit :

Code :
  1. <script language="javascript" type="text/javascript">
  2. function ValiderListe(valeur)
  3.      {
  4.      location.href = '?nbpersonne=' + valeur ;
  5.      return true ;
  6.      }
  7. </script>
  8. <form action="" method="post" name="formulaire">
  9. <br><input type="text" name="test"><br>
  10. <select name="nbpersonne" onchange="ValiderListe(this.options[this.selectedIndex].value)">
  11. <option value='#'>Choix multiple</option>
  12. <?php
  13. for ($i = 1 ; $i<= 2 ; $i++ )
  14.     {
  15.     if($_POST['nbpersonne'] == $i )
  16.          $selected = 'selected' ;
  17.     else
  18.          $selected = '' ;
  19.     echo "<option value='".$i."' ".$selected.">".$i."</option>\n ";
  20.     }
  21. ?>
  22. </select>
  23. <?
  24. $nbpersonne = $_GET[nbpersonne];
  25. for ($i=1; $i <= $nbpersonne; $i++) {
  26. echo "<br>Personne".$i."<input type=\"text\" name=\"email".$i."\">";
  27. }
  28. ?>
  29. <br><input type="submit" name="valid" value="Valider">
  30. </form>


Message édité par the_bigboo le 06-02-2006 à 13:00:07
Reply

Marsh Posté le 06-02-2006 à 13:52:44    

Merci pour ta réponse (désolé pour le code, j'ai cherché mais bon...  :sarcastic: )
 
Mais j'ai du mal m'exprimer parce que, à vue de nez, ton code répond à la question, "comment fait-on pour que la valeur que j'ai sélectionnée dans la liste déroulante reste sélectionnée après la validation du formulaire?". Or ma question c'était plutôt : "Comment fait-on pour que la valeur de la zone de texte "test" reste saisie après le reload du au onchange?"
 
J'ai pensé à faire passer la valeur dans l'URL et la récupérer dans le tableau $_GET mais j'ai beaucoup de valeur de ce type à conserver et ça me donnerait une URL de fou dont je ne veux pas.  :) Y a-t-il une autre solution?

Reply

Marsh Posté le 06-02-2006 à 14:04:56    

une solution : lancer l'envoie du formulaire au complet comme si c'était un envoie normal.
Aprés à toi de savoir faire la différence niveau php.

Reply

Marsh Posté le 06-02-2006 à 15:44:59    

omega2 a écrit :

une solution : lancer l'envoie du formulaire au complet comme si c'était un envoie normal.
Aprés à toi de savoir faire la différence niveau php.


Tout betement !

Reply

Marsh Posté le 06-02-2006 à 16:16:37    

Si j'ai bien compris vous me recommandez de faire un formulaire contenant la liste déroulante du choix du nombre de personnes et un autre formulaire avec les zones de textes qui s'affichent en fonction de la réponse au 1er formulaire. Effectivement c'est une solution simple mais là encore, vous ne répondez pas à ma question...
 
Pour des raisons techniques, j'ai besoin de fonctionner avec cette architecture (tout sur la même page). Je ne cherche donc pas simplement une solution "qui marche" mais une solution "qui marche en utilisant 1 seul formulaire et un reload de ce formulaire lors du choix de nombre de personnes"
 
Si vous voulez un exemple => http://www.voyages-sncf.com/dynami [...] AGENCY=VSC, saisissez une gare de départ et/ou de destination et choisissez un nombre d'adultes (ex : 2). Vous verrez que la page se reload, que de nouveaux éléments de formulaire apparaissent mais que vos gares de départ et/ou de destination sont toujours saisies.

Reply

Marsh Posté le 06-02-2006 à 16:37:57    

Qui a dit deux formulaires? :??:  
En javascript, tu peux forcer l'envoie d'un formulaire comme si la personne avait cliqué sur un bouton de validation. C'est tout ce qu'on te disait de faire.
Aprés, c'est sur que si tu veux garder toutes les valeurs, ca veut dire tout mettre dans le même formulaire et pas en plusieurs.

Reply

Marsh Posté le 06-02-2006 à 16:56:37    

ben oui , tu affiche une liste déroulante , et dessous avec un isset() , tu teste si la variable de ta liste existe deja, si elle existe , tu affiche ta deuxieme liste et pareil si tu as une troisieme liste !
 
Apres tu utilise If pour resélectionner ton option dans ta liste déroulante :

Code :
  1. for( $i=1 ; $i <= 10 ; $i++ ){
  2.      if( $_POST['liste1'] == $i)
  3.           echo "selected";
  4.     }


 
Le code est pas complet mais tu as compris l'idée hein ? :D

Reply

Marsh Posté le 08-02-2006 à 15:11:57    

Ok et pouvez-vous me donner l'instruction qui permet de forcer l'envoi d'un formulaire en javascipt svp? :)

Reply

Marsh Posté le 08-02-2006 à 15:15:10    

document.getElementById("id_form" ).submit()
ou
document.nom_form.submit()
ou si tu es 'dedans'
this.submit()
 
 
etc...


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Sujets relatifs:

Leave a Replay

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