recuperation resultat de listes deroulantes liées

bipbip'
Invité n'ayant pas de compte PHPfrance

30 août 2007, 09:03

Bonjour,

J'ai créer des listes déroulantes liées mais je n'arrive pas à récupérer la seconde valeur.
Voici mon code :
<form name="formulaire" action="" method="">
<?php
  echo "Filter";
  $option1="option1";
  $option2="option2";
?>
  <label for="<?php echo $option1;?>"></label>
  <select  onchange='afficheoption2(<?php echo $idproject;?>,<?php echo $option1;?>,<?php echo $option2;?>)' name='<?php echo $option1;?>' id='<?php echo $option1;?>' >
                <OPTION value="cluster">Cluster</OPTION>
	<OPTION value="BHR">BHR</OPTION>
	<OPTION value="feature">Feature</OPTION>
	<OPTION value="specie">Specie</OPTION>
	<OPTION value="gene">Protein</OPTION>
  </select>
			
  <label for="<?php echo $option2;?>"></label>
  <span name='<?php echo $option2;?>' id=" <?php echo $option2;?>">
	 <!-- Seconde liste deroulante-->
  </span>
				
  <div class="buttons">
	 <input type="hidden" name="user_defined_number_of_filters" value="<?php echo $user_defined_number_of_filters;?>"></input>
	<input type="hidden" name="idparameters" value="<?php echo $idparameters;?>"></input>
	<input type="hidden" name="idproject" value="<?php echo $idproject;?>"></input>
				
	<button typ="submit"  value="Add a Filter" class="btn" onclick="Javascript: window.location.replace('omg_add_or_delete_filter.php?user_defined_number_of_filters=<?php echo $user_defined_number_of_filters;?>&param=Add_a_Filter&idparameters=<?php echo $idparameters;?>&idproject=<?php echo $idproject;?>)"><img src="img/add.emf">Add a Filter</button>
	<button typ="submit"  value="Delete the last Filter" class="btn" onclick="Javascript: window.location.replace('omg_add_or_delete_filter.php?user_defined_number_of_filters=<?php echo $user_defined_number_of_filters;?>&param=Delete_the_last_Filter&idparameters=<?php echo $idparameters;?>&idproject=<?php echo $idproject;?>')"><img src="img/del.emf">Delete the last Filter</button>
				
  </div>
</form>
Le code javascript est le suivant :

Code : Tout sélectionner

<script type="text/JavaScript"> function getXmlHttpRequest() { if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }else if(window.ActiveXObject) { try{ xhr = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } }else{ alert("Votre navigateur ne supporte pas l'object MLHTTPRequest!"); xhr = false; } } function afficheoption2(id,a,b) { getXmlHttpRequest(); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200) { menu = xhr.responseText; document.getElementById(b.id).innerHTML = menu; } } xhr.open("POST","omg_select_queries.php?idproject="+eval(id),true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); selection = document.getElementById(a.id); idoption1 = selection.options[selection.selectedIndex].value; xhr.send("idoption1="+idoption1); } </script>
et la page omg_select_queries.php
if(isset($_POST["idoption1"]) and $_POST["idoption1"]=="specie")
{
	echo "<select name='option2'>";
		
	$query="SELECT * 
		FROM $database.specie,$database.specie_has_project
		WHERE $database.specie_has_project.project_idproject=$idproject
		";
	$queryresult = pg_query($query);
								
	while($row = pg_fetch_row($queryresult))
	{
		echo "<option value='".$row[0]."'>".$row[2]." ".$row[1]." ".$row[3]." ".$row[4]."</option>";
	}
	echo "</select>";
	}
Voila pour le code.

Je travaille sous PHP5, IE et PostgreSQL.

C'est pour l'option2 que je n'arrive pas à obtenir la valeur.

Merci pour votre aide

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

30 août 2007, 12:16

Euh... les balises [ php ] permettent de poster tout un bloc de code et de dire que celui-ci contient du php, pas besoin de remplacer toutes tes bailises <?php ?> par ceux-ci dans des balises [ code ] :)
Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

