Pour Trier mes données dans un tableau

Eléphanteau du PHP | 18 Messages

21 mai 2008, 15:25

Bonjour,
Je me permets de poster ici pour avoir quelques lumières.
Je souhaite présenter dans un tableau les commandes en cours.
Avec le fournisseur, la référence du produit, l'année ...

L'affichage est ok, j'arrive aussi a afficher le nom / prenom du client en fonction de son id (chose sur laquelle j'ai bloqué un petit moment (novice inside).

Maintenant je souhaite ajouter des options de tri à mon tableau.
1. n'afficher que les commandes du fournisseur X, avec une liste déroulante, ca c'est ok.
Par contre quand je souhaite trier et par fournisseur et par année, les choses se compliquent.

Voici pour moi l'algorythmique de la chose.
Si le fournisseur est défini
{
je test les variables pour vérifier.
requete sql de selection des commandes avec le fournisseur x.
}
ET SI Année est définie
{
je test les variables pour vérifier.
requete sql de selection des commandes avec le fournisseur x ET l'année X
}
Sinon
{
Afficher le choix de l'année
}
FinSi

Sinon
{
je montre la liste déroulante pour qu'on puisse choisir le fournisseur
}
FIN
Voici mon code pour le formulaire de départ :

Code : Tout sélectionner

<link href="../../style.css" rel="stylesheet" type="text/css" /> <form action="?action=commande_consulter_1" method="post" onSubmit="return checkrequired(this)"> <table align="left"> <tr> <td class="colone_b Style1"></td> <td class="colone_a Style1">Consultation / Recherche Cmdes. <input type="text" name="Mot" size="15"> <input type="submit" value="Rechercher" alt="Lancer la recherche!"> <br> <br> <?php //////////////////////////////////////////////////////////////// // définir le jour en cours. $jour = date('Y-m-d'); //////////////////////////////////////////////////////////////// // sélectionner les rdv. $totalcmde=mysql_query('SELECT COUNT(*) AS total FROM commandes WHERE statut="" '); $donnees_totalcmde=mysql_fetch_assoc($totalcmde); $totalcmde=$donnees_totalcmde['total']; echo 'TOTAL DES COMMANDES EN COURS : '.$totalcmde.'<br>'; /* fonction pour les commandes terminées */ $totallivree=mysql_query('SELECT COUNT(*) AS total FROM commandes WHERE statut="livre" '); $donnees_totallivree=mysql_fetch_assoc($totallivree); $totallivree=$donnees_totallivree['total']; echo 'Commandes livrées : '.$totallivree.'<br>'; echo '------------------------------<br>'; echo 'Actions : <br>'; echo '<a href="clients.php?action=consulter_rdv&condition=cejour">Afficher les commandes terminées / livrée </a><br>'; echo '<a href="clients.php?action=consulter_rdv&condition=cejour">Afficher les commandes qui doivent arriver </a><br>'; /////////////////////////////////////////////// // Fonction d'affichage de tous les rendezvous /////////////////////////////////////////////// if (isset($_POST['id'])) afficher_rdv($_POST['id']); $retour_total=mysql_query('SELECT COUNT(*) AS total FROM commandes'); $donnees_total=mysql_fetch_assoc($retour_total); $total=$donnees_total['total']; $messagesParPage=10; $nombreDePages=ceil($total/$messagesParPage); if(isset($_GET['page'])) // Si la variable $_GET['page'] existe... { $pageActuelle=intval($_GET['page']); if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages... { $pageActuelle=$nombreDePages; } } else // Sinon { $pageActuelle=1; // La page actuelle est la n°1 } //Fonction de calcul pour la pagination. $premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire //Listing des conditions // if ((empty($_GET["condition"]))) { $select = ' SELECT commandes.id, commandes.idfournisseur, commandes.idannee, commandes.refproduit, commandes.type, commandes.taille, commandes.couleur, commandes.accessoires, commandes.informations, commandes.datelivraison, commandes.collaborateur, commandes.magasin, commandes.motif, commandes.idclient, commandes.datecommande FROM commandes ORDER BY id ASC LIMIT '.$premiereEntree.', '.$messagesParPage.''; $result = mysql_query($select) or die ('Erreur : '.mysql_error() ); $total = mysql_num_rows($result); echo ''; //INNER JOIN clients ON rdv_date.client = clients.id } ?> <hr /> <br> Options de Tri pour les Commandes : <br><br> <form action="commande_consulter_1.php" method="post"> 1. Sélectionner le fournisseur. <? /* 1. Sélectionner le fournisseur. */ echo '<select name="fournisseur">'; mysql_select_db('gestion',$db); $SQL = "SELECT id,nom FROM fournisseur"; $res = mysql_query($SQL); while($val=mysql_fetch_array($res)) { echo "<option value=".$val["id"].">".$val["nom"]."</option>\n"; } echo '</select>'; echo '<input type="submit" Value="Trier"><br>'; ?> 2. Sélectionner l'année<br> 3. Sélectionner la référence.<br> 4. Sélectionner la taille.<br> 5. Sélectionner le coloris.<br> 6. Sélectionner le type.<br> <br> <br> <? /* Fonction de Tri pour le tableau */ /* 2. Sélectionner l'année< */ /* 3. Sélectionner la référence.< */ /* 4. Sélectionner la taille. */ /* 5. Sélectionner le coloris.< */ /* 6. Sélectionner le type.< */ /* Fin de la fonction de recherche des commandes. */ // si on a récupéré un résultat on l'affiche. if($total) { // debut du tableau echo '<table width="100%" class="client" border="0" cellspacing="0" cellpadding="0">'."\n"; // première ligne on affiche les titres prénom et surnom dans 2 colonnes echo '<tr class="toprow">'; echo '<td class="toprow"><b><u>N° Cmde </u><br></td>'; echo '<td class="toprow"><b><u>Fournisseur</u></b> - </td>'; echo '<td class="toprow"><b><u>Référence</u></b> - </td>'; echo '<td class="toprow"><b><u>Taille</u></b> - </td>'; echo '<td class="toprow"><b><u>Type</u></b> - </td>'; echo '<td class="toprow"><b><u>Couleur</u></b> - </td>'; echo '<td class="toprow"><b><u>Le Client</u></b> - </td>'; echo '<td class="toprow"><b><u>Date Cmde</u></b> - </td>'; echo '<td class="toprow"><b><u>Date Livraison</u></b> - </td>'; echo '<td class="toprow"><b><u>Magasin</u></b> - </td>'; echo '<td class="toprow"><b><u>Modifier</u></b> - </td>'; echo '<td class="toprow"><b><u>Consulter</u></b> - </td>'; echo '</tr>'."\n"; // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne. while($row = mysql_fetch_array($result)) { /* Requete pour la sélection des données clients dans la table Client suivant IdCLIENT de la table commande */ $client2=mysql_query('SELECT nom, prenom, nomm FROM clients WHERE id='.$row['idclient'].' ;') or die('<span style="color:#F00;">Erreur lors d\'une requette MYSQL !<br /> <img src="imgs/messagebox_critical.png" alt="ERREUR" /> l\'erreur s\'est produite à la ligne : <u>'.__LINE__.'</u>, dans le fichier <u>"'. __FILE__.'"</u>.</span><br />'.mysql_error()); $infoclient=mysql_fetch_array($client2); /* FIN */ /* Requete pour la sélection des données clients dans la table Client suivant IdCLIENT de la table commande */ $fournisseur=mysql_query('SELECT nom FROM fournisseur WHERE id='.$row['idfournisseur'].' ;') or die('<span style="color:#F00;">Erreur lors d\'une requette MYSQL !<br /> <img src="imgs/messagebox_critical.png" alt="ERREUR" /> l\'erreur s\'est produite à la ligne : <u>'.__LINE__.'</u>, dans le fichier <u>"'. __FILE__.'"</u>.</span><br />'.mysql_error()); $infofournisseur=mysql_fetch_array($fournisseur); /* FIN */ /* Les Données du Tableau */ echo '<tr>'; echo '<td class="leftcol"><div class="intro">'.$row["id"].'</div></td>'; echo '<td class="data"><div class="intro">'.$infofournisseur["nom"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["refproduit"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["taille"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["type"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["couleur"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["idclient"].'-- '.$infoclient["nom"].' --'.$infoclient["prenom"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["datecommande"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["datelivraison"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["magasin"].'</div></td>'; //LIENS echo '<td class="data"><div class="intro"><a href="clients.php?action=consulter_rdv_details&id='.$row["id"].'">Modifier</a></div></td>'; echo '<td class="data"><div class="intro"><a href="clients.php?action=consulter_rdv_details&id='.$row["id"].'">Consulter</a></div></td>'; echo '</tr>'."\n"; } } echo '</table>'."\n"; echo '' . $total .' Commandes sur cette page sur un total de ' .$totalcmde.' Commandes'; // fin du tableau. echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle { //On va faire notre condition if($i==$pageActuelle) //Si il s'agit de la page actuelle... { echo ' [ '.$i.' ] '; } else //Sinon... { echo ' <a href="commandes.php?action=commande_consulter&page='.$i.'">'.$i.'</a> '; } } echo '</p>'; // on libère le résultat mysql_free_result($result); ?> </td> </tr> <tr> <td></td> </form>
Et le formulaire qui va traiter avec l'année, la référence produit ...

Code : Tout sélectionner

<? /*Récupération des anciennes fonctions de la page pour le tri ET la pagination. */ //////////////////////////////////////////////////////////////// // définir le jour en cours. $jour = date('Y-m-d'); //////////////////////////////////////////////////////////////// // sélectionner les rdv. $totalcmde=mysql_query('SELECT COUNT(*) AS total FROM commandes WHERE statut="" '); $donnees_totalcmde=mysql_fetch_assoc($totalcmde); $totalcmde=$donnees_totalcmde['total']; echo 'TOTAL DES COMMANDES EN COURS : '.$totalcmde.'<br>'; /* fonction pour les commandes terminées */ $totallivree=mysql_query('SELECT COUNT(*) AS total FROM commandes WHERE statut="livre" '); $donnees_totallivree=mysql_fetch_assoc($totallivree); $totallivree=$donnees_totallivree['total']; echo 'Commandes livrées : '.$totallivree.'<br>'; echo '------------------------------<br>'; echo 'Actions : <br>'; /////////////////////////////////////////////// // Fonction d'affichage de tous les rendezvous /////////////////////////////////////////////// if (isset($_POST['id'])) afficher_rdv($_POST['id']); $retour_total=mysql_query('SELECT COUNT(*) AS total FROM commandes'); $donnees_total=mysql_fetch_assoc($retour_total); $total=$donnees_total['total']; $messagesParPage=10; $nombreDePages=ceil($total/$messagesParPage); if(isset($_GET['page'])) // Si la variable $_GET['page'] existe... { $pageActuelle=intval($_GET['page']); if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages... { $pageActuelle=$nombreDePages; } } else // Sinon { $pageActuelle=1; // La page actuelle est la n°1 } //Fonction de calcul pour la pagination. $premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire /* Fin du Code qui ne changera pas*/ ////////////////////////////////////////// ///////////////////////////////////////// /* FONCTIONS DE TRIAGE */ /////////////////////////////////////// ////////////////////////////////////// if (isset($_POST['fournisseur'])) { /* Fournisseur définie */ echo 'fournisseur défini <br> Donc il faut choisir l annee Svp'; ////////////////////// /* Test des Variables Fournies par le formulaire*/ echo '<br>Id fournisseur : '; echo '' .$_POST['fournisseur']. '<br>'; $fournisseur = $_POST['fournisseur']; echo '<br>$fournisseur = '; echo $fournisseur; echo '<br>'; ////////////////////// /* requete SQL avec le fournisseur */ $select = ' SELECT commandes.id, commandes.idfournisseur, commandes.idannee, commandes.refproduit, commandes.type, commandes.taille, commandes.couleur, commandes.accessoires, commandes.informations, commandes.datelivraison, commandes.collaborateur, commandes.magasin, commandes.motif, commandes.idclient, commandes.datecommande FROM commandes WHERE commandes.idfournisseur = '.$fournisseur.' ORDER BY id ASC LIMIT '.$premiereEntree.', '.$messagesParPage.''; $result = mysql_query($select) or die ('Erreur : '.mysql_error() ); $total = mysql_num_rows($result); echo 'Tri par Fournisseur'; ////////////////////// /* ANNEE */ if (isset($_POST['annee'])) { /* Fournisseur définie */ echo 'Année déja définie, sélectionnez donc la référence produit'; /* TEST VARIABLE FRS */ echo '<br>test variable fournisseur si l annee est definie. '; echo $fournisseur; ////////////////////// /* Test des Variables Fournies par le formulaire*/ echo '<br>Id ANNEE : '; echo '' .$_POST['annee']. '<br>'; $annee = $_POST['annee']; echo '<br>$annee = '; echo $annee; echo '<br>'; $fournisseur =''; ////////////////////// /* requete SQL avec le fournisseur */ $select = ' SELECT commandes.id, commandes.idfournisseur, commandes.idannee, commandes.refproduit, commandes.type, commandes.taille, commandes.couleur, commandes.accessoires, commandes.informations, commandes.datelivraison, commandes.collaborateur, commandes.magasin, commandes.motif, commandes.idclient, commandes.datecommande FROM commandes WHERE commandes.idfournisseur = '.$fournisseur.' WHERE commandes.idannee = '.$fournisseur.' ORDER BY id ASC LIMIT '.$premiereEntree.', '.$messagesParPage.''; $result = mysql_query($select) or die ('Erreur : '.mysql_error() ); $total = mysql_num_rows($result); echo 'Tri par Fournisseur ET par Annee'; //////////////////////FIN REQUETE } else { /* TEST VARIABLE FRS */ echo '<br>test variable fournisseur avant l envoi du formulaire avec l annee. '; echo $fournisseur; /* Afficher la liste déroulante avec la liste des annees */ echo '<form action="commandes.php?action=commande_consulter_1" method="post">'; echo "<div align='left'>2. Sélectionnez l'annee "; /* 1. Sélectionner le l'annee. */ /* le fournisseur na pas été sélectionné donc on affiche le formulaire */ echo '<select name="annee">'; mysql_select_db('gestion',$db); $SQL = "SELECT id,annee from ANNEE"; $res = mysql_query($SQL); while($val=mysql_fetch_array($res)) { echo "<option value=".$val["id"].">".$val["annee"]."</option>\n"; } echo '</select>'; echo '<input type="submit" Value="Trier"><br></form>'; } /* FIN ANNEE */ } else { /* Afficher la liste déroulante avec la liste des fournisseurs */ echo "<div align='left'>1. Sélectionner le fournisseur "; /* 1. Sélectionner le fournisseur. */ /* le fournisseur na pas été sélectionné donc on affiche le formulaire */ echo '<select name="fournisseur">'; mysql_select_db('gestion',$db); $SQL = "SELECT id,nom FROM fournisseur"; $res = mysql_query($SQL); while($val=mysql_fetch_array($res)) { echo "<option value=".$val["id"].">".$val["nom"]."</option>\n"; } echo '</select>'; echo '<input type="submit" Value="Trier"><br></form>'; } /*FIN FOURNISSEUR */ ///////////////////////////////////// /* test des variables recues */ /* echo 'annee : '; echo $annee; echo '<br> fournisseur : '; echo $fournisseur; */ ////////////////////////////////////////// ///////////////////////////////////////// /* FONCTIONS TABLO */ /////////////////////////////////////// ////////////////////////////////////// // si on a récupéré un résultat on l'affiche dans un tableau if($total) { // debut du tableau echo '<table width="100%" class="client" border="0" cellspacing="0" cellpadding="0">'."\n"; // première ligne on affiche les titres prénom et surnom dans 2 colonnes echo '<tr class="toprow">'; echo '<td class="toprow"><b><u>N° Cmde </u><br></td>'; echo '<td class="toprow"><b><u>Fournisseur</u></b> - </td>'; echo '<td class="toprow"><b><u>Référence</u></b> - </td>'; echo '<td class="toprow"><b><u>Taille</u></b> - </td>'; echo '<td class="toprow"><b><u>Type</u></b> - </td>'; echo '<td class="toprow"><b><u>Couleur</u></b> - </td>'; echo '<td class="toprow"><b><u>Le Client</u></b> - </td>'; echo '<td class="toprow"><b><u>Date Cmde</u></b> - </td>'; echo '<td class="toprow"><b><u>Date Livraison</u></b> - </td>'; echo '<td class="toprow"><b><u>Magasin</u></b> - </td>'; echo '<td class="toprow"><b><u>Modifier</u></b> - </td>'; echo '<td class="toprow"><b><u>Consulter</u></b> - </td>'; echo '</tr>'."\n"; // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne. while($row = mysql_fetch_array($result)) { /* Requete pour la sélection des données clients dans la table Client suivant IdCLIENT de la table commande */ $client2=mysql_query('SELECT nom, prenom, nomm FROM clients WHERE id='.$row['idclient'].' ;') or die('<span style="color:#F00;">Erreur lors d\'une requette MYSQL !<br /> <img src="imgs/messagebox_critical.png" alt="ERREUR" /> l\'erreur s\'est produite à la ligne : <u>'.__LINE__.'</u>, dans le fichier <u>"'. __FILE__.'"</u>.</span><br />'.mysql_error()); $infoclient=mysql_fetch_array($client2); /* FIN */ /* Requete pour la sélection des données clients dans la table Client suivant IdCLIENT de la table commande */ $fournisseur=mysql_query('SELECT nom FROM fournisseur WHERE id='.$row['idfournisseur'].' ;') or die('<span style="color:#F00;">Erreur lors d\'une requette MYSQL !<br /> <img src="imgs/messagebox_critical.png" alt="ERREUR" /> l\'erreur s\'est produite à la ligne : <u>'.__LINE__.'</u>, dans le fichier <u>"'. __FILE__.'"</u>.</span><br />'.mysql_error()); $infofournisseur=mysql_fetch_array($fournisseur); /* FIN */ /* Les Données du Tableau */ echo '<tr>'; echo '<td class="leftcol"><div class="intro">'.$row["id"].'</div></td>'; echo '<td class="data"><div class="intro">'.$infofournisseur["nom"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["refproduit"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["taille"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["type"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["couleur"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["idclient"].'-- '.$infoclient["nom"].' --'.$infoclient["prenom"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["datecommande"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["datelivraison"].'</div></td>'; echo '<td class="data"><div class="intro">'.$row["magasin"].'</div></td>'; //LIENS echo '<td class="data"><div class="intro"><a href="clients.php?action=consulter_rdv_details&id='.$row["id"].'">Modifier</a></div></td>'; echo '<td class="data"><div class="intro"><a href="clients.php?action=consulter_rdv_details&id='.$row["id"].'">Consulter</a></div></td>'; echo '</tr>'."\n"; } } echo '</table>'."\n"; echo '' . $total .' Commandes sur cette page sur un total de ' .$totalcmde.' Commandes'; // fin du tableau. echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle { //On va faire notre condition if($i==$pageActuelle) //Si il s'agit de la page actuelle... { echo ' [ '.$i.' ] '; } else //Sinon... { echo ' <a href="commandes.php?action=commande_consulter&page='.$i.'">'.$i.'</a> '; } } echo '</p>'; // on libère le résultat mysql_free_result($result); ?>

Lorsque je sélectionnée l'énnae et que je clic pour trier j'ai ceci :

Code : Tout sélectionner

Notice: Undefined variable: result in c:\program files\easyphp1-8\www\application\require\actions\commande_consulter_1.php on line 243 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\application\require\actions\commande_consulter_1.php on line 243 Notice: Undefined variable: result in c:\program files\easyphp1-8\www\application\require\actions\commande_consulter_1.php on line 316 Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\application\require\actions\commande_consulter_1.php on line 316


Si quelqu'un avait une idée pour m'aider ca serai super sympa.
Merci d'avance pour votre aide.

Plex

Mammouth du PHP | 1353 Messages

21 mai 2008, 15:35

Ton message d'erreur t'explique que la variable $result n'existe pas alors que tu l'utilise (dans commande_consulter_1.php)

Si on regarde ton code tu définis $result dans une condition, un if... si tu ne rentres pas dans ce if => $result n'existe pas et pourtant tu l'utlise.

Fais attention de n'utiliser cette variable QUE si elle existe.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 18 Messages

21 mai 2008, 15:49

guilt92 merci pour ta réponse.
je comprends bien ce que tu veux dire,
mais je ne comprends ou est ce que ca ne marche pas dans mon code :(

tu pourrais préciser s'il te plait ?
merci encore.

Mammouth du PHP | 1353 Messages

21 mai 2008, 16:04

Exemple de ton code :
//Listing des conditions // 
if ((empty($_GET["condition"]))) 
   { 
	//...
	$result = mysql_query($select) or die ('Erreur : '.mysql_error() ); 
    //...
   } 

while($row = mysql_fetch_array($result)) 
    {
    //... 
	}
donc tu peux essayer de faire le mysql_fetch_array($result) alors que $result n'existe pas, ce qui va forcement planter et générer le message d'erreur que tu vois.

Tu as deux solutions : soit tu étends le if soit tu entoures ton while de la même condition que celle qui t'as fait créer $result, comme ca tu es sur que si tu rentres la 1ere fois tu rentres aussi la deuxieme donc $result existera... Sinon tu peux aussi tester l'existence de $result avant d'entrer dans la boucle avec la fonction isset()

Solution 1 :
//Listing des conditions // 
if ((empty($_GET["condition"]))) 
   { 
	//...
	$result = mysql_query($select) or die ('Erreur : '.mysql_error() ); 
    //...

while($row = mysql_fetch_array($result)) 
    {
    //... 
	}   
} //fin du if
Solution 2 :
//Listing des conditions // 
if ((empty($_GET["condition"]))) 
   { 
	//...
	$result = mysql_query($select) or die ('Erreur : '.mysql_error() ); 
    //...
   } 
//...

if ((empty($_GET["condition"]))) //ou if(isset($result))
{
while($row = mysql_fetch_array($result)) 
    {
    //... 
	}
}
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 18 Messages

21 mai 2008, 16:47

Merci encore guilt92 pour ton aide.
Par contre étant plutot novice, j'ai du mal a bien comprendre ce qui cloche :s
Je suis désolé de t'embété avec ca et d'insister mais je suis vraiement novice

Est ce que c'est la partie du tableau ?
Ou alors est ce que ce sont les conditions de tri ?

Ca doit plus etre l'affichage du tableau d'apres ce que tu me dis.

Je suis complètement pommé ayant retourné le problème dans tous les sens avant de poster ici.
J'ai l'impression de ne plus rien comprendre.
Pourrais tu s'il te plait préciser ?

Merci encore. :oops: :oops: