[résolu]variables date

Eléphant du PHP | 103 Messages

18 juil. 2011, 16:18

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
Modifié en dernier par Jibe le 15 sept. 2011, 12:33, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juil. 2011, 17:03

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.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 103 Messages

18 juil. 2011, 17:10

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juil. 2011, 22:51

ben faut modifier la date hein, avec le second code :)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 103 Messages

19 juil. 2011, 10:04

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juil. 2011, 10:34

c'est format et pas Format, c'est sensible a la casse c'te p'tite chose la ;)

sinon c'est bon

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 103 Messages

19 juil. 2011, 10:46

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 ?

Eléphant du PHP | 103 Messages

19 juil. 2011, 11:06

Si quelqu'un à une solution, je suis preneur.

Merci

ViPHP
xTG
ViPHP | 7331 Messages

19 juil. 2011, 11:27

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. ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juil. 2011, 11:50

xTG : comment il fait sont where pour la requête lors du traitement du formulaire ? :)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 103 Messages

19 juil. 2011, 11:56

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

ViPHP
xTG
ViPHP | 7331 Messages

19 juil. 2011, 12:51

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. :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juil. 2011, 14:02

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 ;)

@+
Il en faut peu pour être heureux ......