Quant à ton problème il te manque un "e" aux attribut type="submit" de tes boutons, qui ne sont du coup pas considérés comme des boutons de soumission, mais de simples boutons qui executent le onClick. Et en l'occurence le onClick ne soumet pas le formulaire, mais redirige l'utilisateur vers une url qui ne prends pas en compte les valeurs sélectionnées dans le formulaire...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

30 août 2007, 13:43

En fait je dois mettre une serie de différentes combobox liées afin de filtrer des informations.
Les combobox sont créées par une boucle "for".

Une fois tous ces filtres renseignés je voudrais retrouver toutes les informations entrées par l'utilisateur.

Voici le code que je voudrais:
<form name="formulaire" action="omg_save_filter.php?user_defined_number_of_filters=<?php echo $user_defined_number_of_filters;?>&param=Add_a_Filter&idparameters=<?php echo $idparameters;?>&idproject=<?php echo $idproject;?>')" method="POST">
	<?php 
		for ($j=0; $j<$user_defined_number_of_filters; $j++) //pg_numrows
		{
			echo "Filter";
			$option1="option1".$j;
			$option2="option2".$j;?>
			<label for="<?php echo $option1;?>"></label>
			<select  onchange='afficheoption2(<?php echo $idproject;?>,<?php echo $option1;?>,<?php echo $option2;?>)' name='<?php echo $option1;?>' id='<?php echo $option1;?>' >
				<OPTION value="cluster">Cluster</OPTION>
				<OPTION value="BHR">BHR</OPTION>
				<OPTION value="feature">Feature</OPTION>
				<OPTION value="specie">Specie</OPTION>
				<OPTION value="gene">Protein</OPTION>
			</select>
			
			<label for="<?php echo $option2;?>"></label>
			<span name='<?php echo $option2;?>' id="<?php echo $option2;?>">
				<!-- Seconde liste deroulante-->
			</span>
			
		
			<br>
	<?php
		}
	?>
			<div class="buttons">
				<input type="hidden" name="user_defined_number_of_filters" value="<?php echo $user_defined_number_of_filters;?>"></input>
				<input type="hidden" name="idparameters" value="<?php echo $idparameters;?>"></input>
				<input type="hidden" name="idproject" value="<?php echo $idproject;?>"></input>
				
				<button type="submit"  value="Add a Filter" class="btn" onclick="Javascript: window.location.replace('omg_add_or_delete_filter.php?user_defined_number_of_filters=<?php echo $user_defined_number_of_filters;?>&param=Add_a_Filter&idparameters=<?php echo $idparameters;?>&idproject=<?php echo $idproject;?>')"><img src="img/add.emf">Add a Filter</button>
				<button type="submit"  value="Delete the last Filter" class="btn" onclick="Javascript: window.location.replace('omg_add_or_delete_filter.php?user_defined_number_of_filters=<?php echo $user_defined_number_of_filters;?>&param=Delete_the_last_Filter&idparameters=<?php echo $idparameters;?>&idproject=<?php echo $idproject;?>')"><img src="img/del.emf">Delete the last Filter</button>
				
			</div>
			<input type="submit" name="submit" value="Submit" class="btn_submit" ></input>
</form>
Est ce possible de récupérer tous les résultats de toutes les combobox à la fin, sans bouton en fin de chaque ligne de combo box liées?

Eléphanteau du PHP | 13 Messages

31 août 2007, 11:25

Salut, j'ai trouvé recemment un site qui explique bien le système de listes déroulantes liées :
http://www.roodali.com/index.php?2007/0 ... -php-mysql

bipbip1
Invité n'ayant pas de compte PHPfrance

31 août 2007, 13:48

Salut,

Tout d'abord merci de m'avoir répondu car là je galère trop.

En fait mon problème ce n'est pas tellement de créer de listes deroulantes liées mais surtout d'afficher par ex 3 combobox liées identiques et de recupérer toutes les données.

Je m'explique :

1er combo : choix entre type de formes géometriques
2ieme combo : choix, pour une forme géomerique definie, d'une couleur

puis à nouveau:
1er combo : choix entre type de formes géometriques
2ieme combo : choix, pour une forme géomerique definie, d'une couleur

