Probleme affichage sql php

Résolu
Bonjour a tous,

J ai une base de donné avec date et heure mais j aimerais afficher les images par date croissant

c est a dire
01/02/12
05/02/12
28/02/12
01/05/12

et ainsi de suite

j effectue la requete suivante

$req = mysql_query("SELECT * FROM exif WHERE dossier='$doss' ORDER BY date ASC, heure ASC"

mais l affichage se fait sous cette forme

01/06/12
05/06/12
15/02/12
28/01/12

que dois changer dans la requete pour afficher le resultat correctement

merci de votre aide

15 réponses

  1. Qu'y a-t-il en fait dans ton champ date ? Tu peu le vérifier avec phpmyadmin ? Car je viens d'essayer chez moi et ça marche.
    Quel est le TYPE du champ date ? et celui du champ heure ?
    Pourquoi as-tu un champ heure séparé du champ date, c'est contraire à toute logique.
    1. je viens de voir ta réponse, tant mieux si ça marche
  2. Ok, je n'avais pas fait attention aux " et aux '. C'est une erreur énorme, étonnant que personne ne l'ait déjà siganlée - à commencer par toi.
    $req = mysql_query("SELECT *,DATE_FORMAT(date,'%d-%m-%Y') datef FROM exif WHERE dossier='$doss' ORDER BY date ASC") or die(mysql_error()); // Requête SQL 
    1. pour l'affichage de la date, il vaudra mieux utiliser $dnn['datef'] si tu veux le bon format.
    2. merci de ta reponse si j avais essayé avec les ' ' mais le probleme c est que les 1er resultat il m affiche 0000-00-00 à 21h30 l heure est juste mais pas la date
    3. erreur de ma part

      Ca fonctionne niquel j avais une erreur dans mon tableau .........

      Merci beaucoup pour ton aide tu est super!!!

      @+
  3. ci joint la requete

    <?php

    // On récupère le contenu de $_GET dans l'adresse, soit ce qu'il y a après page.php3?dossier=
    $doss=$_GET['dossier'];

    $dir_nom = $doss; // dossier listé (pour lister le répertoir courant : $dir_nom = '.' --> ('point')

    echo "<h2> $dir_nom </h2>\n\n";
    echo "\t\t<ul>\n";
    include('config.php');
    $req = mysql_query("SELECT *,DATE_FORMAT(date,"%d-%m-%Y") datef FROM exif WHERE dossier='$doss' ORDER BY date ASC") or die(mysql_error()); // Requête SQL
    while($dnn = mysql_fetch_array($req))
    {
    ?>
    <li> <a href=" <?php echo $dir_nom;?>/big/<?php echo $dnn['image'];?>" rel="prettyPhoto[gallery2]" title="Le <?php echo $dnn['date'];?> à <?php echo $dnn['heure'];?> "><img src="<?php echo $dir_nom;?>/<?php echo $dnn['image'];?>" alt="Photo prise le <?php echo $dnn['date'];?> à <?php echo $dnn['heure'];?> par <?php echo $dnn['personne'];?> ""/></a></li>
    <?php
    }
    mysql_close();
    ?>

    merci
    1. peux-tu montrer le script - enfin la partie autout de la requête et l'appel à mysql ?
      1. merci de ta reponse mais il me donne c et erreur

        Parse error: syntax error, unexpected '%' in

        oui j affiche bien mes dates comme jj.mm.aaaa

        merci de ton aide
        1. Si ton champ date est bien du type datetime alors si, cette requête ordonne correctement les dates. Il n'y a pas de doute là-dessus.
          Et la requête
          "SELECT *,DATE_FORMAT(date,"%d-%m-%Y") datef FROM exif WHERE dossier='$doss' ORDER BY date ASC"

          t'affiche bien les dates rangées par ordre croissant sous la forme jj-mm-aaaa
          1. Tu n'utilises plus le champ heure et tu veux afficher l'heure ?

            Si j utilise encore l heure mais lors de l insertion dans ma base je l enregistre sous cette forme
            aaaa-mm-jj 00:00:00

            donc c est pour ca que je demande comment afficher

            si je fais tous simple

            $req = mysql_query("SELECT * FROM exif WHERE dossier='$doss' ORDER BY date ASC"

            l affichage n est pas correct il mais dans l order des jours et ne tiens pas compte du mois

            Merci de ta reponse
            1. donc je n utilise plus le champ heure
              et pour afficher l heure je fait coimment

              Tu n'utilises plus le champ heure et tu veux afficher l'heure ?
              J'ai du mal à comprendre....

              La fonction DATE_FORMAT marche aussi bien sur un champ de type date ou datetime. Et tu as le droit de lire toi-même la doc de mysql pour voir toutes les variantes de format possibles si tu veux afficher l'heure, maintenant que je t'ai indiqué quelle était la bonne fonction.
              1. merci de ta reponse

                Par contre j ai modifier le champ j ai mis datetime

                donc je n utilise plus le champ heure

                et pour afficher l heure je fait coimment pas de explode?

                merci de ton aide
                1. Pas besoin de faire un explode, je t'ai déjà donné la requête :
                  "SELECT *,DATE_FORMAT(date,"%d-%m-%y") datef FROM exif WHERE dossier='$doss' ORDER BY date ASC, heure ASC"

                  Ça fait à la fois le tri (ORDER BY) et la mise en forme (DATE_FORMAT) - utilise %y ou %Y suivant que tu veux 2 ou 4 chiffres (au début tu en montrais 2, maintenant tu en montres 4...)
                  [edit] DATE_FORMAT(date,"%d/%m/%y") si tu veux des slash plutôt que des tirets
                  1. merci de ta reponse

                    Donc apres pour l affichage correct je fais un explode de la date

                    et pour le tri croissant je fais comment?

                    merci de ton aide
                    1. Le champ 'date' doit en effet avoir un autre type de champ, tel que DATE ou DATETIME.
                      Plutôt que d'avoir un champ 'date' et un champ 'heure', l'information serait stockée directement dans ce nouveau champ.
                      Attention à bien former la valeur au moment de l'INSERT. Classiquement, le format attendu est "2012-06-13 19:55:45"
                      1. merci de votre reponse

                        Le champ date est un VARCHAR dois je lui donner un autre champs?

                        Ma date est sous la forme correct c est a dire 19/05/2012

                        Merci de votre aide
                        1. Bonsoir

                          J'étais en train d'écrire la même chose...

                          J'ajoute :

                          Comme ta date aura alors le format yyyy-mm-jj, il faudra la mettre en forme pour la récupérer :
                          "SELECT *,DATE_FORMAT(date,"%d-%m-%y") datef FROM exif WHERE dossier='$doss' ORDER BY date ASC, heure ASC"
                          1. Je suppose que le champ "date" est un VARCHAR et non un champ DATE ou DATETIME (voir même TIMESTAMP)
                            Puisqu'il s'agit d'un VARCHAR, c'est un tri alphabétique qui est effectué.