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 un tableau de taille variable (php5)


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Créer un tableau de taille variable (php5)
    Bonjour à tous,

    Je suis bien embêter pour réaliser un tableau en php et ce n'est pas le premier forum ou je réalise cette demande :

    voici ma requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    $query = "SELECT CODMES, VALEUR 
    FROM ANADET 
    WHERE CODAR = '$article2' and CODSOC = '$societe2' 
    and DATANA >= $dateC and DATANA <= $dateD";
    ?>
    ce que je n'arrive pas à faire c'est mettre les différents CODMES en entêtes de tableau et dans chaque colonnes ainsi créée insérer la VALEUR correspondante. Je précise que le nombre de colonne du tableau varie en fonction du nombre de CODMES obtenue(varie en fonction des articles).

    j'ai regarder les tutos du site sans trouver d'éléments de réponse correspondant à ma situation.

  2. #2
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Il va falloir construire ton tableau en deux parties je le crains. Ce n'est pas d'autres solutions que de récupérer d'abord tes CODMES pour construire les entêtes puis ensuite de récupérer tes VALEURS pour construire les données. Je ne sais pas construire un tableau à partir d'une requête comme ce que tu demandes ou alors il me faut plus de temps de recherche et je n'en ai pas :p.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    c'est ce que je pensais faire mais je ne connais pas la syntaxe php à utiliser pour réaliser un tableau de cette façon

  4. #4
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Disons que j'utilise le pilote mysql. Voici ce que je viens à l'instant d'y penser :

    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
     
    <?php
        $result  = mysql_query($query);
        $codemes = '';
        $valeur  = '';
     
        while($row = mysql_fetch_assoc($query)) {
            $codecmd .= '<td>'.$row['CODMES'].'</td>';
            $valeur  .= '<td>'.$row['VALEUR'].'</td>';
        }
    ?>
     
    <table>
        <tr>
            <?php echo $codecmd; ?>
        </tr>
        <tr>
            <?php echo $valeur; ?>
        </tr>
    </table>

  5. #5
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Citation Envoyé par Chengj Voir le message
    Disons que j'utilise le pilote mysql. Voici ce que je viens à l'instant d'y penser :

    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
     
    <?php
        $result  = mysql_query($query);
        $codemes = '';
        $valeur  = '';
     
        while($row = mysql_fetch_assoc($query)) {
            $codecmd .= '<td>'.$row['CODMES'].'</td>';
            $valeur  .= '<td>'.$row['VALEUR'].'</td>';
        }
    ?>
     
    <table>
        <tr>
            <?php echo $codecmd; ?>
        </tr>
        <tr>
            <?php echo $valeur; ?>
        </tr>
    </table>
    Ca devrait marcher en faisant comme ceci :
    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
     
    <table>
     <tr>
      <td><strong>Colonne CODMES</strong></td>
      <td><strong>Colonne VALEUR</strong></td>
     </tr>
    <?php
        $result  = mysql_query($query);
     
        while($row = mysql_fetch_assoc($query)) {
            echo "<tr>";
            echo "<td>".$row['CODMES']."</td><td>".$row['VALEUR']."</td>";
            echo "</tr>";
        }
    ?>
    </table>
    A chaque fois qu'on boucle, on recrée un ligne et on insère dedans 2 colonnes.

  6. #6
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Justement, ce n'est pas ce qu'il veut. Il désire un tableau comme ça :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <table>
      <tr>
        <th>Code 1</th>
        <th>Code 2</th>
        <th>Code 3</th>
      </tr>
      <tr>
        <td>Valeur 1</td>
        <td>Valeur 2</td>
        <td>Valeur 3</td>
      </tr>
    </table>

  7. #7
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Citation Envoyé par Chengj Voir le message
    ...
    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
    <table>
    <?php
        $result  = mysql_query($query);
     
        while($row = mysql_fetch_assoc($query)) {
            echo "<tr>";
            echo "<td>".$row['CODMES']."</td>";
            echo "</tr>";
        }
        while($row = mysql_fetch_assoc($query)) {
            echo "<tr>";
            echo "<td>".$row['VALEUR']."</td>";
            echo "</tr>";
        }
    ?>
    </table>

  8. #8
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Seul les <td></td> sont plusieurs, donc brut ca fera une ligne à chaque fois, et j'imagine pas le résultat pas le temps de tester.
    Ceci me semble plus fonctionnel :
    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
     
    <table>
    <?php
        $result  = mysql_query($query);
        echo "<tr>";
        while($row = mysql_fetch_assoc($query)) {
            echo "<td>".$row['CODMES']."</td>";
        }
        echo "</tr>";
        echo "<tr>";
        while($row = mysql_fetch_assoc($query)) {
            echo "<td>".$row['VALEUR']."</td>";
        }
        echo "</tr>";
    ?>
    </table>
    Cordialement.

  9. #9
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    oui, j'ai été un peu vite hier

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    et Merci à tous,

    Le code de SirDarken fonctionne bien ,
    j'ai juste adapté le tableau au niveau apparence dans la page, ce nickel merci beaucoup

    j'ai une petite question :

    dans ton code SirDarken, tu utilise mysql et ses fonctions mais j'ai une autre application ou j'ai besoin de ce fonctionnement à la différence que je suis obligé de travailler en odbc... avec une base windev.

    quels sont les fonctions odbc que je dois mettre en place pour utiliser ton code de cette façon?

  11. #11
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Regarde dans la doc de PHP (http://www.php.net)

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjours a tous,

    j'ai réaliser ce code qui doit gérer le tableau a dimension variable en m'inspirant de vos réponse : et du site. Je précise qu'il s'agit du code pour mon applique qui travail en odbc.

    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
     
    <html>
    <head>
    </head>
    <body>
    <?php
    include('connection.php');
    ?>
    <?php
     
    echo ("<table border='1' align = center'>");
     
    $req1 = "SELECT AN2.DATANA as date, NUMLOT as lot, LIEUPRE as lieu FROM ANAENT AS ANT, ANADET AS AN2 WHERE ANT.ANCLEUNIK = AN2.ANCLEUNIK AND AN2.CODAR = 'SANG' AND AN2.CODSOC = 'ABA' AND AN2.DATANA between 20070101 AND 20070131";
    $detana = odbc_exec($connection, $req1);
     
    echo ("<tr>");
    for ($j = 1; $j <= odbc_num_fields($detana); $j++)
    {
    	echo("<th aligne ='center'>" .odbc_field_name($detana,$j)."</th>");
    }
     
    $requete = "select distinct CODMES from ANADET where CODAR = 'SANG' AND CODSOC = 'ABA' AND DATANA between 20070101 AND 20080101";
    $entete = odbc_exec($connection, $requete);
    while (odbc_fetch_into($entete, $codmes)!= FALSE)
    {
    	echo("<th aligne ='center'>$codmes[0]</th>");
    }
    echo ("</tr>");
     
    while (odbc_fetch_into($detana, $labo)!= FALSE);
    {
    	echo ("<tr>");
    	echo("<th aligne ='center'>".$labo[0]."</th>");
    	echo("<th aligne ='center'>".$labo[1]."</th>");
    	echo("<th aligne ='center'>".$labo[2]."</th>");
    	echo ("</tr>");
    }
    $req3 = "select ANCLEUNIK FROM ANAENT WHERE CODAR = 'SANG' AND CODSOC = 'ABA' AND DATANA between 20070101 AND 20080101";
    $libana = odbc_exec($connection, $req3);
    while (odbc_fetch_into($libana, $ana)!= FALSE);
    {
    	$anatest1 = $ana[0];
     
    	$req4 = "select count(CODMES) as nbmes FROM ANADET WHERE ANCLEUNIK = $anatest1";
     
    	$temes = odbc_exec($connection, $req4);
    	$mesure = odbc_fetch_into($temes, $nbmes);
     
    	$req5 = "select CODMES FROM ANADET WHERE ANCLEUNIK = $anatest1";
    	$libmes = odbc_exec($connection, $req5);
     
     
    	while (odbc_fetch_into($libmes, $mes)!= FALSE);
    	{
    		$testmes = $mes[0];
    		echo ("<tr>");
    		for ($l = 0; $l< $nbmes[0] ; $l++)
    		{
    			$req6 = "select VALEUR FROM ANADET WHERE CODMES = '$testmes' and ANCLEUNIK = $anatest1";
    			$libval = odbc_exec($connection, $req6);
    			$test2 = odbc_fetch_into($libval, $val);
     
    			echo "<th aligne ='center'>$val[0]</th>";
     
    		}
    		echo ("</tr>");
    	}
    }
     
    echo ("</table>");
    ?>
    </body>
    </html>
    et voila ce je j'ai en affichage :

    ou se trouve mes erreurs?
    Images attachées Images attachées  

  13. #13
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Hum j'ai pas trop le temps de regarder là, mais un truc m'étonne pourquoi tu utilise pas des <td></td> ?

    Ensuite vis à vis de l'affichage je dirai que:
    Soit tes champs sont vides dans la bdd. (place des echo() de tes varaibles ca fera moche mais souvent ca aide au debug.

    Soit tu rentre tout les champs dans un seul <td></td> et donc c'est la boucle qui deconne.

    Mon conseil pour bien debug serai de stocker tes infos dans deux tableau et tu fait l'affichage par ses tableaux ensuite, ca devrai aider à y voir clair.
    (J'ai jamais usé un odbc pour le moment :p)

  14. #14
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    A corriger :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo("<th aligne ='center'>$codmes[0]</th>");
    A rectifier par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo("<th aligne ='center'>{$codmes[0]}</th>");
    Sinon ça va afficher des $codmes[0] au lieu des valeurs voulues.

    Sais-tu activer la gestion des erreurs sur PHP ? :o

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjour a tous,

    c'est bon j'ai réussi à faire fonctionner ce script, pour ceux que ça intéresse, voici le code :

    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
     
    <?php
    include"connection.php";
     
    $query = "SELECT ANAENT.ANCLEUNIK, ANADET.CODMES, ANAENT.DATANA, ANAENT.LIEUPRE, ANADET.VALEUR  
    FROM ANAENT LEFT JOIN ANADET ON ANAENT.ANCLEUNIK = ANADET.ANCLEUNIK
    WHERE  
    ANAENT.CODAR = 'SANG' AND 
    ANAENT.CODSOC = 'ABA' AND 
    ANAENT.DATANA between 20070101 AND 20080101";
     
    $result = odbc_exec($connection, $query);
    if ($result == 0){
    	echo ("<b>Erreur ".odbc_error().": ".odbc_errormsg()."</b>");}
    	elseif (odbc_num_rows($result) == 0){
    		echo ("<b>Requete executée, mais vide</b>");}
    		else{
    			$col = array();
    			$tab = array();
    			while(odbc_fetch_into($result, $prod)!= FALSE){
     
    				$ANCLEUNIK    = $prod[0];
    				$CODMES   = $prod[1];
    				$DATE = $prod[2];
    				$LIEU = $prod[3];
    				$VALEUR = $prod[4];
    				// test existence colone
    				if (!isset($col[$CODMES])) {
    					$col[$CODMES] = $CODMES;
    				}
     
    				$tab[$ANCLEUNIK][$DATE][$LIEU][$CODMES] = $VALEUR;
     
    			}
    			odbc_close($connection);
     
    			echo '<table border = 1>';
    			// Ligne Titres
    			echo '<tr>';
    			echo '<td>ANCLEUNIK</td>';
    			echo '<td>DATE</td>';
    			echo '<td>LIEU</td>';
    			foreach ($col as $kcol => $colone)
    			{
    				echo '<td>' . $colone . '</td>';
    			}	
    			echo '</tr>';
    			foreach ($tab as $klig => $ligne)
    			{
    				echo '<tr>';
    				echo '<td>' . $klig .'</td>';
    				foreach ($ligne as $kligbis => $lignebis){
    					echo '<td>' . $kligbis .'</td>';
    				}
    				foreach ($lignebis as $kligbisbis => $lignebisbis){
    					echo '<td>' . $kligbisbis .'</td>';
    				}
    				foreach ($col as $kcol => $colone)
    				{
    					if (isset($tab[$klig][$kligbis][$kligbisbis][$kcol]))
    					{
    						echo '<td>' . $tab[$klig][$kligbis][$kligbisbis][$kcol] .'</td>';
    					}
    					else
    					{
    						echo '<td>&nbsp;</td>';
    					}
    				}
    				echo '</tr>';
    			}
    			echo '</table>';
    		}
     
    ?>
    différent de celui de sirDarken, mais qui fonctionne parfaitement en odbc et qui est adaptable pour les autre SGBD(mysql,...etc) .

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

Discussions similaires

  1. [VBA] Créer un tableau de taille donnée
    Par Centar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/10/2007, 15h31
  2. Réponses: 4
    Dernier message: 06/06/2007, 13h32
  3. [Conception] tableau de taille variable
    Par salirose dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 21/10/2006, 13h53
  4. Réponses: 1
    Dernier message: 14/09/2006, 10h53
  5. [TP] Tableau de taille variable
    Par Ripley dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 30/01/2006, 15h36

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