Page 1 sur 1

[résolu]variables date

Posté : 18 juil. 2011, 16:18
par Jibe
Bonjour,

J'ai un problème avec les dates en php / mysql.

Je suis en train de créer une application et j'ai quelques difficultés à afficher les informations dont j'ai besoin. Sous PhpmyAdmin j'ai une table avec 5 champs dont un champs date de la forme (Année-Mois-Jour). Dans mon application, j'aimerai que l'utilisateur puisse choisir un mois et une année (qui existe dans cette table) et quand il valide sortir les dernières informations qui correspondent.

Exemple :

Si dans ma table j'ai
1 | ... | ... | ... | 2011-05-10
2 | ... | ... | ... | 2011-05-22
3 | ... | ... | ... | 2011-06-05
4 | ... | ... | ... | 2011-06-16
5 | ... | ... | ... | 2011-06-19
6 | ... | ... | ... | 2011-06-24
7 | ... | ... | ... | 2011-07-04
8 | ... | ... | ... | 2011-07-11

J'aimerai afficher sur mon application une liste déroulante avec comme option (05/2011, 06/2011, 07/2011). Supposons que l'utilisateur sélectionne 06/2011, j'aimerai récupérer les dernières informations liées à ce mois, donc la ligne qui a pour date 2011-06-24. Est-ce possible ? Si oui comment ?

Merci

Re: variables date

Posté : 18 juil. 2011, 17:03
par moogli
salut,

il va falloir, faire plusieurs chose.
- formater la date en français pour un affichage qui va bien dans la liste
- mettre en value de l'option (de la liste) la "vrai" date

je n'ai pas très bien compris d'où proviennent les dates. est ce qu'il s'agit de toute les différentes dates qui se trouve dans la table ?
est ce que ces date sont liées a quelque chose en particulier ?

dans le premier je dirais que la liste déroulante peu se construire ainsi
<?php
// connexion au serveur mysql 
$requete = 'select distinct (lechampdate) as madate from latable';
$q = mysql_query($sql);
echo '<select name="listedesdates">
while ($d = mysql_fetch_assoc($q)) {
echo '<option value="',$d['madate'],'">',$d['madate'],'</option>';
}
mysql_free_result($q);
mysql_close();
?>
pour ce qui est de l'affichage de la date, plusieurs possibilités, l'explode, sur les /, ou utiliser la classe datetime pour faire la transformation ;)
par exemple (a adapter au dessus ;) )
<?php
$datefr = DateTime::createFromFormat('Y/m/d',$d['madate']);
echo $datefr->format('m-Y');
?>
dans le script de traitement tu récupère la date choisie dans $_POST['lisdesdates'], ce qui te permet de faire le select que tu souhaite avec la condition where.

@+

Re: variables date

Posté : 18 juil. 2011, 17:10
par Jibe
OK, merci je vais essayer ça.
Les dates sont ajoutées automatiquement dans la table. C'est lorsque l'on fait des modifications dans l'application, chaque modif est enregistrée avec sa date mais là du coup quand on sélectionne un mois il me faut juste les dernières infos (donc la dernière modif).

La solution que tu proposes pour la liste déroulante affiche le jour, le mois et l'année. Moi je voudrais juste le mois et l'année.

Re: variables date

Posté : 18 juil. 2011, 22:51
par moogli
ben faut modifier la date hein, avec le second code :)

@+

Re: variables date

Posté : 19 juil. 2011, 10:04
par Jibe
Oui désolé j'étais un peu fatigué hier soir !!
Du coup j'essaie tant bien que mal d'adapter mais j'ai une erreur.

Voici le code que j'utilise :
$requete = 'select distinct (date) as madate from l_collab_niv_scomp_hist';
$q = mysql_query($requete);
echo '<select name="listedesdates">';
while ($d = mysql_fetch_assoc($q)) {
$datefr = DateTime::createFromFormat('Y/m/d',$d['madate']);
echo '<option value="',$datefr,'">',$datefr->Format('m-Y'),'</option>';
}
L'erreur qui est retournée " Fatal error: Call to a member function Format() on a non-object in C:\wamp\www\Gest_comp_essai\php\fonction.php on line 27", la ligne 27 correspondant à la ligne du 2ème echo.

Re: variables date

Posté : 19 juil. 2011, 10:34
par moogli
c'est format et pas Format, c'est sensible a la casse c'te p'tite chose la ;)

sinon c'est bon

@+

Re: variables date

Posté : 19 juil. 2011, 10:46
par Jibe
Ca marche pas mieux :(

Du coup j'ai essayé comme ça :
echo '<select name="date" id="date" tabindex="20">';
$reponse = $bdd->query('SELECT DISTINCT date FROM l_collab_niv_scomp_hist ORDER BY date ASC'); 
while ($donnees = $reponse->fetch())
{
	$date = $donnees['date'];
	list($annee, $mois, $jour) = explode("-", $date); 
	echo '<option value="'.$date.'">' .$mois. '/'.$annee . '</option>';
}
Le problème qui se pose c'est que si dans ma base j'ai :
2011-07-10
2011-07-08
2011-05-04
2011-05-15

Dans les choix de la liste déroulante j'aurais :
07/2011
07/2011
05/2011
05/2011

Alors que je voudrais :
07/2011
05/2011

Une idée ?

Re: variables date

Posté : 19 juil. 2011, 11:06
par Jibe
Si quelqu'un à une solution, je suis preneur.

Merci

Re: variables date

Posté : 19 juil. 2011, 11:27
par xTG

Code : Tout sélectionner

SELECT DISTINCT DATE_FORMAT(date,'%c/%x') FROM l_collab_niv_scomp_hist ORDER BY date ASC
te donnera ce que tu souhaites. ;)

Re: variables date

Posté : 19 juil. 2011, 11:50
par moogli
xTG : comment il fait sont where pour la requête lors du traitement du formulaire ? :)


@+

Re: variables date

Posté : 19 juil. 2011, 11:56
par Jibe
Oui merci ça marche. Maintenant je vais me creuser pour la suite et je redemanderai de l'aide si je ne trouve pas.

Bonne journée

Re: variables date

Posté : 19 juil. 2011, 12:51
par xTG
xTG : comment il fait sont where pour la requête lors du traitement du formulaire ? :)


@+
Expliques ? J'ai relu le sujet mais je ne vois pas le problème. :)

Re: variables date

Posté : 19 juil. 2011, 14:02
par moogli
Ben a la base il voulait recuperer l'info du select pour afficher des données en fonction de la date et l'année, je trouvais plus simple de passer la date complète, apres sinon faut jouer en sql avec les mois et années mais pour le coup c'est un poil plus complexe en sql ;)

@+