Page 1 sur 1

Affichage d'événements à venir

Posté : 24 août 2009, 21:13
par Invité
Bonjour,

Je suis nouveau et je viens vous embêter :P (un petit peu)

Je souhaiterais afficher sur ma page une sorte de mini agenda qui m'afficherait des événements à venir (dans la limite de 2 ou 3 pour l'instant, même si ma base de données en contient beaucoup plus).

Dans ma BDD, il devrait y avoir une table 'representations' avec les champs id, date, et lieu.
Comment organiser ? Un champ VARCHAR pour le lieu, et un DATE pour la date ? Sous quel format envoyé la date à partir de la requête INSERT INTO dans ma page php ?
Et dans ma page où doit s'afficher les 2 prochains événements à venir (et pas ceux qui sont passés), la requête SQL doit être comme ceci :

Code : Tout sélectionner

SELECT * FROM representations WHERE 'date' >= current_timestamp ORDER BY date DESC
(merci à J-L).

Merci d'avance à ceux qui prendront le temps (s'il y en a :lol: ) de m'aider.

Re: Affichage d'événements à venir

Posté : 24 août 2009, 21:39
par charabia
Pour la date tu peux utiliser un format INT(11) dans ta table et l'enregistrement se fera en timestamp avec time() que tu pourras facilement manipuler, comparer...etc

Et donc ta requête sera
mysql_query("SELECT * FROM representations WHERE date >= '".time()."' ORDER BY date DESC")

Re: Affichage d'événements à venir

Posté : 24 août 2009, 22:18
par AB
EDIT :J'avais pas vu la réponse de charabia.
Voici donc une autre méthode :
Comment organiser ? Un champ VARCHAR pour le lieu, et un DATE pour la date ? Sous quel format envoyé la date à partir de la requête INSERT INTO dans ma page php ?
Il faut insérer ta date au format date aaaa-mm-jj pour pouvoir ensuite utiliser les fonctions de tri mysql.

Et dans ma page où doit s'afficher les 2 prochains événements à venir (et pas ceux qui sont passés), la requête SQL doit être comme ceci :

Code : Tout sélectionner

SELECT * FROM representations WHERE 'date' >= current_timestamp ORDER BY date DESC
(merci à J-L).
Je ferais plutôt comme ci-dessous (avec éventuellement LIMIT 2 pour ne retourner que les 2 prochains évènements)
SELECT * FROM representations WHERE date > NOW() ORDER BY date ASC LIMIT 2

Re: Affichage d'événements à venir

Posté : 25 août 2009, 12:29
par Invité
Ok, merci pour vos explications et votre réactivité.
Ma BDD me renvoie les infos souhaitées, c'est super, la requête est bien mieux avec LIMIT 2, j'y avais pensé hier soir ! (la nuit porte conseil)
:wink:

Re: Affichage d'événements à venir

Posté : 25 août 2009, 14:39
par Ryle
Modération :
Puisque ta question est résolue, je l'indique en ajoutant la petite icône verte "Résolu" pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.

Tu peux réaliser cette opération toi-même en cliquant sur le bouton Image en haut à droite de la réponse qui te semble la plus pertinente, si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

Re: Affichage d'événements à venir

Posté : 26 août 2009, 22:07
par jean.miche
Et bien merci. Je m'étais pourtant inscrit... pourtant...

Enfin bref, MERCI à vous :D

Jean Miche

Re: Affichage d'événements à venir

Posté : 27 août 2009, 16:43
par jean.miche
Finalement j'ai un nouveau soucis ...

La page m'affiche toujours les representations passées celle d'hier par exemple... je sui sûr que ça vient de ma requête.
SELECT * FROM representations WHERE 'date' >= CURRENT_DATE() ORDER BY date LIMIT 2
à la place de CURRENT_DATE(), j'ai essayé avec DATE(), CURDATE(), ou même NOW(), mais ça ne marche dans aucun des cas. Ca m'affiche toujours la représentation d'hier soir.

Re: Affichage d'événements à venir

Posté : 27 août 2009, 19:04
par charabia
Quel est le format du champ date de ta table ?

Re: Affichage d'événements à venir

Posté : 27 août 2009, 19:26
par jean.miche
Dans ma base, la date est de style DATE, au format AAAA-MM-JJ.

Sur ma page je renvoie la date au format français par contre :
<?php echo date("d-m-Y", strtotime($ligne["date"])); ?>

Re: Affichage d'événements à venir

Posté : 27 août 2009, 19:45
par jean.miche
Ok j'ai trouvé... et y'a de quoi grincer des dents...
Relisez ma requête :

Code : Tout sélectionner

SELECT * FROM representations WHERE 'date' >= CURRENT_DATE() ORDER BY date LIMIT 2
La faute était due aux quote autour du nom de la table date. Rageant.
Merci à vous pour tout !

Mais puis-je vous poser une autre question ?
La page me retourne des � pour chaque caractère spécial.
Ma page est en utf-8 dans le head :

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Et dans ma base, l'interclassement du champ lieu est latin1_swedish_ci.
J'ai trouvé une "astuce" qui permettrait d'afficher les caractères correctement en ajoutant

Code : Tout sélectionner

mysql_query("SET NAMES UTF8");
Est-ce possible de la sorte car je n'y arrive pas (oui je suis un boulet...), ou sinon, je l'ai mal placé (dans ma page php sous ma requête)

Merci d'avance.

Re: Affichage d'événements à venir

Posté : 27 août 2009, 21:55
par AB
Pour les quotes autour du champ 'date' qui faisaient bugguer ta requête, remarque que je les avaient enlevées dans ma précédente proposition de requête :wink:
J'avais employé NOW() qui fonctionne d'une manière générale avec les champs au format date ou datetime mais CURRENT_DATE() est suffisant pour les champs date et donc légèrement plus approprié.

Pour l'UTF-8, il y a un tuto ici

Effectivement mettre la ligne mysql_query("SET NAMES UTF8"); juste après la connexion à la base de donnée indique à mysql de travailler en utf-8 (pour l'instant paramétré par défaut en iso), mais cela ne t'empêches pas pour autant d'indiquer le bon format pour l'interclassement dans ton champ "lieu" : "utf-8 general ci" pour non sensble à la casse ou "utf-8 bin" pour sensible à la casse. C'est très facile depuis phpmyadmin.

Re: Affichage d'événements à venir

Posté : 27 août 2009, 22:49
par jean.miche
Je suis vraiment désolé de ne pas avoir vu ce détail de quotes plus tôt AB. Ca m'apprendra à être plus attentif...

En tous cas, merci pour tout, et puis oui, la prochaine fois je cocherai la petite coche verte en haut du sujet pour dire que vous avez été d'une super efficacité !

A+ :wink: