Page 1 sur 1

Champ DATE et php

Posté : 30 août 2007, 21:55
par Morkem
Bonjour,

Je voudrais réaliser un script qui affiche les membres qui ont leur anniversaire dans la semaine...

J'ai donc mis ceci dans mysql :

Code : Tout sélectionner

`anniversaire` date NOT NULL,
car apparemment je peux récuperer par la suite une semaine précise... MAIS je n'en suis pas encore là !!

Car en fait il faut avant tout que des gens s'inscrivent et mettent leur date de naissance. Et la c'est le drame car il doivent la mettre au format yyyymmdd et j'aimerais la mettre sous la forme ddmmyyyy.

J'ai un petit formulaire de cette forme :
<input name="anniversaire" type="text" id="anniversaire" />
et ensuite je traite les données avec un POST...

Bref que faut il mettre (et ou faut il le mettre) pour changer le format de date ?
J'ai bien essayer plusieurs truc de ce type la mais je trouve pas :
$anniversaire = date_format($_POST['anniversaire'], '%d.%c.%Y');

Posté : 30 août 2007, 23:46
par Sékiltoyai
Regarde avec strptime() et strftime() ou les autres fonctions de date.

Posté : 31 août 2007, 00:13
par Ryle
Morkem, le forum FAQ contient des explications détaillées sur ce sujet :
:arrow: Quelques petites manipulations avec les dates (PHP/MySQL)

Posté : 31 août 2007, 09:38
par Vikchill
Pense aussi à vérifier la validité de la date saisie (comme pour toutes les saisies d'ailleurs).

Posté : 31 août 2007, 10:09
par Morkem
Ba en fait je regarde pas mal de doc mais je ne vois pas comment appliquer :s

Comment entrer une date ddmmyyyy dans le input ? Lorsque c'est traité par la page suivante, le format n'est pas valide et il me remet 0000-00-00.

En fait je ne veux pas afficher de date sur le site mais formater le input pour que le membre la rentre de facon francaise.
Donc du coup je ne sais pas si je dois le mettre lors du traitement du POST
$anniversaire = $_POST['anniversaire'];
Ou lors de l'envoi a sql

Code : Tout sélectionner

mysql_query("INSERT INTO secretariat VALUES('', '".$nom."' , '".$prenom."' , '".$anniversaire."' ,...
Ou ailleurs :s Je vois de plus en plus de doc differente et je m'y perd de plus en plus :p

Posté : 31 août 2007, 10:20
par Ryle
Ben c'est vous qui voyez... y en a qu'on essayé, ils ont eu des problèmes, mais cela dit, il est très rapide ! :)

En bref, si tu as plus d'affinité avec sql tu peux le faire dans la requête, si tu te sens plus à l'aise avec php, découpe la chaine en php. Tu peux même le faire en javascript si tu veux, mais dans ce cas vaut mieux utiliser directement php pour pas avoir à recontrôler derrière.

L'utilisateur va se contenter de saisir une chaine de caractère qu'il te suffit ensuite de découper pour identifier jour mois et année et les remettre dans le bon ordre pour les insérer en base :)

Posté : 31 août 2007, 12:19
par Sékiltoyai
Au pire, avec une bonne pcre on coupe ça sans problème :)

Posté : 31 août 2007, 14:48
par Morkem
Oui mais vous parlez pour un VARCHAR la non ?

J'ai déjà utilisé un wordwrap donc je vois a peut pres ce que vous voulez dire par couper mais la j'ai un champ DATE... Et du coup il n'accepte rien d'autre que 20070831 par exemple.

J'aurais jamais cru que ca aurait été si compliqué de relever des anniversaires lol.

Posté : 31 août 2007, 15:24
par Ryle
Bah si cela peut te simplifier le principe, dis toi que ton champ DATE n'est rien de plus qu'un VARCHAR(10), dans lequel, pour des raisons d'uniformité tu souhaites stocker des chaines au format aaaa-mm-jj :)

Dans tous les cas, c'est une chaine de caractère que tu vas utiliser dans ta requête sql pour alimenter le champ.

Bon, supposons maintenant que tu demandes à l'utilisateur de saisir sa date d'anniversaire au format "jj/mm/aaaa" dans le champ. Tu peux facilement identifier dans ta chaine les 2 premiers caractères (qui correspondront au jour), les 4 et 5 (qui correspondront au mois) et les 7 à 10 (qui te donneront l'année). Et une fois ces trois valeurs extraites de la chaine d'origine, tu peux bien les réordonner pour former une nouvelle chaine qui correspondra au format souhaité :)

N'oublie pas qu'avant d'être une date, il s'agit avant tout d'une chaine de caractères. Il existe donc énormément de fonction pour les manipuler. Regarde du côté de substr() ou explode() pour ne citer que ces deux là :)

Maintenant, si tu connais un peu les expressions régulières, tu peux également te lancer dans un masque assez simple pour réordonner les éléments de ta chaine et obtenir ta date au format désiré :)