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

PHP & Base de données Discussion :

Navigation dynamique selon date [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Par défaut Navigation dynamique selon date
    Bonjour à tous,
    je suis face à un petit souci pour un site que je suis en train de construire,

    c'est un site qui présente plusieurs évènements/manifestations (une dizaine)
    j'aimerai les classer dans ma navigation principale en fonction de la pertinence de chaque évènement, pour ne pas en favoriser un plutôt qu'un autre, j'aimerai que dès qu'un évènement est passé de date, qu'il se retrouve automatiquement en fin de navigation et que le prochain évènement à venir se mette en premier (classer les évènement dans ma navigation par date).

    J'ai fait une table dans ma base de donnée qui comporte :
    ID, EVENT (nom de l'évènement), DATE_FIN (la date de fin de l'évènement)

    voici le code PHP qui m'affiche la nav et qui marche:

    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
    <?
    				$select="SELECT * FROM nav ORDER BY DATE_FIN";
    				$result=mysql_query($select);
    				$navArray=array ();
    				//Boucle navigation
    				while ($row=mysql_fetch_array($result))
    				{
    				//affichage de chaque evenement classé par date de fin
    				$navArray[$row["ID"]]=$row["EVENT"];
    				}
    ?>   
    <ul id="nav">
    <?
    	//on génère le tableau et on affiche les données
    	foreach ($navArray as $keyNav=>$navItem)
    	{
    		if ($event==$keyNav) $navOn="class='navOn'";
    		else $navOn=NULL;
    		?>
    		<li><a id="nav<? echo $keyNav; ?>" <? echo $navOn ?> href="events.php?lang=<? if (empty ($lang)) echo "fr"; echo $lang ?>&event=<? echo $keyNav; ?>" ><? echo $navItem; ?></a></li>
    		<?
    	}
    ?>
    </ul>
    bien évidement le problème est que dès qu'une date est dépassée (si par exemple je met la date de hier dans ma base de donnée, l'évènement qui est associé reste en premier vu que je trie par date de fin...
    comment trier cela correctement ?

    Il faudrait aussi que chaque année je m'occupe de remettre les nouvelles dates de chaque évènement afin que ça soit toujours d'actualité et qu'il n'y ait pas de bug ?

    N'y a il pas une meilleure solution, des idées et suggestions à me proposer ?

    D'avance un grand merci pour votre aide
    Salutations

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Salut,

    Je n'ai pas vraiment saisi ton problème.

    bien évidement le problème est que dès qu'une date est dépassée (si par exemple je met la date de hier dans ma base de donnée, l'évènement qui est associé reste en premier vu que je trie par date de fin..
    Bah pour ça, en spécifiant une clause where dans ta requête, cela résout directement ton problème.

    Il faudrait aussi que chaque année je m'occupe de remettre les nouvelles dates de chaque évènement afin que ça soit toujours d'actualité et qu'il n'y ait pas de bug ?
    Là, j'ai pas compris.
    Tu voudrais dire que tous tes événements d'une année le sont pour toutes les années ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Par défaut
    Salut Xunil,
    merci d'avoir pris le temps de me répondre...

    en gros j'ai la navigation comme ceci et entre parenthèse, pour que tu comprenne mieux, je met en exemple les dates auxquels auront lieu ces évènements:

    "évènement 1" (du 7 septembre au 11 septembre 2009)
    "évènement 2" (du 9 novembre au 21 novembre 2009)
    "évènement 3" (du 15 février au 18 février 2010)
    etc...

    j'aimerais que dès que nous serons le 12 septembre, "l'évènement 1" viennent se mettre automatiquement en dernière position dans la navigation et que l'évènement 2 (qui sera le prochain sur le calendrier) vienne en première position et ainsi de suite...

    chaque fois qu'un événement est passé de date qu'il se mette en dernière position et que tous mes évènement soient classé par ordre chronologique... les prochains dans le temps en premier et ainsi de suite jusqu'au plus éloigné dans le temps en dernier.

    le problème c'est que les dates ne sont jamais fixes d'années en années,les évènements auront tous lieu d'année en année à la même période mais les dates changent) "l'évènement 1" en 2010 aura lieu du 6 septembre au 10 septembre 2010 et non comme en 2009 du 7 septembre au 11 septembre.

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    En fait ce n'est pas vraiment comme ça qu'on fait la requête, car ton problème n'est pas faisable en un seul SELECT

    On sélectionnera plutot : tous les événements dont la date de fin est plus tard qu'aujourd'hui et classés par date (dé)croissante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT * FROM matable WHERE date_end > NOW() ORDER BY date_start ASC";

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Par défaut
    merci darkstar,
    ok mais en faisant comme tu dis je n'ai plus les autres évènement (ceux passé de date) qui s'affichent, or le but est qu'ils y figurent tous et tout le temps (c'est la navigation principale du site).

    EDIT: c'est tout bon j'ai trouvé. je fais une deuxième boucle pour récupérer et afficher les évènements passé de date

    merci pour votre aide et meilleures salutations
    Bonne journée à vous tous

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Il est également possible de récupérer tous les événements, de les récupérer dans un array et d'ensuite les ordonners à partir de cet array...

    c'est pas forcément plus facile mais par contre ça ne prend qu'une seule requête ^^

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

Discussions similaires

  1. [Serialisation] Comment faire dynamiquement selon le type ?
    Par eric.charbonnier dans le forum Framework .NET
    Réponses: 7
    Dernier message: 01/02/2008, 15h17
  2. comment calculer l'âge selon date naissance
    Par walid_kerkoub dans le forum Delphi
    Réponses: 8
    Dernier message: 31/07/2007, 12h09
  3. [AJAX] Navigation Dynamique ..
    Par iwf-fr dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/04/2007, 17h37
  4. Tableau croisé dynamique et date
    Par delcroixf dans le forum Access
    Réponses: 7
    Dernier message: 31/01/2007, 16h24
  5. [Access] dernier enregistrement selon date
    Par sebos21 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/05/2006, 18h31

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