Comme indiqué dans Littéraux de date et d'heure :
MySQL reconnaît
DATE
valeurs dans ces formats :
Sous forme de chaîne au format
'YYYY-MM-DD'
ou'AA-MM-JJ'
format. Une syntaxe "assouplie" est autorisée :tout caractère de ponctuation peut être utilisé comme délimiteur entre les parties de date. Par exemple,'2012-12-31'
,'2012/12/31'
,'2012^12^31'
, et'[email protected] @31'
sont équivalents.Sous forme de chaîne sans délimiteurs dans l'un ou l'autre
'YYYYMMDD'
ou'AAMMJJ'
format, à condition que la chaîne ait un sens en tant que date. Par exemple,'20070523'
et'070523'
sont interprétés comme'2007-05-23'
, mais'071332'
est illégal (il contient des parties de mois et de jour qui n'ont pas de sens) et devient'0000-00-00'
.Sous forme de nombre au format
AAAAMMJJ
ouAAMMJJ
format, à condition que le nombre ait un sens en tant que date. Par exemple,19830905
et830905
sont interprétés comme'1983-09-05'
.
Par conséquent, la chaîne '08/25/2012'
n'est pas un littéral de date MySQL valide. Vous avez quatre options (dans un vague ordre de préférence, sans autre information sur vos besoins) :
-
Configurez Datepicker pour fournir des dates dans un format pris en charge à l'aide d'un
altField
avec sonaltFormat
possibilité :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
Ou, si vous souhaitez que les utilisateurs voient la date au format
AAAA-MM-JJ
format, définissez simplement ledateFormat
possibilité à la place :$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Utilisez MySQL
STR_TO_DATE( )
fonction pour convertir la chaîne :INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
Convertissez la chaîne reçue de jQuery en quelque chose que PHP comprend comme une date, comme un
DateHeure
objet :$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
puis soit :
-
obtenir une chaîne formatée appropriée :
$date = $dt->format('Y-m-d');
-
obtenir l'horodatage UNIX :
$timestamp = $dt->getTimestamp();
qui est ensuite transmis directement au
FROM_UNIXTIME()
fonction :INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipulez manuellement la chaîne dans un littéral valide :
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Avertissement
-
Votre code est vulnérable à l'injection SQL. Vous vraiment devrait utiliser instructions préparées , dans lequel vous transmettez vos variables en tant que paramètres qui ne sont pas évalués pour SQL. Si vous ne savez pas de quoi je parle ou comment y remédier, lisez l'histoire de Bobby Tables .
-
Aussi, comme indiqué dans l'introduction au chapitre du manuel PHP sur
mysql_*
fonctions :Cette extension est obsolète depuis PHP 5.5.0 et n'est pas recommandée pour l'écriture de nouveau code car elle sera supprimée à l'avenir. Au lieu de cela, soit le mysqli ou PDO_MySQL l'extension doit être utilisée. Voir aussi la Présentation de l'API MySQL pour plus d'aide lors du choix d'une API MySQL.
-
Vous semblez utiliser soit un
DATETIME
ouTIMESTAMP
colonne pour contenir une valeur de date ; Je vous recommande d'utiliser leDATE
de MySQL tapez à la place. Comme expliqué dans LaDATE
,DATEHEURE
, etTIMESTAMP
Genre :La
DATE
type est utilisé pour les valeurs avec une partie date mais pas de partie heure. MySQL récupère et affiche les valeurs DATE dans'YYYY-MM-DD'
format. La plage prise en charge est'1000-01-01'
à'9999-12-31'
.Le
DATETIME
type est utilisé pour les valeurs qui contiennent à la fois des parties de date et d'heure. MySQL récupère et afficheDATETIME
valeurs en'AAAA-MM-JJ HH:MM:SS'
format. La plage prise en charge est'1000-01-01 00:00:00'
à'9999-12-31 23:59:59'
.Le
TIMESTAMP
Le type de données est utilisé pour les valeurs qui contiennent à la fois des parties de date et d'heure.TIMESTAMP
a une plage de'1970-01-01 00:00:01'
UTC à'2038-01-19 03:14:07'
UTC.