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 :

inserer deuxième ligne tableau dans boucle


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut inserer deuxième ligne tableau dans boucle
    Bonjour à tous !

    J'ai un petit souci avec ce code. Je n'arrive pas à insérer ma boucle while (voir <h2>OBTENU</h2>) pour obtenir le résultat (voir <h2>ATTENDU</h2>)
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    <?php
    // Table SQL
    /*
    
    CREATE TABLE IF NOT EXISTS `products` (
    `id` int(11) NOT NULL,
      `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
      `price` int(3) NOT NULL
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=79 ;
    
    INSERT INTO `products` (`id`, `name`, `price`) VALUES
    (1, 'Test name', 280),
    (2, 'Motorola Google Nexus 6, Midnight Blue 32GB', 400),
    (3, 'Samsung Galaxy S4 i9500 16GB', 600),
    (6, 'Bench Men''s Bench Spokes Slim T-Shirt', 14),
    (7, 'HP ZBook 17 Mobile Business Workstation', 514),
    (8, 'Samsung Galaxy Tab 4', 210),
    (9, 'Spalding Men', 49),
    (10, 'Sony Smart Watch 3', 194),
    (11, 'Huawei SnapTo', 179),
    (12, 'Abercrombie Men''s Lake Arnold Blazer', 25);
    
    ALTER TABLE `products`
     ADD PRIMARY KEY (`id`);
    
    ALTER TABLE `products`
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13;
    */
     
    $connexion = new PDO('mysql:host=localhost;dbname=tests', 'root', 'root', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
     
    $sql_select = $connexion->prepare("SELECT * FROM products ORDER BY id ASC");
    $sql_select->setFetchMode(PDO::FETCH_OBJ);
    $sql_select->execute();
     
     
    $tableau_valeurs = array('btn_ajout' => true, 'Nom' => 'name', 'Prix' => 'price');
     
    $nombre_de_champs_tableau = count($tableau_valeurs) -1; // On enlève le bouton ajout
     
    $output = '';
     
    // Affichage de l'entete du tableau
    $affichage_entete = '';
    $affichage_body = '';
    $i = 0;
    foreach($tableau_valeurs as $cle => $valeur) {
     
        if ($cle == "btn_ajout" and $valeur == true) { $output .= '<h2>OBTENU</h2><p><a href="ajouter.php" class="btn btn-primary btn-primary"><span class="glyphicon glyphicon-plus"></span> Ajouter</a></p>'; } // Si bouton ajout
        else {
            $affichage_entete .= '<td>'.$cle.'</td>';
     
            // Affichage des données du tableau
            if ( ($i%$nombre_de_champs_tableau) == 1) {$affichage_body .= '<tr>';  }
            $affichage_body .= '<td>'.$valeur.'</td>';
            if ( ($i%$nombre_de_champs_tableau) == 0) {$affichage_body .= '</tr>';  }
     
        }
     
        $i++;
     
    }
     
    $output .= '
    <table cellspacing="0" cellpadding="0" class="tableaux_centrer tableaux_bordure" border="1">
      <tr class="entete">'.$affichage_entete.'</tr>
    <tbody>'.$affichage_body.'</tbody>
    </table>
    ';
     
    echo $output;
    ?>
     
     
    <h2>ATTENDU</h2>
    <p><a href="ajouter.php" class="btn btn-primary btn-primary"><span class="glyphicon glyphicon-plus"></span> Ajouter</a></p>
     
    <table cellspacing="0" cellpadding="0" class="tableaux_centrer tableaux_bordure" border="1">
    <tr class="entete">
    <td>Nom</td><td>Email</td>
    </tr>
    <tbody>
    <?php
    while($row_select = $sql_select->fetch()) { 
        if ( ($i%$sql_select->rowCount()) != 1 ) { echo '<tr>'; }
    ?>
    <td><?php echo $row_select->name; ?></td><td><?php echo $row_select->price; ?></td></tr>
    <?php
        if ( ($i%$sql_select->rowCount()) == 1 ) { echo '</tr>'; }
    }
    ?>
    </tbody>
    </table>
    Quelqu'un pour m'aider ? Merci d'avance à ceux qui prendront du temps pour me répondre ...
    Écoute, sinon ta langue te perdra (proverbe Navajo)

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

    Je ne suis pas certain d'avoir compris quel résultat tu attendais, peux tu décrire rapidement ce a quoi doit ressembler le tableau final ?

  3. #3
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Oui, bien sur :
    Code html : 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
     
    <h2>OBTENU</h2>
    <p><a href="<a href="http://www.developpez.net/forums/view-source:http://localhost/ajouter.php" target="_blank">ajouter.php</a>" class="btn btn-primary btn-primary"><span class="glyphicon glyphicon-plus"></span> Ajouter</a></p>
    <table cellspacing="0" cellpadding="0" class="tableaux_centrer tableaux_bordure" border="1">
      <tr class="entete"><td>Nom</td><td>Prix</td></tr>
    <tbody><tr><td>name</td><td>price</td></tr></tbody>
    </table>
     
     
    <h2>ATTENDU</h2>
    <p><a href="<a href="http://www.developpez.net/forums/view-source:http://localhost/ajouter.php" target="_blank">ajouter.php</a>" class="btn btn-primary btn-primary"><span class="glyphicon glyphicon-plus"></span> Ajouter</a></p>
     
    <table cellspacing="0" cellpadding="0" class="tableaux_centrer tableaux_bordure" border="1">
    <tr class="entete">
    <td>Nom</td><td>Email</td>
    </tr>
    <tbody>
    <tr><td>Test name</td><td>280</td></tr>
    <tr><td>Motorola Google Nexus 6, Midnight Blue 32GB</td><td>400</td></tr>
    <tr><td>Samsung Galaxy S4 i9500 16GB</td><td>600</td></tr>
    <tr><td>Bench Men's Bench Spokes Slim T-Shirt</td><td>14</td></tr>
    <tr><td>HP ZBook 17 Mobile Business Workstation</td><td>514</td></tr>
    <tr><td>Samsung Galaxy Tab 4</td><td>210</td></tr>
    <tr><td>Spalding Men</td><td>49</td></tr>
    <tr><td>Sony Smart Watch 3</td><td>194</td></tr>
    <tr><td>Huawei SnapTo</td><td>179</td></tr>
    <tr><td>Abercrombie Men's Lake Arnold Blazer</td><td>25</td></tr>
    </tbody>
    </table>
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu dois simplement declarer l'entete de ton tableau avant la boucle qui contient les donnees.

    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
    <table cellspacing="0" cellpadding="0" class="tableaux_centrer tableaux_bordure" border="1">
      <thead>
        <tr class="entete">
          <td>Nom</td>
          <td>Email</td>
        </tr>
      </thead>
      <tbody>
      <?php
        while ($row = $sql_select->fetch()) {
        ?>
        <tr>
          <td><?php echo $row->name; ?></td>
          <td><?php echo $row->price; ?></td>
        </tr>
        <?php
        }
      ?>
      </tbody>
    </table>
    J'ai mis le cheminement en HTML contenant du php car je pense que c'est plus clair pour comprendre, tu peux tout a fait stocker le tout dans une chaine de caracteres pour faire un echo plus tard.

    En gros on affiche ce qui n'apparait qu'une seule fois sans aucune boucle (l'entete du tableau), puis on utilise le retour de la base de donnees pour completer le tableau. Je pense que ce qui t'as un peu embrouille c'est le format du retour de la base de donnees. Quand c'est le cas, un moyen simple pour y voir plus clair est de regarder ce que contient ce retour avec var_dump($sql_select->fetchAll()).

  5. #5
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Ok, mais la difficulté est que je dois récupérer les valeurs du tableau
    Cela ne sera pas toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row->name et $row->price
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row->valeur_du_tableau_1 et $row->valeur_du_tableau_2 etc
    Sinon, ce serai trop simple ....
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je ne suis pas sûre de comprendre : tu as un tableau qui définit les colonnes à utiliser ou tu essayes d'avoir un code qui utilise automatiquement le nom des colonnes présentes dans la requête ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    J'ai un tableau qui définit le nom des entêtes du tableau ET les champs de la table (voir le code de mon premier post)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tableau_valeurs = array('btn_ajout' => true, 'Nom' => 'name', 'Prix' => 'price');
    (Oublier le 'btn_ajout' => true cela m'indique juste si je dois afficher le bouton ajouter ou pas)
    Ou
    Nom et Prix = Entête de mon tableau
    et
    name et price = Champs de la table

    Donc : Oui j'ai un tableau qui définit les colonnes à utiliser

    Est ce plus clair ?
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  8. #8
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Pour ma part, ce n'est pas tellement plus clair.
    De ce que je comprends du message de Celira c'est :
    Cherchez-vous à afficher un tableau dans une page qui aura toujours les mêmes en-tête ou bien tentez-vous de créer une espèce de "fonction", qui à partir d'une requête select vous donnera l'affichage du tableau. Un espèce de tableau dynamique qui évoluera en fonction du nombre de colonne, des en-tête...


    Pierre

  9. #9
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Oui c'est une fonction que dont j'ai extrait un bout de code pour l'exemple ....
    C'est bien un de tableau dynamique qui évoluera en fonction du nombre de colonne, et d'en-tête...
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  10. #10
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bon, le btn_ajout est un peu problématique, mais on peut faire quelque chose à coup de foreach :
    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
    <table cellspacing="0" cellpadding="0" class="tableaux_centrer tableaux_bordure" border="1">
    <tr class="entete">
    <?php foreach ($tableau_valeurs as $libelle => $colonne) {
        if ($libelle != 'btn_ajout') {
            echo '<td>'.$libelle.'</td>';
        }
    }
    ?>
    </tr>
    <tbody>
    <?php
    while($row_select = $sql_select->fetch()) { 
        if ( ($i%$sql_select->rowCount()) != 1 ) { echo '<tr>'; }
        foreach ($tableau_valeurs as $libelle => $colonne) {
            if ($libelle != 'btn_ajout') {
                echo '<td>'.$row->$colonne.'</td>';
            }
        }
        if ( ($i%$sql_select->rowCount()) == 1 ) { echo '</tr>'; }
    }
    ?>
    </tbody>
    </table>
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  11. #11
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Merci Celira, c'est exactement ca !

    Je remets le code corrigé (il y avait quelques erreurs ...) :
    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
     
    <table cellspacing="0" cellpadding="0" class="tableaux_centrer tableaux_bordure" border="1">
    <tr class="entete">
    <?php foreach ($tableau_valeurs as $libelle => $colonne) {
        if ($libelle != 'btn_ajout') {
            echo '<td>'.$libelle.'</td>';
        }
    }
    ?>
    </tr>
    <tbody>
    <?php
    $i = 1;
    while($row_select = $sql_select->fetch()) { 
        if ( ($i%$sql_select->rowCount()) != 1 ) { echo '<tr>'; }
        foreach ($tableau_valeurs as $libelle => $colonne) {
            if ($libelle != 'btn_ajout') {
                echo '<td>'.$row_select->$colonne.'</td>';
            }
        }
        if ( ($i%$sql_select->rowCount()) == 1 ) { echo '</tr>'; }
     
        $i++;
    }
    ?>
    </tbody>
    </table>
    Écoute, sinon ta langue te perdra (proverbe Navajo)

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

Discussions similaires

  1. Bouton Ajout de ligne Tableau dans Formulaire
    Par operaq dans le forum VBA Word
    Réponses: 6
    Dernier message: 23/09/2013, 23h17
  2. Inserer une ligne texte dans un fichier *.txt
    Par jacquesis dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 21/12/2012, 11h56
  3. [DOM] Inserer une ligne dans un tableau
    Par xclam dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 09/06/2008, 10h38
  4. [VBA-E] Inserer une ligne vide dans Excel
    Par monsurf dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/07/2006, 16h48
  5. [HTML] Se placer à une ligne précise dans un tableau
    Par seb55555 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/10/2004, 15h06

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