Page 1 sur 2

[RESOLU]Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 12:55
par sbi016
Bonjour Messieur,

Voila mon PB
J'ai une table SQL et je souhaite afficher à partir d'une liste déroulante toutes les infos concernant le choix fait dans cette liste déroulante,

Voici mon code :
<?php
/* Database connection */  
include("fsacars/connect_db.php");
/* Select all vols */
echo"<form name='vols' action=",$_SERVER['PHP_SELF']," method='POST'>"; 
echo '<select name="Plane">';

$resultat = mysql_query("select Plane from vols GROUP BY Plane order by Num_vol") or die ("Requête non executée.");
while ($ligne=mysql_fetch_array($resultat))
{
echo '<option>'.$ligne["Plane"].'</option>';
}
echo '</select>';
echo '<input type="submit" value="Afficher" name="go">';
echo '</form>';
$_GET['Plane']=$ligne["Plane"];
$Appareil = $_POST ['Plane']; 

echo "<table>
                <tr>
                        <td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>N° DE VOL</b></font></td>
                        <td bgcolor=#87B5E2 width=80 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>APPAREIL</b></font></td>
                        <td bgcolor=#87B5E2 width=90 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>ICAO DEPART</b></font></td>
                        <td bgcolor=#87B5E2 width=90 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>ICAO ARRIVEE</b></font></td>
                        <td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>DISTANCE</b></font></td>
                        <td bgcolor=#87B5E2 width=80 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>POIDS</b></font></td>
                        </tr>";
				        
                echo '<tr>
                                 <td width="70" height="12" align="left"><font face="Arial" size="2" color="#FFFFFF"> '.$ligne['Num_vol'].'</font></td>
                                 <td width="80" height="12" align="left"><font face="Arial" size="2" color="#FFFFFF">'.$Appareil.'</font></td>
                                 <td width="90" height="12" align="center"><font face="Arial" size="2" color="#FFFFFF">'.$ligne['Icao_dep'].'</font></td>
                                 <td width="90" height="12" align="right"><font face="Arial" size="2" color="#FFFFFF">'.$ligne['Icao_arr'].'</font></td>
                                 <td width="70" height="12" align="right"><font face="Arial" size="2" color="#FFFFFF">'.$ligne['Distance'].'</font></td>
                                 <td width="80" height="12" align="right"><font face="Arial" size="2" color="#FFFFFF">'.$ligne['Poids'].'</font></td>
                                
                        </tr>' ;
                   
echo "</table>";

mysql_close();
Mon soucis est que je n'arrives pas à afficher les résultats ( il n'y a qu'une info qui s'affiche )
Voici le lien : http://www.siberiavirtual.fr/cargo/testvols.php

Merci d'avance

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 13:04
par sylvaing26
Normal, une fois que tu as posté ta requete n'est plus bonne puisque tu ne selectionne que les modèles d'avions
$resultat = mysql_query("select Plane from vols GROUP BY Plane order by Num_vol") or die ("Requête non executée.");
Il faut que tu fasse une deuxième requete qui va chercher les infos specifique à ton entrée du genre
$plane = $ligne['Plane'];
$resultat2 = mysql_query("select Num_vol, Plane, Depart, Arrivee, distance, poids from vols WHERE Plane='$plane'") or die ("Requête non executée.");

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 14:50
par Aureusms
Utilises aussi mysql_fetch_assoc() au lieu de mysql_fetch_array() cela ira plus vite dans ton cas.

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 15:06
par sbi016
Merci à vous 2 de me répondre,

Mais je ne sais pas trop ou mettre cette nouvelle requete, car la y plus rien
Lien : http://www.siberiavirtual.fr/cargo/testvols.php

Mon code :
echo"<form name='vols' action=",$_SERVER['PHP_SELF']," method='POST'>"; 
echo '<select name="Plane">';
$resultat = mysql_query("select Plane from vols GROUP BY Plane order by Num_vol") or die ("Requête non executée.");
$Appareil = $ligne['Plane'];
$resultat2 = mysql_query("select Num_vol, Plane, Depart, Arrivee, distance, poids from vols WHERE Plane='$Appareil'GROUP BY Plane order by Num_vol") or die ("Requête non executée.");

