transmettre la valeur continent

Eléphant du PHP | 216 Messages

30 sept. 2011, 13:32

Bonjour,

j'ai le formulaire suivant :

echo '<p class="double">';
			echo '<label for="f1-pays" class="oblig">'.$idem_txt0015;
			echo '<span class="info"></span></label>';
			echo '<select name="ad_pays" class="font">';
 
				if (empty($data_dest['pays_'.$lang.'']))
				{
					echo '<option value="-1" selected="selected">'.$idem_txt0017.'</option>';
				}
				else
				{
					echo '<option value="-1">'.$idem_txt0017.'</option>';
				}
				// on se connecte à MySQL 
				include ('connect.php');
 
			$sql_dest = sprintf("SELECT DISTINCT A.id_pay, A.pays_".$lang.", A.id_con, C.id_con, C.cont_".$lang." 
								FROM flatforswap_pays A
								INNER JOIN flatforswap_continent C ON C.id_con = A.id_con
								INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
								INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
								WHERE E.valide = '2'
								ORDER BY A.pays_".$lang." ASC");
 
			$req_dest = mysql_query($sql_dest) or die('Erreur SQL !<br>'.$sql_dest.'<br>'.mysql_error());
				while($data_dest = mysql_fetch_assoc($req_dest))
				{
					$continent = "'.$data_dest['cont_'.$lang.''].'";
  					echo '<option value="'.$data_dest['pays_'.$lang.''].'" '.$selection.'>'.$data_dest['pays_'.$lang.''].'</option>';
 
				}
			echo "</select>";
	
 
		echo '</p>';
 
		echo '</fieldset>';
 
 
	echo '</div>'; //  <!-- fin de corpForm -->
 
		echo '<div id="piedForm">';
			echo '<input type="submit" name="valide_form" value="'.$idem_txt0029.'" />';
		echo '</div>';
 
 
 
echo '</form>';
en validant le formulaire, j'obtiens l'url suivante :

http://www.swapnfly.fr/liste.php?ad_pay ... formations

Le souci c'est que j'ai besoin de transmettre aussi le nom du continent afin d'obenir une url du type :

http://www.swapnfly.fr/liste.php?ad_pay ... formations

mais je ne sais pas du tout comment transmettre cette valeur...

Merci d'avance pour votre aide.

ViPHP
ViPHP | 2577 Messages

30 sept. 2011, 15:16

Bonjour,

Tu peux ajouter le paramètre dans l'attribut action de la balise form comme pour un lien ou ajouter un input de type hidden dans le formulaire.

Eléphant du PHP | 216 Messages

02 oct. 2011, 00:10

Merci Mazarini,

aurais-tu un exemple s'il te plaît en ce qui concerne ta première proposition :

"Tu peux ajouter le paramètre dans l'attribut action de la balise form comme pour un lien"

Merci d'avance pour ton aide.

Eléphant du PHP | 188 Messages

02 oct. 2011, 21:26

Je pense qu'il veut dire dans ta balise <form> qui ouvre le formulaire, tu as un attribu qui s'appele action où tu indique la page qui traite les infos n'est-ce pas ? et bien imaginons que cette adresse sois :
page.php
, si le nom du continent est inscrit en dur dans la page, tu met : (en changent europe avec ce que que tu veux bien sur) :
page.php?continent="europe"
ce qui donnera pour toute la balise form :
<form method='post' action='page.php?continent="europe"' >
et si tu le récupère dans une variable, tu met :
page.php?continent="<?php echo $continent ?>"
ce qui donnera pour toute la balise form :
<form method='post' action='page.php?continent="<?php echo $continent ?>" >
avec la variable $continent qui contient l'info.


:D

Eléphant du PHP | 216 Messages

03 oct. 2011, 10:35

Ha d'accord. Merci arthur77 pour l'explication.

Ben je vais essayer ça ce soir et je vous tiens au courant.

Eléphant du PHP | 216 Messages

03 oct. 2011, 22:13

Je l'ai fais mais ça ne focntionne pas
if ((!isset($_GET['valide_form']) or !empty($erreur_form[0])) and !$ref) 
{

	// affichage des erreurs

if(isset($erreur_form[0])) {for($i=0;$i<sizeof($erreur_form);$i++) { echo $erreur_form[$i];}} 
	
			echo '<form method="get" action="'.$site.'liste.php?continent='.$continent.'" class="form01 type01" id="form01">';
		
						

	echo '<div id="titreForm">'.$txt0140.'</div>';
	echo '<div id="corpForm">';
		echo '<fieldset id="coordonnees">';
		echo '<legend>'.$txt0336.'</legend>';
	
	
		echo '<p class="double">';
			echo '<label for="f1-pays" class="oblig">'.$idem_txt0015;
			echo '<span class="info"></span></label>';
			echo '<select name="ad_pays" class="font">';
			
				if (empty($data_dest['pays_'.$lang.'']))
				{
					echo '<option value="-1" selected="selected">'.$idem_txt0017.'</option>';
				}
				else
				{
					echo '<option value="-1">'.$idem_txt0017.'</option>';
				}
				// on se connecte à MySQL 
				include ('connect.php');

			$sql_dest = sprintf("SELECT DISTINCT A.id_pay, A.pays_".$lang.", A.id_con, C.id_con, C.cont_".$lang." 
								FROM flatforswap_pays A
								INNER JOIN flatforswap_continent C ON C.id_con = A.id_con
								INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
								INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
								WHERE E.valide = '2'
								ORDER BY A.pays_".$lang." ASC");
								
			$req_dest = mysql_query($sql_dest) or die('Erreur SQL !<br>'.$sql_dest.'<br>'.mysql_error());
				while($data_dest = mysql_fetch_assoc($req_dest))
				{
				$selection = "";
				$continent = "";
				if ($ad_pays == $data_dest['pays_'.$lang.'']){
				$selection = 'selected="selected">';
				$continent = $data_dest['cont_'.$lang.''];}
			 
					/*if ($ad_pays == $data_dest['pays_'.$lang.''])
					{
						$selection = 'selected="selected">';
						$continent = '<input type="hidden" name="continent" value="'.$data_dest['cont_'.$lang.''].'">';
						
					}*/
 					echo '<option value="'.$data_dest['pays_'.$lang.''].'" '.$selection.'>'.$data_dest['pays_'.$lang.''].'</option>';
					
				}
			echo "</select>";
			if (isset($continent)){
			echo $continent;}
			
	
		echo '</p>';
		
		echo '</fieldset>';
		
		
	echo '</div>'; //  <!-- fin de corpForm -->
	
		echo '<div id="piedForm">';
			echo '<input type="submit" name="valide_form" value="'.$idem_txt0029.'" />';
		echo '</div>';
	

	
echo '</form>';

j'ai l'url suivante qui s'affcihe :

http://www.swapnfly.fr/liste.php?ad_pay ... formations

Il ignore complètement le paramètre continent...

Eléphanteau du PHP | 10 Messages

04 oct. 2011, 00:46

Bonsoir,
Le mieux est la solution 2 de Mazarine, en créant un <input...caché> dans ton formulaire.
Cela sera transmi avec ton formulaire(et tous les parametres) et tu n'auras aucuns soucis

Eléphant du PHP | 216 Messages

04 oct. 2011, 14:08

Bonjour codeclement ,

mais un input hidden ne peut pas fonctionner dans un select ...

ViPHP
xTG
ViPHP | 7331 Messages

04 oct. 2011, 15:02

Dans un select non, mais dans une balise form oui. ;)

Mammouth du PHP | 568 Messages

04 oct. 2011, 16:37

Et sinon, si tu laisse le formulaire en GET, c'est normal que ta valeur soit écraser il me semble.

Passe le form en POST ou bien utilise un champs hidden

Eléphant du PHP | 216 Messages

05 oct. 2011, 08:25

j'ai mis un champ hidden, comme vous me l'avez conseillé, mais c'est toujours pareil, la valeur $continent ne passe pas...
			echo '<form method="get" action="'.$site.'liste.php" class="form01 type01" id="form01">';
			
		
						

	echo '<div id="titreForm">'.$txt0140.'</div>';
	echo '<div id="corpForm">';
		echo '<fieldset id="coordonnees">';
		echo '<legend>'.$txt0336.'</legend>';
	
	
		echo '<p class="double">';
			echo '<label for="f1-pays" class="oblig">'.$idem_txt0015;
			echo '<span class="info"></span></label>';
			echo '<select name="ad_pays" class="font">';
			
			
				if (empty($data_dest['pays_'.$lang.'']))
				{
					echo '<option value="-1" selected="selected">'.$idem_txt0017.'</option>';
				}
				else
				{
					echo '<option value="-1">'.$idem_txt0017.'</option>';
				}
				// on se connecte à MySQL 
				include ('connect.php');

			$sql_dest = sprintf("SELECT DISTINCT A.id_pay, A.pays_".$lang.", A.id_con, C.id_con, C.cont_".$lang." 
								FROM flatforswap_pays A
								INNER JOIN flatforswap_continent C ON C.id_con = A.id_con
								INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
								INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
								WHERE E.valide = '2'
								ORDER BY A.pays_".$lang." ASC");
								
			$req_dest = mysql_query($sql_dest) or die('Erreur SQL !<br>'.$sql_dest.'<br>'.mysql_error());
				while($data_dest = mysql_fetch_assoc($req_dest))
				{
				$selection = "";
				$continent = "";
							 
				if ($ad_pays == $data_dest['pays_'.$lang.''])
					{
						$selection = 'selected="selected">';
						$continent = '<input type="hidden" name="continent" value="'.$data_dest['cont_'.$lang.''].'">';
						
					}
 					echo '<option value="'.$data_dest['pays_'.$lang.''].'" '.$selection.'>'.$data_dest['pays_'.$lang.''].'</option>';
					
				}
			echo "</select>";
			if (isset($continent)){	
			echo $continent;}
			
	
		echo '</p>';
		
		echo '</fieldset>';

ViPHP
xTG
ViPHP | 7331 Messages

05 oct. 2011, 10:18

:non:
Dans un select non, mais dans une balise form oui. ;)
:roll:

ViPHP
ViPHP | 2577 Messages

05 oct. 2011, 11:19

Bonjour,
$sql_dest = sprintf("SELECT DISTINCT A.id_pay, A.pays_".$lang.", A.id_con, C.id_con, C.cont_".$lang."
                                                                FROM flatforswap_pays A
                                                                INNER JOIN flatforswap_continent C ON C.id_con = A.id_con
                                                                INNER JOIN flatforswap_ville B ON A.id_pay = B.id_pay
                                                                INNER JOIN flatforswap_adherent E ON E.id_vil = B.id_vil
                                                                WHERE E.valide = '2'
                                                                ORDER BY A.pays_".$lang." ASC");
Je suis surpris que tu ne fasse pas référence à un continent dans cette requête.

Dans cette requête, tu sélectionnes les pays dont une ville à un adhérent valide (=2) de n'importe quel continent.

Eléphant du PHP | 216 Messages

05 oct. 2011, 13:06

:non:
Dans un select non, mais dans une balise form oui. ;)
:roll:
Mon chmp hidden n'est pas dans le select, il est bien en dehors...
  echo "</select>";
                        if (isset($continent)){
                        echo $continent;}

Eléphanteau du PHP | 44 Messages

05 oct. 2011, 13:28

Le html généré donne quoi ?

Tu ressors plusieurs lignes de ta table lors de cette requête ou juste une seule, si plusieurs, y'a comme un problème, car $continent devrait-être un array.

Il serait aussi judicieux de déclarer cette variable (et les autres) hors de ta boucle, car avec un register_global à on, je te laisse imaginer la grosse faille que cela peut engendrer.