Page 1 sur 1

Garder valeur liste déroulante en mémoire

Posté : 17 févr. 2011, 12:35
par Okutsuko
Bonjour tout le monde,

J'ai créé un formulaire ou il y a plusieurs listes déroulantes, chacune alimentées par un xml différent. La première liste est une liste de "lieu" que je souhaite garder en mémoire une fois qu'elle est sélectionné. Pour les autres listes, quand on choisi un élément, les champs du formulaire sont rempli par un xml pour consultation et modification. Ce que je souhaite, c'est qu'à chaque fois que je vais changer d’élément dans telle ou telle liste déroulante ou dès que je vais appuyer sur submit, la liste "lieu" reste telle qu'elle est est le reste se met a zéro, ou affiche un autre xml choisi.

Je suppose qu'il faut que j'utilise du JS ou de l'AJAX mais je sais pas comment faire, merci :)

Monde code:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">

	<head>
		<title>Test</title>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
		<link rel="stylesheet" type="text/css" media="screen" href="styleform.css" />
		<script src="addpdf.js" type="text/javascript" LANGUAGE="JavaScript"></script> 
		<script src="addpics.js" type="text/javascript" LANGUAGE="JavaScript"></script> 
		

		
	</head>
	

	<form method="post" class="form" action="new.php" enctype="multipart/form-data" > 
		<TABLE BORDER="0"><TR><TH>Lieu</TH></TR><TR><TD><select id="menustation" > <?php require("combobox/choix_station.php");?> </select></TD><TR></TABLE><br/>
		<TABLE BORDER="0">
		 <TR>
			 <TH> Station-Service </TH>
			 <TH> Aire de Lavage </TH>
			 <TH> Atelier </TH>
			 <TH> Boutique </TH>
			 <TH> Divers </TH>
			 <TH> Sécu/Environnement </TH>
		 </TR>
		 <TR>
			<TD> <select id="menustation" > <?php require("combobox/menu_station.php");?> </select> </TD>
			 <TD> <select id="menulavage" > <?php require("combobox/menu_lavage.php");?> </select> </TD>
			 <TD> <select id="menuatelier" > <?php require("combobox/menu_atelier.php");?> </select> </TD>
			 <TD> <select id="menuboutique" > <?php require("combobox/menu_boutique.php");?> </select> </TD>
			 <TD> <select id="menudivers" > <?php require("combobox/menu_divers.php");?> </select> </TD>
			 <TD> <select id="menudivers" > <?php require("combobox/menu_securite.php");?> </select> </TD>
		 </TR>
</TABLE> 
		<fieldset id="main">
			<legend>Ajout d'animation</legend>
			<label>Titre : <input type="text" name="titre" /></label><br/>
			<label><TEXTAREA rows="7" cols="44" name="description">Tapez ici votre description</TEXTAREA></label>
			
			<fieldset id="upload">
				<legend>Choix des images</legend>
				<input type="file" name="photo"/><input type="submit" value="Envoyer" name="send" />
				
			</fieldset>

			<fieldset id="upfich">
				<legend>Choix des fichiers</legend>
				<input type="file" name="docu"/><input type="submit" value="Envoyer" name="send2" />
				<fieldset id="lookfich">
				<legend>Aperçus des fichiers</legend>
					...
				</fieldset>
			</fieldset>	
			<fieldset id="mini" >
				<legend>Miniature(s)</legend>
				<?php require("pics.php");?>
			</fieldset><br/>
		</fieldset>
		<div id="submit">
			<input type="submit" value="Envoyer" name="envoyer"/>
			<input type="reset" value="Rétablir" />
		</div>
	</form>

</html>

Re: Garder valeur liste déroulante en mémoire

Posté : 17 févr. 2011, 12:45
par xTG
Si tu passes par le bouton submit le traitement peut se faire en PHP si tu restes sur la même page.
Toujours est-il que le code le plus intéressant pour nous est dans les require() que tu ne nous as pas présenté. :)

Re: Garder valeur liste déroulante en mémoire

Posté : 17 févr. 2011, 13:05
par Okutsuko
Tous les require() ressemble à ça:
<?php
  $dom = new DOMDocument('1.0', 'utf-8');
  $dom->load("combobox/menu_boutique.xml");
  $liste = $dom->getElementsByTagName('item');
      // Création de la premiere ligne de la combobox
  echo ('<option>Choix de la Fiche</option><br/>');
  foreach($liste as $item)
  {
    if ($item->hasAttribute("text")) {
		$text = $item->getAttribute("text");
		echo ('<option>'.$text.'</option><br/>');
    };
  }
 ?>
Et le dernier appel un PHP qui génère les miniatures. Je n'ai pour le moment pas réalisé le fichier qui lit le xml(je suis en train de le faire au moment ou j’écris(et c'est pas facile^^)) Ce que je veux c'est juste pouvoir garder la valeur du premier combobox en fait :)

Re: Garder valeur liste déroulante en mémoire

Posté : 17 févr. 2011, 13:27
par xTG
Rudjudju c'est quoi ce <br/> qui traine à l'intérieur d'un select ? :non:

Pour garder en mémoire ce qui a été posté voilà comment faire :
Tu as dans la variable $_POST la valeur qui a été sélectionnée. (bon sauf toi dans ton cas car tu as oublié l'attribut name des select...)
<select name="menuboutique" id="menuboutique">
Ainsi tu auras la variable $_POST['menuboutique'] à la réception.
Donc ainsi dans ton fichier require tu peux remplacer le echo par :
if( !empty($_POST['menuboutique']) && $_POST['menuboutique'] == $text ) // si la variable existe et qu'elle est égale à la valeur courante à afficher
  echo '<option selected="selected">' . $text . '</option>';
else
  echo '<option>'.$text.'</option>';

Re: Garder valeur liste déroulante en mémoire

Posté : 17 févr. 2011, 14:58
par Okutsuko
Euhhh... Oui, en effet, grosse bêtise pour les <br/>, totalement inutile ^^.

Par contre, je ne comprend pas du tout comment le code que tu as écris peut faire en sorte de conserver la même valeur dans la liste déroulante en actualisant la page :s

Re: Garder valeur liste déroulante en mémoire

Posté : 17 févr. 2011, 16:13
par xTG
Attention j'ai jamais parlé d'actualisation moi ! J'ai parlé de soumission de formulaire. ;)
Le but est de récupérer la valeur qui a été transmise (donc sélectionnée), comme tu réaffiches le formulaire il suffit donc de comparer lors de la construction de la liste afin de retrouver la valeur.
Quand on la trouve on utilises l'attribut selected qui permet de mettre par défaut le "curseur" du select dessus.

Re: Garder valeur liste déroulante en mémoire

Posté : 17 févr. 2011, 16:53
par Okutsuko
D'accord, merci :)

Sinon, tu as une idée sur la façon d'actualiser(F5 et changer d’élément dans les combobox != de lieu) la page en gardant la valeur qui à été choisie ?

Merci :)

Re: Garder valeur liste déroulante en mémoire

Posté : 17 févr. 2011, 20:42
par xTG
Il faudrait du javascript qui manipulerai les cookies du navigateur pour travailler avec le rafraichissement.
En gros lancer une fonction js toutes les X secondes qui sauvegarderait les données du formulaire dans des cookies.

Et lors de l'affichage (rafraichissement) on afficherai la valeur du cookie s'il existe.

PS: tous les utilisateurs d'internet n'activent pas tous les cookies(voire même qui désactivent le javascript), ce qui rendrait ce système inopérant chez eux.

Re: Garder valeur liste déroulante en mémoire

Posté : 18 févr. 2011, 10:33
par Okutsuko
D'accord donc c'est une mauvaise idée... :?

Est-il possible de connaître le dernier document xml modifié pour utiliser la valeur lieu contenue dans ce dernier ?

Re: Garder valeur liste déroulante en mémoire

Posté : 18 févr. 2011, 12:07
par xTG
C'est faisable en PHP.
Il faut utiliser la fonction stat() pour récupérer les informations sur le fichier.