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....

54
demandé sur Butternut 2012-08-25 12:30:12

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 ou YYMMDD format, à condition que le nombre de sens que comme une date. Par exemple, 19830905 et 830905 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):

  1. Configurer Datepicker pour fournir les dates dans un format pris en charge à l'aide d'un altField avec ses altFormat 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 le dateFormat option à la place:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. 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'))
    
  3. 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:

  4. manipuler manuellement la chaîne dans un littéral valide:

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

avertissement

  1. 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 .

  2. 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.

  3. vous semblez utiliser soit une colonne DATETIME ou TIMESTAMP pour maintenir une valeur de date; je vous recommande d'envisager D'utiliser le type DATE de MySQL à la place. Comme expliqué dans les DATE , DATETIME , et TIMESTAMP 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 valeurs DATETIME 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.

165
répondu eggyal 2017-05-23 12:02:41

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 );
10
répondu Mihai Iorga 2012-08-25 08:33:32
$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());
6
répondu Kishan Chauhan 2015-04-06 10:56:37

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() );
1
répondu Ilia Rostovtsev 2017-05-23 11:54:56

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());
0
répondu William Worley 2014-12-15 02:42:35

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')
0
répondu ykay 2015-08-17 08:14:22

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);
-2
répondu shubham prajapati 2014-07-28 10:19:39

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.

-2
répondu Anand Raj Mehta 2016-05-04 05:34:21