2015-02-24 44 views
0

我想发布已经从日期选择器填充到我的数据库的文本框的值,但我不断获取1970-01-01发布的值。我已经研究过这个,看不出我要出错的地方,下面是输入类型。格式化日期选择器发布到MySQL数据库

<label for="from">From:</label> 
<input type="text" id="from" name="from"> 
<label for="to">To:</label> 
<input type="text" id="to" name="to"> 

形式里面我再有:

$fromdate = date('Y-m-d', strtotime($_POST['from'])); 
$todate = date('Y-m-d', strtotime($_POST['to'])); 

$request = mysql_query("INSERT INTO messages (fromdate, todate) VALUES ('$fromdate', '$todate')") or die(mysql_error()); 

有谁知道我怎样才能解决这个问题?

谢谢

回答

1

你插入的是一个字符串。如果您将其插入DATE字段,则需要将其转换为日期。这个语法会根据您使用的数据库而有所不同。 MySQL为此使用STR_TO_DATE,而Oracle使用TO_DATE。如果我知道您使用的数据库类型,我可以帮助您构建查询。

编辑:这是你的代码。您需要在查询本身内部利用MySQL STR_TO_DATE函数。

$request = mysql_query("INSERT INTO messages (fromdate, todate) 
         VALUES (STR_TO_DATE(\''.$fromdate.'\',\'%Y-%m-%d\'), 
           STR_TO_DATE(\''.$todate.'\',\'%Y-%m-%d\')") 
or die(mysql_error()); 

另外,当你去生产时,用die()来处理mysql错误并不是一个好习惯。它可能会提供您不希望它们拥有的恶意用户信息。

+0

谢谢Michael,我正在使用MySQL。这只是一个做$ fromdate = date('Y-m-d',strtodate($ _ POST ['from']))的问题吗? – user2244961 2015-02-24 22:09:38

+0

已经尝试过,但现在它根本不张贴到数据库。我没有改变这些 - $ fromdate = date('Y-m-d',strtotime($ _ POST ['from'])); $ todate = date('Y-m-d',strtotime($ _ POST ['to']));我应该有吗? – user2244961 2015-02-24 22:31:32

+0

我认为我的答案中有一个语法错误。您需要转义任何您不想由PHP解析的单引号。我编辑了我的答案以反映这一点。另外,您可以很方便地看到您从POST数据获取的日期字符串类型。在SQL中使用STR_TO_DATE应该消除在PHP中执行任何日期操作的需要。 – 2015-02-25 01:46:59

1

strtotime()不能正确猜测格式的问题。

因此,你可以:

无论是格式化的DatePicker的标准输出: option-altField - 你可以忽略定期现场并传送到数据库的altField

或PHP输出格式化 代替strtotime($_POST['from']))可以使用像这样的东西

$myDate = DateTime::createFromFormat('date-time-format-from-datepicker',$_POST['from'])->format('Y-m-d') 

要做出正确格式的'date-time-format-from-datepicker',你可以se php date formatting symbols table - 这将需要一些时间,但它必须工作

+0

我试过重新格式化它,但现在没有向DB发布任何信息,为什么? – user2244961 2015-02-24 22:41:35

+0

尝试在插入到数据库之前转储日期重新格式化后获得的内容。可能它的格式仍然不正确。或者简单地转储您的查询并尝试在控制台中执行。也许你有插入执行的mysql警告。然后从mysql控制台启动“显示警告”并获取说明。 – 2015-02-24 22:51:23