Affichage tableau à 2 dimensions (Catégories et Produits)
Résolu
rogers75017
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
rogers75017 Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
rogers75017 Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je m'arrache les cheveux pour afficher un tableau.
J'aimerai qu'il soit classé par catégories, et que les catégories ne s'affichent que si un produits de cette catégorie est choisi.
Le tableau initial est complété depuis une base de donnée, dont voici le code choix produits.php :
Je récupère le formulaire sur la page confirm.php avec le code suivant :
J'aimerai que les différentes catégories n'apparaissent qu'une seule fois, et uniquement si un produit de la catégorie est choisi.
Je pense qu'il faudrait réaliser 2 boucles imbriquées (dans confirm.php, en remplacement), une pour afficher les catégories qui contiennent des produits sélectionnés dans le précédent tableau, et une seconde boucle pour afficher les produits eux-mêmes...
SAUF QUE JE NE SAIS PAS FAIRE CA ! :-(
Un sauveur, ici ???? :-))))
Je m'arrache les cheveux pour afficher un tableau.
J'aimerai qu'il soit classé par catégories, et que les catégories ne s'affichent que si un produits de cette catégorie est choisi.
Le tableau initial est complété depuis une base de donnée, dont voici le code choix produits.php :
<form method="post" action="founitures_recap.php"> <div id="tableau"> <table width="100%"> <thead> <tr> <th scope="col">DOCUMENTS</th> <th scope="col">APERÇU</th> <th scope="col">CONDITIONNEMENT</th> <th scope="col">MAXI<br>AUTORISÉ</th> <th scope="col">QUANTITÉ<br>SOUHAITÉE</th> </tr> </thead> <tbody> <?php $nbr_cat = 0; //incrémente le nbr de catégories $nbr_fourni = 0; //incrémente le nbr de fournitures //On selectionne les categories while ($cat = mysql_fetch_array($fournitures_cat)) { echo '<tr > <td colspan="5" class="fbleuclair" align="center">'.$cat['nom_fournit_cat'].'</td> </tr >'; //On selectionne les fournitures de la categorie en cours $fournitures_liste_cat = mysql_query("SELECT * FROM fournitures_liste WHERE id_f_cat='".$cat['id_f_cat']."' AND online_f = 'on' ORDER BY id_f_cat ASC"); while($contenu = mysql_fetch_array($fournitures_liste_cat)) { ?> <tr > <th scope="row" class="fblanc" align="left"><?php echo $contenu['nom_fournit']?></th> <th scope="row" class="fblanc" align="center"><a href=""><img src="../images_fournitures/petites/<?php echo $contenu['image_f']?>" style="border: 1px solid #CCCCCC;"></a> </th> <th scope="row" class="fblanc" align="center"><?php echo $contenu['condit_f']?></th> <th scope="row" class="forangeclair" align="center"><?php echo $contenu['max_cde_f']?></th> <th scope="row" class="fvert" align="center"> <input name="qte_<?php echo $nbr_fourni ?>" type=text class="inptableautext" value=""> </th> </tr> </tbody> <input type ="hidden" name ="nom_fournit_<?php echo $nbr_fourni ?>" value =" <?php echo $contenu['nom_fournit'] ?>"> <input type ="hidden" name ="image_f_<?php echo $nbr_fourni ?>" value =" <?php echo $contenu['image_f'] ?>"> <input type ="hidden" name ="condit_f_<?php echo $nbr_fourni ?>" value =" <?php echo $contenu['condit_f'] ?>"> <input type ="hidden" name ="max_cde_f_<?php echo $nbr_fourni ?>" value =" <?php echo $contenu['max_cde_f'] ?>"> <input type="hidden" name="catqt_<?php echo $nbr_fourni ?>" value="<?php echo $nbr_cat;?>"> <input type="hidden" name="categorie<?php echo $nbr_cat ?>" value="<?php echo $cat['nom_fournit_cat'];?>"> <?php $nbr_fourni++; } $nbr_cat++; } ?> </table> <input type="hidden" name="nbr_cat" value="<?php echo $nbr_cat;?>"> <input type="hidden" name="nbr_fourni" value="<?php echo $nbr_fourni;?>"> <p align="center"><input type="submit" id="valider" name="submit_achat_fournitures" value=""></p> </form>
Je récupère le formulaire sur la page confirm.php avec le code suivant :
<form method="post" action="<?php $_SERVER['PHP_SELF'] ?> "> <div id="tableau"> <table width="100%"> <thead> <tr> <th scope="col">DOCUMENTS</th> <th scope="col">APERÇU</th> <th scope="col">CONDITIONNEMENT</th> <th scope="col">MAXI<br>AUTORISÉ</th> <th scope="col">QUANTITÉ<br>SOUHAITÉE</th> </tr> </thead> <?php $nbr_cat = $_POST['nbr_cat']; $nbr_fourni = $_POST['nbr_fourni']; for ($nf=0; $nf < $nbr_fourni;$nf++) { $cat_info[$nf] = array ( $catqt = $_POST['catqt_'.$nf], $nom_categorie = $_POST['nom_categorie_'.$nf], $nom_fournit = $_POST['nom_fournit_'.$nf], $image_f = $_POST['image_f_'.$nf], $condit_f = $_POST['condit_f_'.$nf], $max_cde_f = $_POST['max_cde_f_'.$nf], $qte = $_POST['qte_'.$nf]); if ($qte <> '' ){ echo '<tr><td colspan="5" class="fbleuclair" align="center">'.$nom_categorie.'</td></tr >'; echo '<tr><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th></tr>'; } } ?> </table> <p align="center"> <input type="submit" id="modifier" name="submit_modif_fournitures" value=""> <input type="submit" id="confirmer" name="submit_confirm_fournitures" value=""> </p> </div> </form>
J'aimerai que les différentes catégories n'apparaissent qu'une seule fois, et uniquement si un produit de la catégorie est choisi.
Je pense qu'il faudrait réaliser 2 boucles imbriquées (dans confirm.php, en remplacement), une pour afficher les catégories qui contiennent des produits sélectionnés dans le précédent tableau, et une seconde boucle pour afficher les produits eux-mêmes...
SAUF QUE JE NE SAIS PAS FAIRE CA ! :-(
Un sauveur, ici ???? :-))))
A voir également:
- Affichage tableau à 2 dimensions (Catégories et Produits)
- Tableau word - Guide
- Ryanair produits interdits en cabine - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Tableau ascii - Guide
- Trier un tableau excel - Guide
12 réponses
salut, une solution, je n'ai pas testé il peut y avaoir des fautes de frappe, des oublis de ) ou autre:
<form method="post" action="founitures_recap.php"> <div id="tableau"> <table width="100%"> <thead> <tr> <th scope="col">DOCUMENTS</th> <th scope="col">APERÇU</th> <th scope="col">CONDITIONNEMENT</th> <th scope="col">MAXI<br>AUTORISÉ</th> <th scope="col">QUANTITÉ<br>SOUHAITÉE</th> </tr> </thead> <tbody> <?php //On selectionne les categories while ($cat = mysql_fetch_array($fournitures_cat)) { echo '<tr > <td colspan="5" class="fbleuclair" align="center">'.$cat['nom_fournit_cat'].'</td> </tr >'; //On selectionne les fournitures de la categorie en cours $fournitures_liste_cat = mysql_query("SELECT * FROM fournitures_liste WHERE id_f_cat='".$cat['id_f_cat']."' AND online_f = 'on' ORDER BY id_f_cat ASC"); while($contenu = mysql_fetch_array($fournitures_liste_cat)) { ?> <tr > <th scope="row" class="fblanc" align="left"><?php echo $contenu['nom_fournit']?></th> <th scope="row" class="fblanc" align="center"><a href=""><img src="../images_fournitures/petites/<?php echo $contenu['image_f']?>" style="border: 1px solid #CCCCCC;"></a> </th> <th scope="row" class="fblanc" align="center"><?php echo $contenu['condit_f']?></th> <th scope="row" class="forangeclair" align="center"><?php echo $contenu['max_cde_f']?></th> <th scope="row" class="fvert" align="center"> <?php //on va mettre a l'input un name de la forme qte[][] echo '<input name="qte['.$cat['nom_fournit_cat'].']['.$contenu['nom_fournit'].']" type=text class="inptableautext" value="" /> '; ?> </th> </tr> <?php //idem pour les name des chanps cachés echo ' <input type ="hidden" name ="nom_fournit_<?php echo $nbr_fourni ?>" value ="'.$contenu['nom_fournit'].'" />'; echo '<input type ="hidden" name ="image_f['.$cat['nom_fournit_cat'].']['.$contenu['nom_fournit'].']" value ="'.$contenu['image_f'].'" />'; echo '<input type ="hidden" name ="condit_f['.$cat['nom_fournit_cat'].']['.$contenu['nom_fournit'].']" value ="'.$contenu['condit_f'].'" /> '; echo ' <input type ="hidden" name ="max_cde_f['.$cat['nom_fournit_cat'].']['.$contenu['nom_fournit'].']" value ="'.$contenu['max_cde_f'].'" />'; } } ?> </tbody> </table> <p align="center"><input type="submit" id="valider" name="submit_achat_fournitures" value="Valider" /></p> </form> Je récupère le formulaire sur la page confirm.php avec le code suivant : <form method="post" action="<?php $_SERVER['PHP_SELF'] ?> "> <div id="tableau"> <table width="100%"> <thead> <tr> <th scope="col">DOCUMENTS</th> <th scope="col">APERÇU</th> <th scope="col">CONDITIONNEMENT</th> <th scope="col">MAXI<br>AUTORISÉ</th> <th scope="col">QUANTITÉ<br>SOUHAITÉE</th> </tr> </thead> <?php //comme on a mis le name de l'input de la forme qte[cat][fourniture] //on recupère $_POST['qte'] sous la forme d'un array à deux dimensions contenant uniquement les valeurs rentrées //idem pour les champs cachés //il suffit parcourir l'array et de n'afficher que les cat ayant des fournitures if(sizeof($_POST['qte'])>0){ foreach($_POST['qte'] as $cat=>$fournitures){ //$cat est l'index premiere dimension de l'array, $fournitures est l'array deuxieme dimension //il faut afficher la cat que si il y a des fourniture donc seulement si taille de l'array $founitures >0 if(sizeof($fournitures)>0){ //on affiche la cat echo '<tr><td colspan="5" class="fbleuclair" align="center">'.$cat.'</td></tr >'; //on affiche les fournitures en parcourant l'array $fournitures //et en utilisant les index de cet array pour lire les array des champs cachés foreach($fournitures as $fourniture=>$value){ $nom_fournit = $_POST['nom_fourni'][$cat][$fourniture]; $image_f = $_POST['image_f'][$cat][$fourniture]; $condit_f = $_POST['condit_f'][$cat][$fourniture]; $max_cde_f = $_POST['max_cde_f'f][$cat][$fourniture]; $qte = $value; echo '<tr><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th></tr>'; } } } } ?> </table> <p align="center"> <input type="submit" id="modifier" name="submit_modif_fournitures" value="Modifier" /> <input type="submit" id="confirmer" name="submit_confirm_fournitures" value="Confirmer /"> </p> </div> </form>
Merci pour cet espoir :-)
Depuis maintenant 4 jours, je m'acharne là-dessus sans vraiment me reposer... mais j'y pige absolument rien à ces boucles :-(
Je teste de suite :-))))))))
Depuis maintenant 4 jours, je m'acharne là-dessus sans vraiment me reposer... mais j'y pige absolument rien à ces boucles :-(
Je teste de suite :-))))))))
Whouaou...
Merci d'avoir pris le temps de vérifier mon code, c'est hyper sympa :-)
Les commentaires que tu as rajouté reflètent la nature même du problème et la solution pour y remédier...
Mais ça ne fonctionne pas, snifffff :-(
Je me retrouve avec un tableau comportant toutes les catégories, et autant de lignes (vides) qu'il y a de produits dans chaque catégorie sans tenir compte de la valeur de l'input "qte".
Le principe que tu m'as donné est surement la marche à suivre (je ne connaissais pas "sizeof"). Je vais parcourir le code voir s'il n'y a pas quelques petites erreurs qui se seraient glissées :-)
Merci d'avoir pris le temps de vérifier mon code, c'est hyper sympa :-)
Les commentaires que tu as rajouté reflètent la nature même du problème et la solution pour y remédier...
Mais ça ne fonctionne pas, snifffff :-(
Je me retrouve avec un tableau comportant toutes les catégories, et autant de lignes (vides) qu'il y a de produits dans chaque catégorie sans tenir compte de la valeur de l'input "qte".
Le principe que tu m'as donné est surement la marche à suivre (je ne connaissais pas "sizeof"). Je vais parcourir le code voir s'il n'y a pas quelques petites erreurs qui se seraient glissées :-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Une petite erreur de frappe qui faisait que les lignes produits étaient vides :
Il manquait un "t" à "$_POST['nom_fournit'][$cat][$fourniture];
Sauf qu'il ne tient toujours pas compte de la qte et affiche tout le tableau.
Ca progresse :-)
$nom_fournit = $_POST['nom_fournit'][$cat][$fourniture];
Il manquait un "t" à "$_POST['nom_fournit'][$cat][$fourniture];
Sauf qu'il ne tient toujours pas compte de la qte et affiche tout le tableau.
Ca progresse :-)
Lorsque je fais un écho du sizeof($_POST['qte']), il me donne toujours la valeur "6" (qui correspond en fait au nombre de catégories) quel que soit le nombre de produits choisis, 0 ou plusieurs...
Je continue de creuser (et de ramer, lol).
Je continue de creuser (et de ramer, lol).
Merci Alain-42,
La page choix produits.php telle que tu l'a modifié est ok.
Il fallait effectivement associer aux input les valeurs "catégories" et "produits".
C'était ma première erreur.
Sauf que je n'arrive toujours pas à obtenir un tableau Catégories/Produits, à savoir n'afficher la catégorie que si un produit est commandé, et afficher le ou les produis commandés sous la catégorie concernée.
Bon, je lâche un peu pour ce soir, mais preneur de toutes idées :-(
La page choix produits.php telle que tu l'a modifié est ok.
Il fallait effectivement associer aux input les valeurs "catégories" et "produits".
C'était ma première erreur.
Sauf que je n'arrive toujours pas à obtenir un tableau Catégories/Produits, à savoir n'afficher la catégorie que si un produit est commandé, et afficher le ou les produis commandés sous la catégorie concernée.
Bon, je lâche un peu pour ce soir, mais preneur de toutes idées :-(
bonsoir,
au début de la page confirm.php
mets:
tu auras un aperçu de l'array que tu reçiot
au début de la page confirm.php
mets:
<?php echo '<pre>'; print_r($_POST['qte']; echo '</pre>'; ?>
tu auras un aperçu de l'array que tu reçiot
Bonsoir Alain,
Effectivement, j'ai déjà testé le contenu de $_POST['qte'] avec un print_r.
$_POST['qte'] contient bien la catégorie, le produit et la quantité (grace à ton intervention) mais je n'arrive pas à comprendre la condition
Effectivement, j'ai déjà testé le contenu de $_POST['qte'] avec un print_r.
$_POST['qte'] contient bien la catégorie, le produit et la quantité (grace à ton intervention) mais je n'arrive pas à comprendre la condition
if(sizeof($_POST['qte']) > 0){puisque sizeof($_POST['qte'] devrait déterminer l'affichage du tableau (si je suis bien le raisonnement), mais donne toujours 6 comme résultat, qu'on choisisse ou pas des produits.
Bien sûr... aucun problème.
Voici ce que ça donne :
J'ai 6 catégories et 46 produits au total. Comme tu peux le voir, j'ai indiqué 5 ex sur le dernier produit (Jeu des 7 familles) dans l'input qte.
En fait, la variable $_POST['qte'] est nickel.
C'est le traitement qui suit qui me chagrine :-(
Voici ce que ça donne :
Array ( [documents administratifs] => Array ( [Charte des droits et libertés de la personne accueillie] => [Courrier explicatif du prélèvement automatique] => [Autorisation de Prélèvement] => [Affiche Carte vitale] => [Livret d'accueil unique SSR et EHPAD] => [Contrat d'engagement contre la douleur (SSR)] => [Dossier de vie sociale « Aloïs »] => [Support service Accompagnant] => [Affiche service Accompagnant] => [Carnet de fiche contact] => [Documentation établissement (plaquette commerciale)] => [Plaquette régionale Poitou-Charentes] => [Plaquette régionale Ile-de-France] => [Papier Paie] => [Papier Entête] => [Carte correspondance résidence] => ) [documents de soins et médicaux] => Array ( [Registre des Stupéfiants] => [Fiches de distribution Médicaments] => [Registre de Chutes (établissements n'ayant pas Mediris)] => [Registre de contention] => [Questionnaire Médical d'entrée] => [Armoire à pharmacie] => ) [certification de service et documents service juridique] => Array ( [Affiche « Charte des engagements de service » EHPAD] => [Affiche « Charte des engagements de service » Sanitaire] => [Affiche « Charte des droits et libertés »] => [Brochure droit des résidents en EHPAD] => [Classeur Bonnes Pratiques] => ) [cadeau de bienvenue] => Array ( [Parfum FRAGONARD Cerisier (Femme)] => [Parfum FRAGONARD Cologne (Homme)] => ) [divers] => Array ( [Carnet de commande] => [Carnet Demande Intervention Technique] => [Livret d'accueil Salariés + dépliants handicapés + incendie] => [Gestion des risques dans nos éts : définitions et outils] => [Badges] => [Plaque 'Interdiction de fumer'] => [Carnets de 100 Tickets Repas du personnel] => ) [outils] => Array ( [Cartographie des Déchets] => [Quiz Savoir Vivre - Savoir être en Sanitaire et médico-social] => [Quiz S'entraîner à la Bienveillance en Ets Sanitaire] => [Quiz gérantologique] => [Jeu des 7 familles] => 5 ) )
J'ai 6 catégories et 46 produits au total. Comme tu peux le voir, j'ai indiqué 5 ex sur le dernier produit (Jeu des 7 familles) dans l'input qte.
En fait, la variable $_POST['qte'] est nickel.
C'est le traitement qui suit qui me chagrine :-(
ok, je pensait que seuls les index de l'array contenant une valeur étaient postés
essaies comme ça:
essaies comme ça:
page confirm.php avec le code suivant : <form method="post" action="<?php $_SERVER['PHP_SELF'] ?> "> <div id="tableau"> <table width="100%"> <thead> <tr> <th scope="col">DOCUMENTS</th> <th scope="col">APERÇU</th> <th scope="col">CONDITIONNEMENT</th> <th scope="col">MAXI<br>AUTORISÉ</th> <th scope="col">QUANTITÉ<br>SOUHAITÉE</th> </tr> </thead> <?php //comme on a mis le name de l'input de la forme qte[cat][fourniture] //on recupère $_POST['qte'] sous la forme d'un array à deux dimensions contenant uniquement les valeurs rentrées //idem pour les champs cachés //il suffit parcourir l'array et de n'afficher que les cat ayant des fournitures if(sizeof($_POST['qte'])>0){ foreach($_POST['qte'] as $cat=>$fournitures){ //$cat est l'index premiere dimension de l'array, $fournitures est l'array deuxieme dimension //il faut afficher la cat que si il y a des fourniture donc seulement si la somme des valeurs est supérieure à 0 if(array_sum($fournitures)>0){ //on affiche la cat echo '<tr><td colspan="5" class="fbleuclair" align="center">'.$cat.'</td></tr >'; //on affiche les fournitures en parcourant l'array $fournitures //et en utilisant les index de cet array pour lire les array des champs cachés foreach($fournitures as $fourniture=>$value){ if($value>0){ $nom_fournit = $_POST['nom_fournit'][$cat][$fourniture]; $image_f = $_POST['image_f'][$cat][$fourniture]; $condit_f = $_POST['condit_f'][$cat][$fourniture]; $max_cde_f = $_POST['max_cde_f'f][$cat][$fourniture]; $qte = $value; echo '<tr><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th><th scope="col">'.$nom_fournit.'</th></tr>'; } } } } } ?> </table> <p align="center"> <input type="submit" id="modifier" name="submit_modif_fournitures" value="Modifier" /> <input type="submit" id="confirmer" name="submit_confirm_fournitures" value="Confirmer /"> </p> </div> </form>
:-)))))))))))))))))))))))))))))))))))))))))))))))))))))
Ca maaaaaaaaarche, bon sang de bon sang !!!!!!!!!!
Bon, on se calme, j'ai vu qu'il y avait un petit souci quand on commande certains produits mais ça ne doit pas être trop grave.
Pfffffffffff !!!!!
Merci des milliards de fois :-)))))))))))))))
Ca maaaaaaaaarche, bon sang de bon sang !!!!!!!!!!
Bon, on se calme, j'ai vu qu'il y avait un petit souci quand on commande certains produits mais ça ne doit pas être trop grave.
Pfffffffffff !!!!!
Merci des milliards de fois :-)))))))))))))))
Finalement, j'ai pas pu résisté et j'ai testé.
Certains noms de produits contenaient des doubles quotes, d'où quelques problèmes dans le tableau !
Mais ta correction est top de top.
Encore merci de t'être penché sur mon problème, c'est vraiment sympa.
J'espère pouvoir rendre le même service de temps en temps aux autres développeurs "en herbe" qui galèrent comme moi.
Je marque le post en RESOLUUUUUUUUUUU :-)
Bonne semaine :-)
Certains noms de produits contenaient des doubles quotes, d'où quelques problèmes dans le tableau !
Mais ta correction est top de top.
Encore merci de t'être penché sur mon problème, c'est vraiment sympa.
J'espère pouvoir rendre le même service de temps en temps aux autres développeurs "en herbe" qui galèrent comme moi.
Je marque le post en RESOLUUUUUUUUUUU :-)
Bonne semaine :-)