Garder valeur liste déroulante en mémoire

Eléphanteau du PHP | 10 Messages

17 févr. 2011, 12:35

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>

ViPHP
xTG
ViPHP | 7331 Messages

17 févr. 2011, 12:45

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é. :)

Eléphanteau du PHP | 10 Messages

17 févr. 2011, 13:05

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 :)

ViPHP
xTG
ViPHP | 7331 Messages

17 févr. 2011, 13:27

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>';

Eléphanteau du PHP | 10 Messages

17 févr. 2011, 14:58

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

ViPHP
xTG
ViPHP | 7331 Messages

17 févr. 2011, 16:13

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.

Eléphanteau du PHP | 10 Messages

17 févr. 2011, 16:53

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 :)

ViPHP
xTG
ViPHP | 7331 Messages

17 févr. 2011, 20:42

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.

Eléphanteau du PHP | 10 Messages

18 févr. 2011, 10:33

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 ?

ViPHP
xTG
ViPHP | 7331 Messages

18 févr. 2011, 12:07

C'est faisable en PHP.
Il faut utiliser la fonction stat() pour récupérer les informations sur le fichier.