IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Php/Sql/Html Tableau en 3 colonnes ( Remplissage en colonne et non en ligne ) [SQL-Server]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Par défaut Php/Sql/Html Tableau en 3 colonnes ( Remplissage en colonne et non en ligne )
    Bonjour à tous et à toutes,

    Apres 3 jours de recherche, de test et autres, je me refuge sur le forum afin de solliciter votre aide !

    Avant de commencer je suis autodidacte donc un peu d'indulgence

    Bref venons-en à mes moutons.

    Mon problème vous semblera surement simple :

    Je souhaite avoir un tableau de ce type :

    Cat. 5 | Cat. 6 | Cat. 7

    __5__|__ 6__|__7___

    __5__|_vide_|__7___

    _vide_|_vide_|__7__

    C'est un exemple de remplissage.

    Le résultat de ma requête est aléatoire, cela peut être array (5,5,7,6,5,6,7) ou array( 7,6,6,5,7) ect ect

    Le plus important c'est que dans la catégorie 5 , il n'y figure que les chiffres 5 ect ect .

    Je voudrais seulement qu'on me donne des indices sur comment procéder dans l'affichage des données de ma requêtes en tableau HTML.

    J'ai essayer de trier mon tableau directement ( ksort() ) pour simplifier la mise en page du tableau HTML.

    Mais je ne sais pas je bloque, je dois surement me compliquer la vie :'(

    voici un bout de ma requête SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $req =$bdd->query('SELECT id_support,tp.id_t_oeuvre,o.titre_oeuvre, i.nom_image
                                    FROM oeuvre o
                                    LEFT JOIN type_oeuvre tp ON tp.id_oeuvre = o.id_oeuvre
                                    LEFT JOIN affiche a ON a.id_t_oeuvre = tp.id_t_oeuvre
                                    LEFT JOIN images i ON i.id_images = a.id_images
                                    WHERE tp.id_support IN (6,5,7)
                                    ORDER BY id_support ASC                
                                    ');
    Coté php pour récupérer mes données dans un tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while($resultat = $req->fetch(PDO::FETCH_ASSOC))
    {
     
        $tab[] = $resultat;                    
     
     
    }$req->closeCursor();
    Et le résultat de ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Array
    (
        [0] => Array
            (
                [id_support] => 5
                [id_t_oeuvre] => 116
                [titre_oeuvre] => A Voir Au Cine
                [nom_image] => Default.png
            )
     
        [1] => Array
            (
                [id_support] => 5
                [id_t_oeuvre] => 117
                [titre_oeuvre] => Livre A Lire
                [nom_image] => Default.png
            )
     
        [2] => Array
            (
                [id_support] => 6
                [id_t_oeuvre] => 107
                [titre_oeuvre] => Test
                [nom_image] => Default.png
            )
     
        [3] => Array
            (
                [id_support] => 7
                [id_t_oeuvre] => 114
                [titre_oeuvre] => Bibu
                [nom_image] => Default.png
            )
     
    )
    Donc d'apres mes codes ci-dessus, le tableau HTML donnerai cela :


    A voir au ciné (5) | Séries a ne pas manquer (6) | Livre a lire (7)
    ----------------------------------------------------------------------------
    "Avoir au cine" (id5)| "Test "(id6)| "Bibu"(id7)
    "Livre a lire" (id5) | ---vide-------|---vide-----

    J'ai fait plusieurs test d'insertion dans mon tableau HTML ( boucle while, for, foreach, tableau a une dimension , deux dimensions )

    soit ça dépasse le cadre ( la troisième colonne donc mais ca c’est parce que je n'ai pas du faire correctement mon for qui delimite a 3 ), soit et c'est habituel je le sais, ça rempli en "ligne" moi j'aimerai que mon tableau se remplisse par colonne et c'est ce qui m'importe le plus.

    En espérant que mon post soit claire et que vous pourriez m'aider a contrario de certain forum où on m’envoie bouler

    Merci d'avance de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- et que penses-tu de créer des tableaux à UNE SEULE colonne, accolés les uns aux autres ?
    C'est la solution la plus simple et rapide, non ?

    2- Sinon, je pense que c'est faisable, mais là, il faut y réfléchir....
    Avant de créer le tableau lui-même, il faut mettre en forme et structurer les données.

    2a- Avec, par exemple, un array $cells, rempli par :
    • où $col est la "catégorie" (qui définira la colonne), et $val la valeur à afficher.
    • A NOTER : [] (crochets vides) pour incrémenter automatiquement l'array.


    2b- Donc, au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($resultat = $req->fetch(PDO::FETCH_ASSOC))
    {
        $tab[] = $resultat;
    }
    écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $cells = []; // array
    while($resultat = $req->fetch(PDO::FETCH_ASSOC))
    {
        $cells[$resultat['id_support']][] = $resultat;
    }
    Remarque : pour afficher le nom de la catégorie (au lieu de l'id_support), il faudrait récupérer "tp.nom_support" dans la requête.

    2c- Puis, pour définir le nombre de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $nbre_lignes = 0;
    foreach( $cells as $cell )
    {
    	$nbre_lignes = max( $nbre_lignes, count($cell) );
    }
    var_dump( $nbre_lignes ) ;
    2d- Enfin, le tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <table>
     <thead>
    	<tr>
    <?php // titre des colonnes
    foreach( $cells as $id_support => $cell )
    {
    	echo '<th>Catégorie '.$id_support.'</th>';
    }
    ?>
    	</tr>
     </thead>
     <tbody>
    <?php // nom des colonnes
    for($ligne=0; $ligne < $nbre_lignes; $ligne++ )
    {
    	echo '	<tr>'."\n";
    	foreach( $cells as $cell )
    	{
    		echo '		<td>'."\n";
    		if( !empty($cell[$ligne]) )
    		{
    			// contenu de la cellule : on met ce qu'on veut !
    			echo $cell[$ligne]['id_t_oeuvre'].' - '.$cell[$ligne]['titre_oeuvre'];
    			echo '<br />'.$cell[$ligne]['nom_image'];
    		}
    		echo '		</td>'."\n";
    	}
    	echo '	</tr>'."\n";
    }
    ?>
     </tbody>
    </table>
    Dernière modification par Invité ; 16/05/2019 à 10h41.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Par défaut
    Bonjour

    Merci beaucoup pour ta proposition, c'est super ! je vais tester ça dans la journée et te tiens au courant !

    Pour la solution numéro une, j'y avais pensé mais je trouvais cela peut être trop " sale" niveau code non ?
    Mais vu que tu me le proposes c'est que mon idée n'était pas si bête !

    Car les tableaux ... c'est assez fastidieux a comprendre je trouve ^^

  4. #4
    Invité
    Invité(e)
    Par défaut
    Non, ce n'est pas "sale"...

    Au contraire, c'est très simple à faire.
    Le seul bémol serait "esthétique", au niveau de l'affichage (car, en fonction de leur contenu, les cellules ne seraient pas forcément alignées).


    N.B. On peut aussi "masquer" les cellules vides avec :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    table {empty-cells:hide; }


    [EDIT] Oups... "les tableaux...." :
    j'ai pensé <table>, mais tu voulais sans doute dire "array" (tableau PHP) : alors OUI, ce n'est pas évident au début.

    Et il ne faut pas hésiter à utiliser var_dump() pour voir ce qu'il contient.
    Et il existe de très nombreuses fonctions PHP natives sur les array.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Par défaut
    Oui je parlais des array() ^^ j'aurai du préciser !
    Je vais tester dans un premier temps ta deuxième solution, si je galère trop, je reviendrais sur la première
    Et oui pour le site PHP, j'y vais très souvent pour essayer de trouver des solutions par moi-même, mais j'avoue que je flanche un peu .. je suis pas du genre à poster sur les forum mais la j'avais besoin d'aide ^^

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Par défaut
    C'est super ! la deuxième solution fonctionne à merveille !
    Je suis dégoûtée j'y était presque pourtant il y a quelques jours ! car j'avais aussi fait un tableau à deux dimensions mais ..
    Je n'avais pas du tout pensée à prendre en compte les clés des array() n'importe quoi moi .... j'était trop focalisée sur des calculs improbable , bref ...

    En tout cas c'est trop top ! Merci beaucoup pour ta rapidité et tes explications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insérer un ou plusieurs fichiers php/sql/html
    Par tiph3164 dans le forum PHP & Base de données
    Réponses: 50
    Dernier message: 02/03/2017, 14h34
  2. [CDD/CDI] rennes,nantes Développeur c/c++/PHP/SQL/HTML
    Par skeud dans le forum Demandes
    Réponses: 0
    Dernier message: 30/06/2011, 08h30
  3. [Stage] 2-3moi Développeur en PHP/SQL/HTML/CSS/JavaScript/Java/AS3
    Par Ckpierre dans le forum Demandes
    Réponses: 0
    Dernier message: 29/06/2011, 11h41
  4. réponse en colonne (et non en ligne)
    Par antalata dans le forum Oracle
    Réponses: 1
    Dernier message: 10/09/2010, 16h56
  5. [XL-2003] Récupérer feuille XL en colonnes et non en lignes
    Par gringo-75 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/06/2009, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo