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

Langage PHP Discussion :

Créer une table HTML colonne par colonne au lieu de ligne par ligne


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Points : 77
    Points
    77
    Par défaut Créer une table HTML colonne par colonne au lieu de ligne par ligne
    Bonjour.
    Pour simplifier, j'ai deux objets dont les données sont stockées dans une table Oracle (avec par exemple un nom, un texte, une image)
    Le but est d'afficher côte à côte et verticalement les données de ces deux objets: les deux noms côte à côte, les textes (de longueurs différentes) côte à côte et les deux images côte à côte. Je pense donc mettre ces données dans une table HTML pour préserver l'alignement horizontal.
    nom1 nom2
    texte1 texte2
    texte1
    texte1
    image1 image2
    Le problème c'est qu'une requête SQL sur un objet me donne le nom, le texte , l'image, c'est-à-dire une colonne de mon tableau alors qu'en PHP, on ne peut créer le tableau que ligne par ligne: <
    tr><td>...</td><td>...</td></tr>...
    J'espère avoir été assez clair.
    Comment faire?
    Merci.

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Malheureusement c'est impossible, à moins de pondre un algo bien moche
    Ce que tu peux faire en revanche c'est préparer ton tableau pour l'affichage en ligne, ce qui peut se faire de la manière suivante:
    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
     
    $cols = array(
      array('a1', 'a2', 'a3', 'a4'),
      array('b1', 'b2', 'b3', 'b4'),
      array('c1', 'c2', 'c3', 'c4'),  
    );
     
    $lines = array();
    $c = count($cols[0]);
    for ($i=0; $i<$c; $i++) {
      $lines[] = array(array_shift($cols[0]), array_shift($cols[1]),  array_shift($cols[2]));
    }
     
    echo "<table>";
    foreach ($lines as $line) {
      list($a,$b,$c) = $line;
      echo "<tr><td>$a</td><td>$b</td><td>$c</td></tr>";
    }
    echo "</table>";

  3. #3
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Pourquoi ne pas utiliser plutôt des div ?

    C'est plus simple et personnellement plus propre.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Points : 77
    Points
    77
    Par défaut
    Justement, j'ai posé cette question dans le forum CSS:
    Je crée des balises div que j'appelle par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div>t11</div><div>t12</div><div>t13</div><div>t21</div><div>t22</div><div>t23</div>
    Elles sont forcément écrites dans cet ordre et j'aimerais qu'à l'affichage, j'obtienne ceci:
    t11 t21
    t12 t22
    t13 t23
    Est-ce qu'on peut le faire avec du CSS et si oui, comment?
    PS: j'aimerais que ça fonctionne comme un tableau: si le bloc t11 par exemple contient plus de lignes que le bloc t21, alors les premières lignes de t12 et t22 sont quand même alignées.

    On m'a répondu que c'est impossible à cause du PS.
    Mais si vous avez une autre idée...

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Si c'est un tableau, il faut faire un tableau c'est tout. On ne mets pas des divs pour faire joli.

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    La seule raison d'utiliser une table est justement l'affichage de données tabulaires.

    C'est le cas ici, je ne vois pas de raison d'utiliser des div qui n'ont aucune valeur sémantique alors que les données de tableaux en ont besoin.

    A moins de vouloir succomber à la divitis bien sûr...
    Je suis fervent utilisateur de PHP et de jQuery.
    Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur pour envoyer l'URL de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc…

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Bonjour,

    Si c'est qu'une question de présentation, tu mets la ligne de résultat sql qui correspond à ta première colonne dans un div puis la ligne de résultat sql qui correspond à ta deuxième colonne dans un autre div et après tu style en mettant le premier div en float:left; et tu aura des deux div (colonnes) côte à côte.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Points : 77
    Points
    77
    Par défaut
    Oui mais je veux aussi avoir un alignement horizontal des données (voir mon dernier message):

    si par exemple le premier bloc contient deux lignes (t11 et t11) alors avec ta méthode je n'ai pas l'alignement horizontal entre les blocs t12 et t22 comme dans un tableau: j'obtiens ceci

    t11 t21
    t11 t22
    t12 t23
    t13

    au lieu de
    t11 t21
    t11
    t12 t22
    t13 t23

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par Benjamin Delespierre Voir le message
    Malheureusement c'est impossible, à moins de pondre un algo bien moche
    "a quoi ca sert que je me décarcasse ?" ... :

    => Affichage de données dans un tableau HTML
    et plus particulièrement :
    - Affichage "en colonne" avec array()
    - Affichage "en colonne" avec Base de Données

  10. #10
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par JCD21 Voir le message
    si par exemple le premier bloc contient deux lignes (t11 et t11)
    ?

    Une ligne de résultat dans un div qui forme ta première colonne puis une ligne de résultat dans une autre div qui forme ta deuxiéme colonne. Ensuite tu met les 2 div côte à côte en css.

    Ou regarde les solutions proposées au dessus par jreaux62, elles m'ont l'air intéressantes.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Points : 77
    Points
    77
    Par défaut
    jreaux62, si j'ai bien compris, ta méthode sous-entend qu'on met les données de la BDD dans un array avant de créer la table HTML.
    C'est ce que j'ai fait mais les cellules du array contiennent chacune une grosse chaîne de caractères en HTML. Pour l'instant, ça passe...

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par JCD21 Voir le message
    ta méthode sous-entend qu'on met les données de la BDD dans un array avant de créer la table HTML.
    Oui.
    Citation Envoyé par JCD21 Voir le message
    mais les cellules du array contiennent chacune une grosse chaîne de caractères en HTML. Pour l'instant, ça passe...
    On met ensuite ce qu'on veut dans les cellules ...

  13. #13
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    "a quoi ca sert que je me décarcasse ?" ... :

    => Affichage de données dans un tableau HTML
    et plus particulièrement :
    - Affichage "en colonne" avec array()
    - Affichage "en colonne" avec Base de Données
    Je me suis mal exprimé. Je voulais dire qu'au niveau de HTML on ne peut pas afficher autrement qu'en ligne.

    En revanche on peut customiser les colonnes avec <col> et <colgroup>.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Je me suis mal exprimé....
    No problemo.
    Je ne faisais que parodier une vieille pub : "à quoi ca sert que DUCROS se décarcasse" ...
    ("je vous parle d'un temps que les moins de 20 ans ne peuvent pas connaitre ....")

Discussions similaires

  1. [Article] Créer une table HTML éditable en JavaScript v2.0
    Par bigboomshakala dans le forum Général JavaScript
    Réponses: 27
    Dernier message: 16/05/2014, 16h32
  2. [Article] Créer une table HTML éditable en JavaScript v1.0
    Par bigboomshakala dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 16/04/2012, 16h26
  3. Réponses: 4
    Dernier message: 22/01/2010, 10h24
  4. Réponses: 2
    Dernier message: 10/10/2008, 16h56
  5. [MySQL] Créer une table dont la 1ere colonne est la recopie de celle d'une autre table
    Par Richard Trigaux dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/11/2007, 12h56

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