while ($ligne=mysql_fetch_assoc($resultat))
while ($ligne=mysql_fetch_assoc($resultat2))
{
echo '<option>'.$ligne["Plane"].'</option>';
}
echo '</select>';
echo '<input type="submit" value="Afficher" name="go">';
echo '</form>';
$_GET['Plane']=$ligne["Plane"];
$Appareil = $_POST ['Plane'];
Encore merci de votre aide

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 15:18
par Aureusms
Simplifie un peu l'écriture : Tu as imbriquée deux requetes sans décompiler la première :
Tes requêtes te donne ceci : à toi de choisir.
<?php
$tableau_ligne = array();
$resultat = mysql_query("select Plane from vols GROUP BY Plane order by Num_vol") or die ("Requête non executée.");
while ($resultat = mysql_fetch_row($resultat_sql))
{
  $tableau_ligne[] = $resultat[0];
}


if (is_array($tableau_ligne) && !empty($tableau_ligne))
{
  $i = 0;
  foreach ($tableau_ligne as $Appareil)
  {
    $resultat_sql = mysql_query("select Num_vol, Plane, Depart, Arrivee, distance, poids from vols WHERE Plane='$Appareil' GROUP BY Plane order by Num_vol") or die ("Requête non executée.");    
    $tableau2[$i] = array();
    while ($resultat = mysql_fetch_row($resultat_sql))
    {
      $tableau2[$i][] = array ("Num_vol" => $resultat[0], "Plane" => $resultat[1], "Depart"=> $resultat[2], "Arrivee"=> $resultat[3], "Distance"=> $resultat[4], "poids"=> $resultat[5]);
    }
   $i++;
  }
}



foreach ($tableau_ligne as $valeur)
{
echo $valeur.'<br />';
}
echo "ou <br />";
foreach ($tableau2 as $tab_temp)
  foreach ($tab_temp as $cle => $valeur)
  {
  echo $cle." = ".$valeur.'<br />';
  }
}?>
Edit: je me suis trompé : petite correction de code .

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 15:34
par sbi016
Salut à toi,

Mais la je suis trop bleu en dev pour comprendre ce que tu me demande de faire
Et j'en suis très désolé

Merci

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 16:19
par Aureusms
Bon pas de problème...
On a tous débuter un jour ou l'autre... (en plus en me relisant j'étais pas très clair)

Ce que je t'ai indiqué :
Tu interroges une première fois ta base avec :
"select Plane from vols GROUP BY Plane order by Num_vol"

