formulaire à deux menus déroulants lié à 2 tables

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 : formulaire à deux menus déroulants lié à 2 tables

par eric269 » 04 août 2005, 07:51

:D et aussi un tout grand merci à l'ami ouckileou :D

par ouckileou » 01 août 2005, 08:41

j'aime écrire pour rien :roll: :lol:

par eric269 » 01 août 2005, 07:11

Merci à Fabian pour son aide
<?
// --> connect à la BD, CSS et compagnie
session_start();
include("include/config.php");
include("include/fonctions.php");?>
<table><tr><td>
<?
// <!-- Lors du premier appel, il n y a rien à récupérer : c'est pour cela qu'il est préférable de tester l existance du post.-->
$VilleDepartSelect = (isset($_POST['PostDepart']))?$_POST['PostDepart']:null; 
$VilleArriveeSelect =  (isset($_POST['PostArrivee']))?$_POST['PostArrivee']:null; 
echo $VilleDepartSelect;
echo $VilleArriveeSelect;
?>
<!-- On déclare l'action (Merci à ouckileou) Bon ça donne rien -->
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 
<!--C'est util pour savoir quelle page il faut appeler. Ici c'est la même page quíl faut appeler.  -->
   <table><tr>
            <td>Ville de Départ</td>
            <td>Ville d'Arrivée</td>
          </tr>
          <tr><td>
<select name="PostDepart" value="<? echo $VilleDepartSelect ; ?>">    
<option selected>Ville de Départ</option>

<?   // --> Création de la liste du menu déroulant "départ"
      $choix_depart = mysql_query("SELECT * FROM destination");
      while ($array_depart = mysql_fetch_array($choix_depart))
          {
            $type_depart = $array_depart["ville"];    
            echo "<OPTION VALUE=\"$type_depart\">$type_depart";
          }
?>
              </select>
              </td><td>
<select name="PostArrivee" value="<? echo $VilleArriveeSelect ; ?>">
<option selected>Ville d'Arrivée</option>

  <?    // --> Création de la liste du menu déroulant "arrivée"
          $choix_arrivee = mysql_query("SELECT * FROM destination");
        while ($array_arrivee = mysql_fetch_array($choix_arrivee))
          {
            $type_arrivee = $array_arrivee["ville"]; 
            echo "<OPTION VALUE=\"$type_arrivee\">$type_arrivee";
          }
  ?>
              </select>
              </td></tr>
          <tr>
            <td align="center" valign="top">
            <input type="submit" value="Afficher" align="center">
            </td>
          </tr>
        </table>      
</form>
<?
// --> Titre du tableau en html
echo "</td></tr><tr><td align=center><table><tr>" ;
echo "<td align=center>Vol</td>" ;                        
echo "<td align=center>De</td>" ;
echo "<td align=center>Vers</td>" ;
echo "</tr>" ;
// --> on sélectionne les départs ET arrivées de la table engine apparenté aux choix du formulaire
$Resultat = mysql_query("SELECT * FROM engine WHERE depart = '$VilleDepartSelect' AND arrivee = '$VilleArriveeSelect'"); 
$NombreEnregistrement = mysql_numrows($Resultat);
// --> Affichage de tous les résultats
for ($Compteur = 0 ; $Compteur < $NombreEnregistrement ; $Compteur ++)
{
  echo "<tr>";
  echo "<td align=\"center\">";
  echo mysql_result($Resultat , $Compteur , "vols");
  echo "</td>";
  echo "<td align=\"center\">";
  echo mysql_result($Resultat , $Compteur , "depart"); 
  echo "</td>";
  echo "<td align=\"center\">";
  echo mysql_result($Resultat , $Compteur , "arrivee");
  echo "</td>";
  echo "</tr>";
}
// Hé bien, ça marche maintenant !
?>
   </td>
  </tr>
</table>

par ouckileou » 30 juil. 2005, 13:25

moi je vois déjà un problème : tes select s'appellent "depart" et "arrivee" et tu récupères "type_depart" et "type_arrivee"

par eric269 » 30 juil. 2005, 09:20

Merci à toi ô ouckileou,
malheureusement, je crois que je ne suis pas doué pour un tel script.
J'ai remis des annotations dans mon script, histoire de m'y retrouver moi-même :
<?
// --> connect à la BD, CSS et compagnie
session_start();
include("include/config.php");
include("include/fonctions.php");?>
<table align=center><tr><td>
<?  
    // --> on sélectionne les départs ET arrivées choisis dans la table engine pour le formulaire
	$q = mysql_query("SELECT * FROM engine WHERE depart = '$type_depart' AND arrivee = '$type_arrivee'");
	$r = mysql_fetch_array($q);
?>
  <!-- On déclare l'action (Merci à ouckileou) Bon ça donne rien -->
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
   <table><tr> 
            <td>Ville de Départ</td>
			<td>Ville d'Arrivée</td>
          </tr>
          <tr><td>
<select name="depart" value="<? echo $type_depart ;
								// --> Ca, ça marche ?>">
 <option selected>Ville de Départ</option>
 
 <?   // --> Création de la liste du menu déroulant "départ"
	  $choix_depart = mysql_query("SELECT * FROM destination");
	  while ($array_depart = mysql_fetch_array($choix_depart))
		  {
			$type_depart = $array_depart["ville"];
			echo "<OPTION VALUE=\"$type_depart\">$type_depart";
		  }
 ?>
              </select>
			  </td><td>
<select name="arrivee" value="<? echo $type_arrivee ; ?>">
 <option selected>Ville d'Arrivée</option>
 
  <?    // --> Création de la liste du menu déroulant "arrivée"
	  	$choix_arrivee = mysql_query("SELECT * FROM destination");
		while ($array_arrivee = mysql_fetch_array($choix_arrivee))
		  {
			$type_arrivee = $array_arrivee["ville"];
			echo "<OPTION VALUE=\"$type_arrivee\">$type_arrivee";
		  }
  ?>
              </select>
			  </td></tr>
          <tr> 
            <td height="34" colspan="7" align="center" valign="top">
			<input type="submit" value="Afficher" align="center">
			</td>
          </tr>
        </table>	  
</form>
<?
$r["$type_depart"] = $_POST['type_depart'];
$r["type_arrivee"] = $_POST['type_arrivee'];

echo $r["$type_depart"];
echo $r["$type_arrivee"];

// --> Si départ et arrivée choisit, afficher le tableau de résultat
if ($array_depart = $r['type_depart'] && $array_arrivee = $r['type_arrivee'])
{
// --> Titre du tableau en html
echo "</td></tr><tr><td align=center><table><tr>" ;
echo "<td align=center>Vol</td>" ;                        
echo "<td align=center>De</td>" ;
echo "<td align=center>Vers</td>" ;
echo "</tr>" ;
// --> on sélectionne les départs ET arrivées de la table engine apparenté aux choix du formulaire
$Resultat = mysql_query("SELECT * FROM engine WHERE depart = '$type_depart' AND arrivee = '$type_arrivee'");
$NombreEnregistrement = mysql_numrows($Resultat); 
// --> Affichage de tout les résultat
    for ($Compteur = 0 ; $Compteur < $NombreEnregistrement ; $Compteur ++)
    {
     echo "<tr>";
     echo "<td align=\"center\">";
     echo mysql_result($Resultat , $Compteur , "vols");
     echo "</td>";
     echo "<td align=\"center\">";
     echo mysql_result($Resultat , $Compteur , $r['type_depart']);
	 echo "</td>";
	 echo "<td align=\"center\">";
     echo mysql_result($Resultat , $Compteur , $r['type_arrivee']);
     echo "</td>";
     echo "</tr>";
    }
}
// Hé bien, ça marche pas !
?>
   </td>
  </tr>
</table>
Je crois que je vais scinder le script en morceau, histoire de voir par étape d'où viens le problème.
Merci

par ouckileou » 29 juil. 2005, 13:08

vérifie tout d'abord que tu récupères bien les valeurs des deux listes déroulantes, on récupère les valeurs d'un formulaire en $_POST comme ceci
$depart = $_POST['depart'];
ou encore mieux, un petit test pour voir si elle existe, sinon on la met à null
$depart = (isset($_POST['depart']))?$_POST['depart']:null;
fais un echo de ces deux variables, en haut de ton script, tu verras si tu les récupères bien

maintenant pour ton formulaire :
enctype="multipart/form-data"
on met ça quand on veut envoyer un fichier, je ne crois pas que ce soit le cas ici
 ACTION=<? echo "j'en sait plus rien !!!"
ça m'étonnerais que ça marche ça ;)
met ici le nom du script, tu peux faire comme ça
action="<?php echo $_SERVER['PHP_SELF']; ?>"
cette variable contient le nom du script courant, donc même si tu renomme ton fichier le code fonctionnera toujours

par eric269 » 29 juil. 2005, 12:57

Ben j'en suis au point suivant :
la page m'affiche :
____________________________

Ville de Départ Ville d'Arrivée
+-------------+-+ +-------------+-+
| selection |V| | selection |V|
+-------------+-+ +-------------+-+
+---------+
| GO |
+---------+

N° de VOL DE VERS

af 120 paris nice
____________________________

elle m'affiche la dernière ligne de la table 1 "Destination" et ne prend pas en compte le choix des menu déroulant.
Bon j'ai mis l'entonnoir sur ma tête et je continue de chercher.
Merci de votre aide.

par ouckileou » 29 juil. 2005, 12:49

tu en es où ? (je sais que tu as mis le code mais bon...)
est-ce qu'il y a un problème précis, une erreur ?
ou est-ce que plus généralement tu as des problèmes pour mettre en place le truc ?

formulaire à deux menus déroulants lié à 2 tables

par eric269 » 29 juil. 2005, 12:00

Hello à tous et toutes,
je me prend la tête sur un formulaire à deux menus déroulants,
chacun relié à la même table d'oû les choix respectifs de ces 2 menus déroulants renseigne une recherche dans une autre table.
Explication :
__________________________________________________

Table 1 (destination) -> 2 champs

+---+-----------+
| ID | VILLE |
+---+-----------+
| 1 | paris |
+---+-----------+
| 2 | berlin |
+---+-----------+
| 3 | nice |
+---+-----------+

etc ...
__________________________________________________

Table 2 (engine) -> n champs

+----+---------+-----------+------------+
| ID | VOL | DEPART | ARRIVEE |
+----+---------+-----------+------------+
| 1 | af 120 | paris | nice |
+----+---------+-----------+------------+
| 2 | af 121 | nice | berlin |
+----+---------+-----------+------------+
| 3 | af 122 | paris | berlin |
+----+---------+-----------+------------+

etc ...
__________________________________________________

Le but du jeu est d'avoir 2 menus déroulants (départ et arrivée)
qui renseigne leur choix automatiquement en consultant la Table 1 (destination) grâce à
<?
	  $choix_depart = mysql_query("SELECT * FROM destination");
	  while ($array_depart = mysql_fetch_array($choix_depart))
		  {
			$type_depart = $array_depart["ville"];
			echo "<OPTION VALUE=\"$type_depart\">$type_depart";
		  }
	d'autres villes seront ajoutées et on ne peut donc pas les inscrire dans "<option value>"
 ?>
_________________________________________________

Et qui retrouve dans la Table 2 (engine) les infos correspondantes par rapport aux colones "depart" et "arrivée"

Au final, on obtient ceci :
__________________________________________________

Ville de Départ Ville d'Arrivée
+-------------+-+ +-------------+-+
| selection |V| | selection |V|
+-------------+-+ +-------------+-+
+---------+
| GO |
+---------+
__________________________________________________

puis en ayant choisi les deux ville ('paris' et 'nice'), on obtient :
__________________________________________________

Ville de Départ Ville d'Arrivée
+-------------+-+ +-------------+-+
| selection |V| | selection |V|
+-------------+-+ +-------------+-+
+---------+
| GO |
+---------+

N° de VOL DE VERS

af 120 paris nice
__________________________________________________

Voila, j'y arrive pas ; je suis sur le point de mettre un entonnoir sur ma tête.
J'en suis là :
__________________________________________________

Code : Tout sélectionner

[php]<? // connect à la BD, CSS et compagnie session_start(); include("include/config.php"); include("include/fonctions.php");?> <table align=center><tr> <td> <? $q = mysql_query("SELECT * FROM engine WHERE depart = '$type_depart' AND arrivee = '$type_arrivee'"); $r = mysql_fetch_array($q); ?> <form enctype="multipart/form-data" ACTION=<? echo "j'en sait plus rien !!!";?> method="POST"> <input type="hidden" name="Afficher" value="<? echo "$r"; ?>"> <table><tr> <td>Ville de Départ</td> <td>Ville d'Arrivée</td> </tr> <tr><td> <select name="depart" value="<? echo $type_depart ; ?>"> <option selected>Ville de Départ</option> <? $choix_depart = mysql_query("SELECT * FROM destination"); while ($array_depart = mysql_fetch_array($choix_depart)) { $type_depart = $array_depart["ville"]; echo "<OPTION VALUE=\"$type_depart\">$type_depart"; } ?> </select> </td><td> <select name="arrivee" value="<? echo $type_arrivee ; ?>"> <option selected>Ville d'Arrivée</option> <? $choix_arrivee = mysql_query("SELECT * FROM destination"); while ($array_arrivee = mysql_fetch_array($choix_arrivee)) { $type_arrivee = $array_arrivee["ville"]; echo "<OPTION VALUE=\"$type_arrivee\">$type_arrivee"; } ?> </select> </td></tr> <tr> <td height="34" colspan="7" align="center" valign="top"> <input type="submit" value="Afficher" align="center"> </td> </tr> </table> </form> <? if ($array_depart["ville"] = "$type_depart" && $array_arrivee["ville"] = "$type_arrivee") { echo "</td></tr><tr><td align=center><table><tr>" ; echo "<td align=center>Vol</td>" ; echo "<td align=center>De</td>" ; echo "<td align=center>Vers</td>" ; echo "</tr>" ; $Resultat = mysql_query("SELECT * FROM engine WHERE depart = '$type_depart' AND arrivee = '$type_arrivee'"); $NombreEnregistrement = mysql_numrows($Resultat); for ($Compteur = 0 ; $Compteur < $NombreEnregistrement ; $Compteur ++) { echo "<tr>"; echo "<td align=\"center\">"; echo mysql_result($Resultat , $Compteur , "vols"); echo "</td>"; echo "<td align=\"center\">"; echo mysql_result($Resultat , $Compteur , "depart"); echo "</td>"; echo "<td align=\"center\">"; echo mysql_result($Resultat , $Compteur , "arrivee"); echo "</td>"; echo "</tr>"; } } ?>[/php] [code] __________________________________________________ Je marrie celui ou celle qui pourra m'aider ou me montrer un script similaire. Merci A+ PS c'est bizarre les couleurs, j'y arrive pas toujours!