Discussion:
Mysql Format date
(trop ancien pour répondre)
Eric549
2009-07-22 22:07:56 UTC
Permalink
Bonjour,

j'ai une base de donnes Mysql et un formulaire php

Dans le formulaire , il faut saisir une date au format francais JJ/MM/
AAAA

ou Mysql ne reconnait que le format américain AAA/MM/JJ

Comment transformer cette date au format correct pour MySql

Merci pour vos réponses
Olivier Miakinen
2009-07-22 22:47:25 UTC
Permalink
Post by Eric549
Dans le formulaire , il faut saisir une date au format francais JJ/MM/
AAAA
ou Mysql ne reconnait que le format américain AAA/MM/JJ
Comment transformer cette date au format correct pour MySql
RTFM encore une fois !

D'abord je suis bien persuadé qu'il doit exister une méthode purement
SQL, que je ne connais pas, et qui n'est pas en charte ici (cf. la FAQ
dont je t'ai déjà donné le lien, ou la doc, ou en désespoir de cause le
groupe fr.comp.applications.sgdb).

Si tu veux vraiment le faire en PHP, tu n'as que l'embarras du choix,
entre les fonctions de traitement de chaînes de caractères (voir
<http://fr2.php.net/strings>) et celles traitant des expressions
rationnelles (voir <http://fr2.php.net/PCRE>).

Mais bon, commence par chercher du côté de SQL, c'est en général
beaucoup plus simple et beaucoup plus performant.

Cordialement,
--
Olivier Miakinen
Raoul B
2009-07-23 17:19:57 UTC
Permalink
Salut Eric549,

En réalité, il existe différentes solutions à ton problème. Tout
dépend de la manière dont tu récupères les valeurs de Jour, Mois et
Année à partir ton formulaire. Ici, je t'en propose deux.

Avant tout, saches que le format de dat de mysql est le suivant :
aaaa-mm-dd (année sur 4chiffres et mois, puis jours sur deux
chiffres le tout séparés par des tirets).

METHODE 1 :

Dans ton formulaire, veille à récupérer chacune des trois valeurs
individuellement. Assures-toi que les attributs 'value' des tes
balises html ont bien pour valeur des nombres à 4 chiffres pour
l'année et à 2 chiffres pour les jour et les mois. Ainsi pour février
par exemple, mets value="02" au lieu de value="2".

Dans ton formulaire HTML, tu auras par exemple :

<select name="jour">
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
...
<option value="30">30</option>
<option value="31">31</option>
</select>


<select name="mois">
<option value="01">Janvier</option>
<option value="02">F&eacute;vrier</option>
<option value="03">Mars</option>
...
<option value="11">Novembre</option>
<option value="12">D&eacute;cembre</option>
</select>

<select name="annee">
<option value="1975">1975</option>
<option value="1976">1976</option>
<option value="1977">1977</option>
...
<option value="2008">2008</option>
<option value="2009">2009</option>
</select>

Puis dans ton code PHP : après avoir fait tous tes contrôles, tu
récupère les valeurs ainsi :

$jour = $_POST['jour'];
$mois = $_POST['mois'];
$annee = $_POST['annee'];

Puis tu concatènes le tout au format de date MySQL :

$dateSql = $annee.'-'.$mois.'-'.$jour;

Evidemment, tu aurais pu y aller directement en faisant :

$dateSql = $_POST['annee'].'-'.$_POST['mois'].'-'.$_POST['jour'];

Tu vois que c'est finalement très simple en y allant manuellement.


METHODE 2 :

Dans ton formulaire, tu récupères les trois valeurs en une fois.
Assures-toi de préciser au visiteur le format "jjmmaaa".

Dans ton formulaire HTML, tu auras par exemple :

Date de naissance : <input type="text" name="datenais" size="10"
maxlength="8" value="" /> (Entrez la date au format <strong>jjmmaaaa</
strong>)

Puis dans ton code PHP : après avoir fait tous tes contrôles, tu
récupère les valeurs ainsi :

$datenais = trim($_POST['datenais']); // trim sert à effacer les
espaces avant et après le texte entré).

$annee = substr($datenais, 4);
$mois = substr($datenais, 2, 2);
$jour = substr($datenais, 0, 2);

(Tu peux en savoir plus sur la fonction substr sur :
http://www.php.net/manual/fr/function.substr.php )

Puis tu concatènes le tout au format de date MySQL :

$dateSql = $annee.'-'.$mois.'-'.$jour;

OK Eric, j'espère t'avoir aidé. Si jamais cela résoud ton problème,
n'oublie pas de mentionné que le problème a été résolu. Sinon,
j'attends ta réponse ou alors tes questions. :)

PS: Petit conseil avant de terminer, veille a vérifier la valeur de la
date. En effet, le 30 février 1990 ou le 31 avril 2008 ne sont pas des
dates valides : elles n'existent pas dans le calendrier !

Pour cela utilise la fonction php : checkdate

if (!checkdate($mois, $jour, $annee)) {
//alors la date est invalide
echo 'La date n'est pas valide';
}
else {
//date valide
echo 'La date est valide';
}

Tu en sauras plus sur checkdate ici : http://www.php.net/manual/fr/function.checkdate.php

A bientôt et bon travail !

Raoul
Post by Eric549
Bonjour,
j'ai une base de donnes Mysql et un formulaire php
Dans le formulaire , il faut saisir  une date au format francais JJ/MM/
AAAA
ou Mysql ne reconnait que le format américain AAA/MM/JJ
Comment transformer cette date au format correct pour MySql
Merci pour vos réponses
Continuer la lecture sur narkive:
Loading...