Et à la fin qu'un seul bouton Submit

Sais tu comment faire?

Merci pour toute aide.

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

31 août 2007, 15:36

Bah c'est en principe le fonctionnement normal d'un formulaire... le bouton submit envoi toutes les données des champs du formulaire en direction de la page spécifiée dans l'attribut action.

Le problème vient je pense du fait que tu mélanges des boutons de type submit avec des actions de redirection de la page (dans les onClick) ... le résultat me semble assez aléatoire... soit tu valides le formulaire soit tu rediriges en javascript, mais pas les deux en même temps...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

31 août 2007, 15:43

Peux tu me donner un exemple plus concret?

Car les formulaires c'est pas encore trop mon truc!!!!

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

31 août 2007, 16:01

Un exemple concret ? euh... oui mais de quoi ?
Bon bah aller, essayons...

Code : Tout sélectionner

<form action="script.php" method="post"> <input type="text" name="toto" /> <input type="submit" value="Envoyer le formulaire" /> </form>
Lorsque tu cliques sur le bouton (submit), le formulaire est envoyé à la page script.php, via la méthode post (donc les données récupérées dans $_POST), et tu peux ainsi récupérer la valeur du champ "toto"

Code : Tout sélectionner

<form action="script.php" method="post"> <input type="text" name="toto" /> <input type="button" onClick="document.location='chepaquoi.php?titi=xxx" /> </form>
Lorsque tu cliques sur le bouton (button), le formulaire n'est pas envoyé, mais l'action onClick est exécutée, provoquant la redirection vers la page chepaquoi.php. Le champ toto ne pourra pas être récupéré (puisque non soumit), en revanche, tu pourras récupérer la valeur de titi avec $_GET.

Toi tu as des boutons de type submit qui font des redirections, leur comportement me semble donc hasardeux et c'est peut être la cause des soucis que tu rencotnres (à savoir des données non envoyées)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

02 sept. 2007, 23:00

merci beaucoup pour ta réponse je vais essayer de modifier mon programme avec ce que tu m'as dis.

Bonne soirée

Petit nouveau ! | 2 Messages

03 sept. 2007, 10:29

Bonjour,

Voila j'ai rectifié le tir pour le formulaire que voici :
	<legend>Please define an expression profile to match</legend>
			<form name="formulaire" action='omg_save_filter.php' method="POST" >
		
		<?php

			$option1="option1";
			$option2="option2";?>
			<label for="<?php echo $option1;?>"></label>
			<select  onchange='afficheoption2(<?php echo $idparameters;?>,<?php echo $idproject;?>,<?php echo $option1;?>,<?php echo $option2;?>)' name='<?php echo $option1;?>' id='<?php echo $option1;?>' >
				<OPTION VALUE=-1 selected>           </OPTION>;
				<OPTION value="cluster">Cluster</OPTION>
				<OPTION value="BHR">BHR</OPTION>
				<OPTION value="feature">Feature</OPTION>
				<OPTION value="specie">Specie</OPTION>
				<OPTION value="gene">Protein</OPTION>
			</select>
			
		
			<label for="<?php echo $option2;?>"></label>
			<span  name='<?php echo $option2;?>' id="<?php echo $option2;?>" >
				<!-- Seconde liste deroulante-->
			</span>
			<br>
		
			<div class="buttons">
				<input type="hidden" name="idparameters" value="<?php echo $idparameters;?>"></input>
				<input type="hidden" name="idproject" value="<?php echo $idproject;?>"></input>
				<input type="hidden" name="history" value="<?php echo $historic;?>"></input>
				<input type="hidden" name="user_defined_number_of_filters" value="<?php echo $user_defined_number_of_filters;?>"></input>			
				<input type="submit" name="submit" value="AND" class="btn_submit" ></input><br>
				<input type="submit" name="submit" value="Submit" class="btn_submit" ></input>
			</div>

		</form>
Mais maintenant comment faire pour réitérer ce code plusieurs fois tout en récuperant les variables???