Il te retourne un tableau (cela s'apelle une pile SQL) avec tous les "plane".
On stocke cette pile dans un tableau $tableau_ligne; (ici : $tableau_ligne[] = $resultat[0];)

Ensuite on interroge toute les entrées de $tableau_ligne[] grâce à foreach et on refait un requete sur la même table :
"select Num_vol, Plane, Depart, Arrivee, distance, poids from vols WHERE Plane='$Appareil' GROUP BY Plane order by Num_vol"
on obtient une nouvelle pile SQL contenant ainsi les num_vol, Icao_dep, Icao_arr, distance, poids pour chaque appareil.

Ensuite tu peux choisir comment afficher. Si j'ai bein compris tu veux afficher après un choix selon la liste déroulante.
Il faut donc décomposer ton code (c'est ce que je voulais t'indiquer mais maladroitement).
<?php
if (!isset($_POST["plane"] or empty($_POST["plane"]))
{
	$tableau_ligne = array();
	$resultat = mysql_query("select Plane from vols GROUP BY Plane order by Num_vol") or die ("Requête non executée.");
	while ($resultat = mysql_fetch_row($resultat_sql))
	{
	  $tableau_ligne[] = $resultat[0];
	}
	?>
	<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
		<select name="plane">
			<?php
			foreach ($tableau_ligne $as $valeur)
			{
				echo "<option>".$valeur."</option>";
			}
			?>
		</select>
	</form>
	<?php
}
else
{
	$Appareil = addslashes($_POST['plane']);
	$requete = "SELECT Num_vol, Icao_dep, Icao_arr, distance, poids from vols 
				WHERE Plane='".$Appareil."'
				GROUP BY Plane order by Num_vol";
	$resultat_sql = mysql_query($requete) or die ("Requête non executée.");
	
	if (mysql_num_rows($resultat_sql) == 0)
		echo "pas de résultat";
	else
	{ ?>


		<table>
			<tr>
				<td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>N° DE VOL</b></font></td>
				<td bgcolor=#87B5E2 width=80 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>APPAREIL</b></font></td>
				<td bgcolor=#87B5E2 width=90 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>ICAO DEPART</b></font></td>
				<td bgcolor=#87B5E2 width=90 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>ICAO ARRIVEE</b></font></td>
				<td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>DISTANCE</b></font></td>
				<td bgcolor=#87B5E2 width=80 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>POIDS</b></font></td>
			</tr>
		<?php
		$debut_td = '<td width="70" height="12" align="left"><font face="Arial" size="2" color="#FFFFFF">';
		$fin_td = '</font></td>';
		while ($ligne = mysql_fetch_assoc($resultat_sql))
		{			
			?>									   
			<tr>
					 <?php 
					 echo $debut_td.$ligne['Num_vol'].$fin_td;
					 echo $debut_td.$Appareil.$fin_td;
					 echo $debut_td.$ligne['Icao_dep'].$fin_td;
					 echo $debut_td.$ligne['Icao_arr'].$fin_td;
					 echo $debut_td.$ligne['Distance'].$fin_td;
					 echo $debut_td.$ligne['Poids'].$fin_td;
					 ?>			   
			</tr>
			<?php
		}
		?>					   
		</table>
		
		<?php
	} 
}
mysql_close();
?>
ce code devrait fonctionner. (Pour m'excuser de ne pas avoir été très clair)

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 16:35
par sbi016
Merci Aureusms

J'ai copié ton code, mais il me fait une erreur (Parse error: syntax error, unexpected T_LOGICAL_OR, expecting ',' or ')) à la ligne 25

C'est à dire à cette ligne de code :
if (!isset($_POST["plane"] or empty($_POST["plane"])))
J' ai mieux compris ce que tu m'as expliqué tout de fois

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 16:49
par fab
tu as mal replacé la paranthèse manquante :p

remplace
if (!isset($_POST["plane"] or empty($_POST["plane"])))
par
if (!isset($_POST["plane"]) or empty($_POST["plane"]))

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 16:56
par sbi016
Merci Fab

Mais toujours un autre PB
Parse error: syntax error, unexpected T_VARIABLE in ligne 38
C'est à dire au début du formulaire
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
Je ne sais pas, mais j'utilise Notepad++, et je trouve qu'il y a beaucoups d'ouvertures et de fermeture php ?

Je nage

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 18:38
par Aureusms
T'inquiètes pas pour les ouvertures et fermeture PHP, le moteur les gères très bien...
As tu mis le même code que je t'ai donné (corrigé). Car la ligne
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
n'a pas d'erreur ...

Et si tu mets rien, pour essayer :
<form action="ee" method="post">

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 19:01
par sbi016
Non c'etait une erreur de ma part, c'est bon

Mais il s'arrete à la ligne
while ($resultat = mysql_fetch_row($resultat_sql))
Avec l'erreur suivante : Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 20:29
par fab
Dans ce cas c'est que ta requete ne renvoie aucun enregistrement pour ça qu'il faut TOUJOURS testé avec le while :) Execute là dans phpmyadmin pour vérifier et pour éviter ça dans ton code regarde du côté de la fonction mysql_num_rows()

Re: Affichage Avec Liste Déroulante

Posté : 06 nov. 2009, 21:11
par dunbar
Non c'etait une erreur de ma part, c'est bon

Mais il s'arrete à la ligne
while ($resultat = mysql_fetch_row($resultat_sql))
Avec l'erreur suivante : Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource
A mon avis comme ceci cela fonctionnera mieux :wink:
while ($resultat_sql = mysql_fetch_row($resultat))

Re: Affichage Avec Liste Déroulante

Posté : 07 nov. 2009, 07:51
par sbi016
Bonjour Messieurs

Oui Dunbar, je n'ai plus de messages d'erreur cette fois ci,

Mais les résultats, be y en a pas :
http://www.siberiavirtual.fr/cargo/testvols1.php

La je pige pas du tout..........