J'utilise jQuery datepicker Le format du datepicker est le suivant: 08/25/2012
j'ai des erreurs lors de l'insertion dans ma base de données, il insère seulement 0000-00-00 00 00 00
mes codes est
<?php
$id = $_POST['id'];
$name = $_POST['name'];
$date = $_POST['date'];
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '$name', '$date')" ) or die ( mysql_error() );
echo 'insert successful';
?>
je suis sûr que mon insertion est correcte ....
Comme indiqué dans Date et heure, littéraux :
MySQL reconnaît les valeurs
DATE
dans les formats suivants:
En tant que chaîne au format
'YYYY-MM-DD'
ou'YY-MM-DD'
. Une syntaxe «assouplie» est autorisée: tout caractère de ponctuation peut être utilisé comme séparateur entre les parties de date. Par exemple,'2012-12-31'
,'2012/12/31'
,'2012^12^31'
et'2012@12@31'
sont équivalents.En tant que chaîne sans séparateurs au format
'YYYYMMDD'
ou'YYMMDD'
, à condition que la chaîne ait un sens en tant que date. Par exemple,'20070523'
et'070523'
sont interprétés comme étant'2007-05-23'
, mais'071332'
est illégal (il comporte des parties de mois et de jour insensées) et devient'0000-00-00'
.Sous forme de nombre au format
YYYYMMDD
ouYYMMDD
, à 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 aucune information supplémentaire sur vos besoins):
Configurez Datepicker pour fournir les dates dans un format pris en charge à l'aide de altField
avec son option altFormat
:
<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 YYYY-MM-DD
, définissez simplement l'option dateFormat
à la place:
$( "selector" ).datepicker({
dateFormat: "yyyy-mm-dd"
});
Utilisez la fonction STR_TO_DATE()
de MySQL 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, par exemple un DateTime
object:
$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
et ensuite soit:
obtenir une chaîne formatée appropriée:
$date = $dt->format('Y-m-d');
obtenir le timestamp UNIX:
$timestamp = $dt->getTimestamp();
qui est ensuite passé directement à la FROM_UNIXTIME()
function de MySQL:
INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
Manipulez manuellement la chaîne en un littéral valide:
$parts = explode('/', $_POST['date']);
$date = "$parts[2]-$parts[0]-$parts[1]";
Votre code est vulnérable à l'injection SQL. Vous vraiment devriez utiliser les instructions préparées , dans lesquelles vous transmettez vos variables en tant que paramètres non évalués pour SQL. Si vous ne savez pas de quoi je parle ou comment y remédier, lisez l'histoire de Bobby Tables .
En outre, comme indiqué dans l’introduction du chapitre du manuel PHP sur les fonctions mysql_*
:
Cette extension est obsolète à partir de PHP 5.5.0 et n'est pas recommandée pour l'écriture de nouveau code car il sera supprimé à l'avenir. À la place, vous devez utiliser l’extension mysqli ou PDO_MySQL . Consultez également le Vue d'ensemble de l'API MySQL pour obtenir de l'aide supplémentaire lors du choix d'une API MySQL.
Vous semblez utiliser une colonne DATETIME
ou TIMESTAMP
pour conserver une valeur de date; Je vous recommande d'utiliser plutôt le type DATE
de MySQL. Comme expliqué dans Les types DATE
, DATETIME
et TIMESTAMP
:
Le type
DATE
est utilisé pour les valeurs avec une partie date mais aucune partie heure. MySQL récupère et affiche les valeurs DATE au format'YYYY-MM-DD'
. La plage prise en charge va de'1000-01-01'
à'9999-12-31'
.Le type
DATETIME
est utilisé pour les valeurs contenant des parties de date et d'heure. MySQL récupère et affiche les valeursDATETIME
au format'YYYY-MM-DD HH:MM:SS'
. La plage prise en charge va de'1000-01-01 00:00:00'
à'9999-12-31 23:59:59'
.Le type de données
TIMESTAMP
est utilisé pour les valeurs contenant 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.
Vous devriez envisager de créer un horodatage à partir de cette date avec mktime ()
par exemple:
$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );
$date_field = date('Y-m-d',strtotime($_POST['date_field']));
$sql = mysql_query("INSERT INTO user_date (column_name,column_name,column_name) VALUES('',$name,$date_field)") or die (mysql_error());
Vous devez vous assurer que le format de date est AAAA-MM-JJ sur votre sortie jQuery. Je peux voir que jQuery renvoie MM-DD-YYYY, ce qui n’est pas le format valide de la date MySQL et c’est pourquoi il renvoie une erreur.
Pour le convertir à droite, vous pouvez faire ceci:
$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];
Ensuite, vous obtiendrez une date formatée qui sera un format MySQL valide, à savoir AAAA-MM-JJ, c'est-à-dire 2012-08-25
Je vous recommanderais également d'utiliser mysql_real_escape_string lorsque vous insérez des données dans la base de données pour éviter les injections SQL comme solution rapide ou pour mieux utiliser PDO ou MySQLi .
Votre requête d'insertion utilisant mysql_real_escape_string
devrait plutôt ressembler à ceci:
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );
Obtenir un objet date à partir du sélecteur de date jquery à l'aide de
var myDate = $('element').datepicker('getDate')
Pour mysql, la date doit être au bon format. Une option qui gère les problèmes de fuseau horaire consiste à utiliser moment.js.
moment(myDate).format('YYYY-MM-DD HH:mm:ss')
La méthode la plus simple est
$dateArray = explode('/', $_POST['date']);
$date = $dateArray[2].'-'.$dateArray[0].'-'.$dateArray[1];
$sql = mysql_query("INSERT INTO user_date (column,column,column) VALUES('',$name,$date)") or die (mysql_error());