recuperation resultat de listes deroulantes liées

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : recuperation resultat de listes deroulantes liées

par Invité » 04 sept. 2007, 11:47

Ca y est tout marche voici le code final.

Code : Tout sélectionner

<fieldset> <legend>Please define an expression profile to match</legend> <form name="formulaire" action='omg_save_filter.php?idparameters=<?php echo $idparameters;?>&idproject=<?php echo $idproject;?>&user_defined_number_of_filters=<?php echo $user_defined_number_of_filters;?>' method="POST" > <?php for($i=0;$i<$user_defined_number_of_filters;$i++) { $option1="option1_".$i; $option2="option2_".$i;?> <?php echo $i.": ".$option2;?> <label for="<?php echo $option1;?>"></label> <select onchange='afficheoption2(<?php echo $idparameters;?>,<?php echo $idproject;?>,<?php echo $option1;?>,<?php echo $option2;?>,<?php echo $user_defined_number_of_filters;?>)' name='<?php echo $option1;?>' id='<?php echo $option1;?>' > <OPTION VALUE=-1 selected>Choose a filter</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><input type="hidden" name=<?php echo "filternumber".$i;?> value="<?php echo $option2;?>"></input> <?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> <br><br> <input type="submit" name="submit" value="Add a Filter" id="input_add" ></input> <input type="submit" name="submit" value="Delete the last filter" id="input_del" ></input> <br><br> <input type="submit" name="submit" value="Submit" class="btn_submit" ></input> </div> </form> </fieldset>

Voici le javascript :

Code : Tout sélectionner

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 XMLHTTPRequest!"); xhr = false; } } function afficheoption2(idparameters,idproject,a,b,nbpara) { 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?idparameters="+eval(idparameters)+"&idproject="+eval(idproject),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+"&option="+b.id+"&idparameters="+eval(idparameters)+"&idproject="+eval(idproject)+"&nbpara="+eval(nbpara)); }

omg_select_queries.php:

Code : Tout sélectionner

[php] $idparameters=$_POST['idparameters']; $idproject=$_POST['idproject']; $user_defined_number_of_filte=$_POST["nbpara"]; $option_2=$_POST["option"]; if(isset($_POST["idoption1"]) and $_POST["idoption1"]=="specie") { echo "<select name='$option_2' id='$option_2'>"; $query="SELECT * FROM $database.specie,$database.specie_has_project WHERE $database.specie_has_project.project_idproject=$idproject AND $database.specie_has_project.specie_idspecie=$database.specie.idspecie"; $queryresult = pg_query($query); echo "<OPTION VALUE=-1 $selected>Choose a specie </OPTION>\n"; while($row = pg_fetch_row($queryresult)) { echo "<option value='".$_POST["idoption1"]."/".$row[2]." ".$row[1]." ".$row[3]." ".$row[4]."'>". $row[2]." ".$row[1]." ".$row[3]." ".$row[4]."</option>"; } echo "</select>"; } [/php]
et enfin pour recuperer les variables omg_save_filter.php:

Code : Tout sélectionner

[php] $idparameters=$_GET['idparameters']; $idproject=$_GET['idproject']; $user_defined_number_of_filters=$_GET["user_defined_number_of_filters"]; for($i=0;$i<$user_defined_number_of_filters;$i++) { echo "<br>$i ".$_POST["option2_".$i]; }[/php]
Voila

par coyaote » 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

par Ryle » 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'];

par orgerix » 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

par Ryle » 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 " ;)

par orgerix » 03 sept. 2007, 11:25

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

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

par coyaote » 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

par Invité » 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

par Ryle » 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)

par Invité » 31 août 2007, 15:43

Peux tu me donner un exemple plus concret?

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

par Ryle » 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...

par bipbip1 » 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.

un lien qui peux t'aider

par phil47 » 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

par Invité » 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?

par Ryle » 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...