J'avais pensé au code ci-dessous, mais je n'arrive pas a recuperer les infos dans omg_save_filter.php:
			<form name="formulaire" action='omg_save_filter.php' method="POST" >
		
		<?php
		for($i=0;$i<$user_defined_number_of_filters;$i++)
		{
			$option1="option1_".$i;
			$option2="option2_".$i;?>
			<label for="<?php echo $option1;?>"></label>
			<select  onchange='afficheoption2(<?php echo $idparameters;?>,<?php echo $idproject;?>,<?php echo $option1;?>,<?php echo $option2;?>)' name='<?php echo $option1;?>' id='<?php echo $option1;?>' >
				<OPTION VALUE=-1 selected>           </OPTION>;
				<OPTION value="cluster">Cluster</OPTION>
				<OPTION value="BHR">BHR</OPTION>
				<OPTION value="feature">Feature</OPTION>
				<OPTION value="specie">Specie</OPTION>
				<OPTION value="gene">Protein</OPTION>
			</select>
			
		
			<label for="<?php echo $option2;?>"></label>
			<span  name='<?php echo $option2;?>' id="<?php echo $option2;?>" >
				<!-- Seconde liste deroulante-->
			</span>
			<br>
				<?php echo $option2;?>
				
		<?php }?>	
			<div class="buttons">
				<input type="hidden" name="idparameters" value="<?php echo $idparameters;?>"></input>
				<input type="hidden" name="idproject" value="<?php echo $idproject;?>"></input>
				<input type="hidden" name="history" value="<?php echo $historic;?>"></input>
				<input type="hidden" name="user_defined_number_of_filters" value="<?php echo $user_defined_number_of_filters;?>"></input>			
				<input type="submit" name="submit" value="AND" class="btn_submit" ></input><br>
				<input type="submit" name="submit" value="Submit" class="btn_submit" ></input>
			</div>
		</form>
omg_save_filter.php:
	$idparameters="6";
	$idproject="1";
	$user_defined_number_of_filters="2";
	
	for($i=0;$i<$user_defined_number_of_filters;$i++)
	{	
		$option="option2_".$i;
		echo "$i".$_POST[$option];	
	}
Pouvez vous m'aider?

Merci et bonne journée

Mammouth du PHP | 693 Messages

03 sept. 2007, 11:25

Dans ta dernière ligne, il me semble que ceci serait plus juste

echo "$i".$_POST["$option"];

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

03 sept. 2007, 11:31

Dans ta dernière ligne, il me semble que ceci serait plus juste

echo "$i".$_POST["$option"];
Euh non, c'est pas plus juste, c'est simplement plus lourd.

$option est une variable contenant une chaine correspondant à un index du tableau $_POST.

Ajouter des guillemets autour transforme ta variable en chaine que php doit parser pour voir si elle contient des variables et les remplacer. Puis une fois remplacé, il peut enfin faire le traitement qu'il aurait fait dès le début, s'il n'y avait pas eu les guillemets.

Bref, " c'est aussi propre qu'avec le vieil OMO quand on faisait pas le noeud " ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 693 Messages

03 sept. 2007, 11:42

Pourtant, il me semble que la dernière fois que j'avais utilisé cette syntaxe, j'avais eu des erreurs. Enfin, vais pas contredire le Piaf tout Puissant :P

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

03 sept. 2007, 11:46

Euh... c'est bien parcequ'il s'agit d'une variable qu'on utilise que les guillemets ne sont pas obligatoires... :)
s'il s'agit d'une chaine de caractère, elles sont effectivement indispensables (sinon php retourne un avertissement disant qu'il ne connait pas la constante, et qu'il va considéré qu'il s'agit d'une chaine mal définie) :
$option = 'monIndex';
$_POST[$option];
// ou 
$_POST['monIndex'];
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 2 Messages

03 sept. 2007, 13:26

Avez vous une idée afin de répéter plusieurs fois le code des combobox tout en récuperant les variables???

1er combo : choix entre type de formes géometriques
2ieme combo : choix, pour une forme géomerique definie, d'une couleur

puis à nouveau:
1er combo : choix entre type de formes géometriques
2ieme combo : choix, pour une forme géomerique definie, d'une couleur

....

Et à la fin qu'un seul bouton Submit