PHP mysql insérer le format de la date
Im en utilisant datepicker de jQuery
le format du lecteur de données est ce 08/25/2012
j'ai des erreurs en insérant à ma base de données il insère seulement 0000-00-00 00 00 00 00
mes codes sont
<?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 insert est correct....
8 réponses
Comme indiqué dans la Date et le Temps de Littéraux :
MySQL reconnaît
DATE
valeurs dans ces formats:
sous forme de chaîne de caractères au format
'YYYY-MM-DD'
ou'YY-MM-DD'
. Une syntaxe "décontractée" est permise: 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'2012@12@31'
sont équivalents.en tant que chaîne de caractères sans délimiteurs au format
'YYYYMMDD'
ou'YYMMDD'
, à condition que la chaîne de caractères 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 a des parties insensées de mois et de jour) et devient'0000-00-00'
.comme un nombre dans l'un ou l'autre
YYYYMMDD
ouYYMMDD
format, à condition que le nombre de sens que comme une date. Par exemple,19830905
et830905
sont interprétés comme'1983-09-05'
.
par conséquent, la chaîne de caractères '08/25/2012'
n'est pas une date MySQL littérale valide. Vous avez quatre options (dans un ordre de préférence vague, sans aucune information supplémentaire de vos exigences):
-
Configurer Datepicker pour fournir les dates dans un format pris en charge à l'aide d'un
altField
avec sesaltFormat
option :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
ou, si vous êtes heureux pour les utilisateurs de voir la date dans le format
YYYY-MM-DD
, il suffit de définir ledateFormat
option à la place:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
utiliser MySQL
STR_TO_DATE()
fonction pour convertir la chaîne de caractères: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
DateTime
objet:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
et ensuite:
-
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 fonction de MySQL
FROM_UNIXTIME()
1519580920 "fonction:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
manipuler 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 être à l'aide de préparées , dans lequel vous passez vos variables comme paramètres qui ne sont pas évaluées pour SQL. Si vous ne savez pas de quoi je parle, ou comment le corriger, lisez l'histoire de Bobby Tables .
-
aussi, comme indiqué dans l'introduction à le chapitre du manuel PHP sur les fonctions
mysql_*
:cette extension est dépréciée à partir de PHP 5.5.0, et n'est pas recommandée pour écrire un nouveau code car il sera supprimé dans le futur. À la place, l'extension mysqli ou PDO_MySQL devrait être utilisée. Voir aussi le aperçu de L'API MySQL pour plus d'aide lors du choix d'une API MySQL.
-
vous semblez utiliser soit une colonne
DATETIME
ouTIMESTAMP
pour maintenir une valeur de date; je vous recommande d'envisager D'utiliser le typeDATE
de MySQL à la place. Comme expliqué dans lesDATE
,DATETIME
, etTIMESTAMP
Types :le type
DATE
est utilisé pour les valeurs avec une partie date mais pas de partie temps. MySQL récupère et affiche les valeurs de DATE dans'YYYY-MM-DD'
format. La gamme supportée est'1000-01-01'
à'9999-12-31'
.le type
DATETIME
est utilisé pour les valeurs qui contiennent à la fois des parties date et heure. MySQL récupère et affiche les valeursDATETIME
au format'YYYY-MM-DD HH:MM:SS'
. La gamme prise en charge est'1000-01-01 00:00:00'
à'9999-12-31 23:59:59'
.le type de données
TIMESTAMP
est utilisé pour les valeurs qui contiennent à la fois des parties date et heure.TIMESTAMP
a une gamme 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 witk 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 la date est AAAA-MM-JJ sur votre sortie jQuery. Je peux voir les retours jQuery MM-JJ-YYYY, qui n'est pas valide format Date MySQL et c'est pourquoi il retourne une erreur.
pour le convertir à droite, vous pouvez faire ceci:
$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];
ensuite, vous obtiendrez la date formatée qui sera valide format MySQL, qui est AAAA-MM-JJ, i.e. 2012-08-25
je recommande également d'utiliser mysql_real_escape_string comme vous insérez des données dans la base de données pour prévenir injections SQL comme une solution rapide ou mieux utiliser AOP ou MySQLi .
votre requête insert en 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() );
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());
un objet date du jquery sélecteur de date à l'aide de
var myDate = $('element').datepicker('getDate')
Pour mysql, la date doit être dans le format approprié. Une option qui gère les problèmes de fuseau horaire est d'utiliser moment.js
moment(myDate).format('YYYY-MM-DD HH:mm:ss')
Essayez quelque chose comme ça..
echo "The time is " . date("2:50:20");
$d=strtotime("3.00pm july 28 2014");
echo "Created date is " . date("d-m-y h:i:sa",$d);
tout d'Abord, le magasin $date=$_POST['your date field name'];
insert into **Your_Table Name** values('$date',**other fields**);
Vous devez indiquer la date unique de la côte (' ')
j'espère que c'est utile.