Partage
  • Partager sur Facebook
  • Partager sur Twitter

Relire un tableau [array] depuis le début

    9 mars 2007 à 9:50:01

    Bonjour

    soit une table " newstable" dans une Bdd
    soit un champ date " newsdate "
    soit une requete simple qui me retourne les valeurs dictinctes du champ "newsdate"'

    je désire créer à la volée 2 listes déroulantes, l'une faite avec les années de la date et une autre faite avec les mois de la date.
    j'y arrive avec cela :
    $requete="SELECT DISTINCT newsdate FROM newstable ";
                $reponse =mysql_query ($requete);
                echo "<select name='par_annee' id='par_annee'>";
                 while ($donnees=mysql_fetch_array($reponse))
                 {
                 $annee=substr ($donnees['newsdate'],0,4); // pour retirer les ANNEES du CHAMP DATE
               
                 echo "<option value=".$annee.">".$annee."</option>";
                 }
                echo "</select>";
               
                $requete="SELECT DISTINCT newsdate FROM newstable ";
                $reponse =mysql_query ($requete);
                echo "<select name='par_mois' id='par_mois'>";
                 while ($donnees=mysql_fetch_array($reponse))
                 {
                 $mois=substr ($donnees['newsdate'],5,2); // pour retirer les MOIS du CHAMP DATE
                echo "<option value=".$mois.">".$mois."</option>";
                 }
                echo "</select>";


    j'ai bien 2 listes déroulantes ..mais il m'a fallu faire 2 fois la même requete ... car si ne je la repète pas ... ma liste des MOIS est VIDE car le tableau a déjà été lu avec la première boucle pour recuperer les années.

    Comment ne faire qu'une requete et obtenir mes 2 listes déroulantes ?
    comment relire le tableau $donnees[] depuis le début ?
    suis je clair ? :)
    • Partager sur Facebook
    • Partager sur Twitter
      9 mars 2007 à 9:53:37

      avec mysql_data_seek() ^^
      • Partager sur Facebook
      • Partager sur Twitter
        9 mars 2007 à 10:44:28

        avec "mysql_data_seek" ...
        cette fonction renvoi false ou true !
        comment tu goupilles cette fonction avec ma petite requete ?
        merci
        • Partager sur Facebook
        • Partager sur Twitter
          9 mars 2007 à 10:49:47

          tu peux faire comme ça, en récupérant l'année et le mois directement dans ta requête :
          $requete = "SELECT DISTINCT YEAR(newsdate) AS annee, MONTH(newsdate) AS mois FROM newstable";
          $reponse = mysql_query($requete);

          echo "<select name='par_annee' id='par_annee'>";
          while ($donnees = mysql_fetch_array($reponse))
          {
                  echo "<option value='".$donnees['annee']."'>".$donnees['annee']."</option>";
          }
          echo "</select>";

          mysql_data_seek($reponse, 0); // la fonction agit sur $reponse directement et remet son compteur interne au début

          echo "<select name='par_mois' id='par_mois'>";
          while ($donnees = mysql_fetch_array($reponse))
          {
                  echo "<option value='".$donnees['mois']."'>".$donnees['mois']."</option>";
          }
          echo "</select>";
          • Partager sur Facebook
          • Partager sur Twitter
            9 mars 2007 à 11:31:46

            Merci Cortexd !
            ta requete est judicieuse ... mais il y a un petit Hic

            si je fais cela
            $requete = "SELECT DISTINCT YEAR(newsdate) AS annee, MONTH(newsdate) AS mois FROM newstable";


            Le " DISTINCT " n'est pas pris en compte quand je mets 2 arguments "YEAR(newsdate) AS annee, MONTH(newsdate) AS mois"
            si j'en mets qu'un seul ... j'ai bien aucun doublon .

            Etrange non ? :(
            • Partager sur Facebook
            • Partager sur Twitter
              9 mars 2007 à 12:40:42

              effectivement ça ne peut pas fonctionner en récupérant les deux informations en même temps, mais j'ai quelque chose d'autre pour toi (d'après ce que j'ai compris de ce que tu voulais vraiment faire :D )
              $requete = "SELECT MIN(YEAR(newsdate)) AS annee_min, YEAR(curdate()) AS annee_max FROM newstable";
              $reponse = mysql_query($requete);
              $donnees = mysql_fetch_array($reponse);

              echo "<select name='par_annee' id='par_annee'>";
              foreach (range($donnees['annee_min'], $donnees['annee_max']) as $annee)
              {
                      echo "<option value='".$annee."'>".$annee."</option>";
              }
              echo "</select>";

              echo "<select name='par_mois' id='par_mois'>";
              foreach (range(1, 12) as $mois)
              {
                      echo "<option value='".$mois."'>".str_pad($mois, 2, '0', STR_PAD_LEFT)."</option>";
              }
              echo "</select>";
              • Partager sur Facebook
              • Partager sur Twitter
                9 mars 2007 à 13:09:34

                Test ceci:
                <?php
                $requete = "SELECT DISTINCT newsdate FROM newstable";
                $reponse = mysql_query($requete) or die(mysql_error());

                $list_annee = '<select name="par_annee" id="par_annee">';
                $list_mois = '<select name="par_mois" id="par_mois">';

                while($donnees=mysql_fetch_array($reponse)){
                 $annee = substr($donnees['newsdate'], 0, 4); // pour retirer les ANNEES du CHAMP DATE
                 $mois = substr($donnees['newsdate'], 5, 2); // pour retirer les MOIS du CHAMP DATE
                 
                 $list_annee .= '<option value="'.$annee.'">'.$annee.'</option>';
                 $list_mois .= '<option value="'.$mois.'">'.$mois.'</option>';
                }

                $list_annee .= '</select>';
                $list_mois .= '</select>';

                echo $list_annee.$list_mois;
                ?>
                • Partager sur Facebook
                • Partager sur Twitter
                Erreur PDO - Installation Wamp - Docs PHP et MYSQL.

                Relire un tableau [array] depuis le début

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown