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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Boucle PHP valeurs uniques


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Boucle PHP valeurs uniques
    Bonjour à tous,

    J'affiche un tableau avec une boucle while.

    Voici le code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $req = $bdd->prepare($sql);
    $req->bindParam(':date_debut', $date_debut, PDO::PARAM_STR);
    $req->bindParam(':date_fin', $date_fin, PDO::PARAM_STR);
    $req->execute(); 
     
    echo '<h1>Prépa du ' . $date_debut . '</h1>';
    echo '<table>';
     
    while ($donnees = $req->fetch())
    {
    echo '<tr><td>' . $donnees['codeArticle'] . '</td><td>' . date("d/m/Y", strtotime($donnees['dateOperation'])) . '</td><td>' . date("H:i:s", strtotime($donnees['dateOperation'])) . '</td><td>' .  date("d/m/Y", strtotime($donnees['DLUO'])) . '</td><td>' . $donnees['LOT'] . '</td><td>' . $donnees['sscc'] . '</td><td>' . $donnees['qteS'] . '</td><td>' . $donnees['numCommande'] . '</td></tr>';
    }
    echo '</table>';

    Mais je souhaiterais créer une table pour chaque CODE ARTICLE présent dans la table actuelle :
    Voici le code html que j'aimerais obtenir :

    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
    <h1>Prépa du 2018-25-7</h1>
     
    <h2>CODE ARTICLE : MIX</h2>
    <table><tbody>
    <tr><td>MIX</td><td>25/07/2018</td><td>11:02:00</td><td>04/04/2021</td><td>8198</td><td>00033327920000633225</td><td>17.0</td><td>18002806</td></tr>
    <tr><td>MIX</td><td>25/07/2018</td><td>11:01:00</td><td>31/12/2020</td><td>819902</td><td>00033327920000629648</td><td>6.0</td><td>18002800</td></tr>
    </tbody></table>
     
    <h2>Code article : ORI</h2>
    <table><tbody>
    <tr><td>ORI</td><td>25/07/2018</td><td>11:02:00</td><td>04/04/2021</td><td>8198</td><td>00033327920000633225</td><td>17.0</td><td>18002806</td></tr>
    <tr><td>ORI</td><td>25/07/2018</td><td>11:01:00</td><td>31/12/2020</td><td>819902</td><td>00033327920000629648</td><td>6.0</td><td>18002800</td></tr>
    </tbody></table>
     
    etc..

    Je ne sais pas du tout comment faire. Merci beaucoup pour votre aide.


    Info : Base de donnée SQL Serveur 2017, PHP 7.2.

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Ca devrait ressembler à ça. (non testé).

    Code php : 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
     
    $req = $bdd->prepare($sql);
    $req->bindParam(':date_debut', $date_debut, PDO::PARAM_STR);
    $req->bindParam(':date_fin', $date_fin, PDO::PARAM_STR);
    $req->execute(); 
     
    echo '<h1>Prépa du ' . $date_debut . '</h1>';
    $sav_art = ""; 
    $top     = false;
    while ($donnees = $req->fetch())
    {
     if ($sav_art != $donnees['codeArticle'] )
     {
      if ($top) echo '</tbody></table>';
      $top     = true;
      $sav_art = $donnees['codeArticle'];
      echo "<h2>CODE ARTICLE : $sav_art</h2>";
      echo '<table><tbody>';
     }
     
     echo '<tr><td>' . $donnees['codeArticle'] . '</td><td>' . date("d/m/Y", strtotime($donnees['dateOperation'])) . '</td><td>' . date("H:i:s", strtotime($donnees['dateOperation'])) . '</td><td>' .  date("d/m/Y", strtotime($donnees['DLUO'])) . '</td><td>' . $donnees['LOT'] . '</td><td>' . $donnees['sscc'] . '</td><td>' . $donnees['qteS'] . '</td><td>' . $donnees['numCommande'] . '</td></tr>';
    }
    echo '</tbody></table>';
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse.

    J'obtiens une table par ligne. Voici ce que j'obtient :

    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
    <h1>Prépa du 2018-25-7</h1>
     
    <h2>CODE ARTICLE : MIX</h2>
    <table><tbody>
    <tr><td>MIX</td><td>25/07/2018</td><td>11:02:00</td><td>04/04/2021</td><td>8198</td><td>00033327920000633225</td><td>17.0</td><td>18002806</td></tr>
    </tbody></table>
     
    <h2>Code article : ORI</h2>
    <table><tbody>
    <tr><td>ORI</td><td>25/07/2018</td><td>11:01:00</td><td>31/12/2020</td><td>819902</td><td>00033327920000629648</td><td>6.0</td><td>18002800</td></tr>
    </tbody></table>
     
    <h2>CODE ARTICLE : MIX</h2>
    <table><tbody>
    <tr><td>MIX</td><td>25/07/2018</td><td>11:02:00</td><td>04/04/2021</td><td>8198</td><td>00033327920000633225</td><td>17.0</td><td>18002806</td></tr>
    </tbody></table>
     
    <h2>Code article : ORI</h2>
    <table><tbody>
    <tr><td>ORI</td><td>25/07/2018</td><td>11:01:00</td><td>31/12/2020</td><td>819902</td><td>00033327920000629648</td><td>6.0</td><td>18002800</td></tr>
    </tbody></table>
     
    etc..

    Alors que je souhaiterais obtenir une table répertoriant les lignes de chaque article identique :
    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
    <h1>Prépa du 2018-25-7</h1>
     
    <h2>CODE ARTICLE : MIX</h2> /*toutes les lignes de l'article MIX*/
    <table><tbody>
    <tr><td>MIX</td><td>25/07/2018</td><td>11:02:00</td><td>04/04/2021</td><td>8198</td><td>00033327920000633225</td><td>17.0</td><td>18002806</td></tr>
    <tr><td>MIX</td><td>25/07/2018</td><td>11:01:00</td><td>31/12/2020</td><td>819902</td><td>00033327920000629648</td><td>6.0</td><td>18002800</td></tr>
    </tbody></table>
     
    <h2>Code article : ORI</h2> /*toutes les lignes de l'article ORI*/
    <table><tbody>
    <table><tbody>
    <tr><td>ORI</td><td>25/07/2018</td><td>11:02:00</td><td>04/04/2021</td><td>8198</td><td>00033327920000633225</td><td>17.0</td><td>18002806</td></tr>
    <tr><td>ORI</td><td>25/07/2018</td><td>11:01:00</td><td>31/12/2020</td><td>819902</td><td>00033327920000629648</td><td>6.0</td><td>18002800</td></tr>
    </tbody></table>
     
    etc..

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

    il faudrait d'abord penser à TRIER par "Code article" dans la requête SQL !

    Sinon, voici une autre approche :
    Code php : 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
    <?php
    $datas  = array();
    // 1- on crée un array, dont les clés seront les "Code article"
    while ( $row = $req->fetch() )
    {
    	$datas[$row['codeArticle']][] = $row;
    }
    // 2- affichage
    foreach( $datas as $codeArticle => $data ) // $data est aussi un array
    {
    ?>
    	<h2>code article : <?php echo $codeArticle; ?></h2>
    	<table>
    	<tbody>
    <?php
    	foreach( $data as $row )
    	{
    ?>
    		<tr>
    			<td><?php echo $row['codeArticle']; ?></td>
    			<td><?php echo date("d/m/Y", strtotime($row['dateOperation'])); ?></td>
    			<td><?php echo date("H:i:s", strtotime($row['dateOperation'])); ?></td>
    			<td><?php echo date("d/m/Y", strtotime($row['DLUO'])); ?></td>
    			<td><?php echo $row['LOT']; ?></td>
    			<td><?php echo $row['sscc']; ?></td>
    			<td><?php echo $row['qteS']; ?></td>
    			<td><?php echo $row['numCommande']; ?></td>
    		</tr>
    <?php
    	}
    ?>
    	</tbody>
    	</table>
    <?php
    }
    ?>
    Tu remarqueras qu'avec une bonne indentation, le code est nettement plus facile à lire.
    Dernière modification par Invité ; 30/07/2018 à 19h54.

  5. #5
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par ced255 Voir le message
    Merci pour ta réponse.
    ....

    Alors que je souhaiterais obtenir une table répertoriant les lignes de chaque article identique :
    Quand j’ai vu que le code posté ne contenait pas la requête SQL j’étais quasiment sûr d’une telle réponse !
    Comme l’a écrit jreaux62 il faut trier les données auparavant.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    ça fonctionne parfaitement. Au top, Merci beaucoup !

  7. #7
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Néanmoins l'algorithme le plus mieux bien serait du style ....

    Code php : 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
     
    $sav_art = ""; 
    $donnees = $req->fetch();
    while ($donnees !== false)
    {
     if ($sav_art != $donnees['codeArticle'] )
     {
      $sav_art = $donnees['codeArticle'];
      echo "<h2>CODE ARTICLE : $sav_art</h2>";
      echo '<table><tbody>';  
     }
     
     echo '<tr><td>' . $donnees['codeArticle'] . '</td><td>' . date("d/m/Y", strtotime($donnees['dateOperation'])) . '</td><td>' . date("H:i:s", strtotime($donnees['dateOperation'])) . '</td><td>' .  date("d/m/Y", strtotime($donnees['DLUO'])) . '</td><td>' . $donnees['LOT'] . '</td><td>' . $donnees['sscc'] . '</td><td>' . $donnees['qteS'] . '</td><td>' . $donnees['numCommande'] . '</td></tr>';
     $donnees = $req->fetch();
     if ($donnees === false || $sav_art != $donnees['codeArticle'] )
     {
      echo '</tbody></table>';
     }
    }
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/11/2011, 12h01
  2. [PHP-JS] Valeur unique dans un champ
    Par Dark Jukka dans le forum Langage
    Réponses: 2
    Dernier message: 02/04/2007, 18h01
  3. [vb.net][datatable] retrouver extraire des valeur unique
    Par arnolem dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/01/2006, 10h33
  4. [Performance] LEFT JOIN vs SELECT dans une boucle (PHP)
    Par frochard dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/10/2005, 17h45
  5. Réponses: 2
    Dernier message: 23/11/2003, 18h44

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