在MySQL中将日期POST到datetime的正确方法

时间:2014-02-19 10:51:32

标签: php mysql forms date datetime

我创建了一个将数据发送到数据库的表单,所有字段都在工作,除了日期,我认为它与格式有关,但我不确定如何去做?

HTML

<dt>Date of Purchase</dt>
        <dd>
            <select id="date_of_purchase" name="entry[date_of_purchase]">
            <option value="">Month</option>
            <option value="Jan">Jan</option>
            <option value="Feb">Feb</option>
            <option value="Mar">Mar</option>
            </select>
            <select id="date_of_purchase" name="entry[date_of_purchase]">
            <option value="">Day</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            </select>
            <select id="date_of_purchase" name="entry[date_of_purchase]">
            <option value="">Year</option>
            <option value="2013">2013</option>
            <option value="2014">2014</option>
            <option value="2015">2015</option>
            <option value="2016">2016</option>
            </select>
    </dd>

PHP

$stmt = DB::query(Database::INSERT, 'INSERT INTO `registration` (`first_name`, `last_name`, `date_of_purchase`) VALUES (:first_name, :last_name, :date_of_purchase)');                  

$stmt->param(':first_name', $post['first_name']);
$stmt->param(':last_name', $post['last_name']);
$stmt->param(':date_of_purchase', $post['date_of_purchase']);

3 个答案:

答案 0 :(得分:2)

你应该为字段使用不同的名称

<dt>Date of Purchase</dt>
        <dd>
            <select id="month_of_purchase" name="month_of_purchase">
            <option value="">Month</option>
            <option value="Jan">Jan</option>
            <option value="Feb">Feb</option>
            <option value="Mar">Mar</option>
            </select>
            <select id="day_of_purchase" name="day_of_purchase">
            <option value="">Day</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            </select>
            <select id="year_of_purchase" name="year_of_purchase">
            <option value="">Year</option>
            <option value="2013">2013</option>
            <option value="2014">2014</option>
            <option value="2015">2015</option>
            <option value="2016">2016</option>
            </select>
    </dd>

然后将日期构建为

$stmt->param(':date_of_purchase', sprintf("%d-%d-%d", $post['day_of_purchase'], $post['month_of_purchase'], $post['year_of_purchase']));

(我假设$ post ['year_of_purchase']与$ _POST ['year_of_purchase']相同)

答案 1 :(得分:0)

将您的代码更改为以下内容:

HTML

<dt>Date of Purchase</dt>
        <dd>
            <select id="date_of_purchase" name="entry[month]">
            <option value="">Month</option>
            <option value="Jan">Jan</option>
            <option value="Feb">Feb</option>
            <option value="Mar">Mar</option>
            </select>
            <select id="date_of_purchase" name="entry[day]">
            <option value="">Day</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            </select>
            <select id="date_of_purchase" name="entry[year]">
            <option value="">Year</option>
            <option value="2013">2013</option>
            <option value="2014">2014</option>
            <option value="2015">2015</option>
            <option value="2016">2016</option>
            </select>
    </dd>

PHP

$stmt = DB::query(Database::INSERT, 'INSERT INTO `registration` (`first_name`, `last_name`, `date_of_purchase`) VALUES (:first_name, :last_name, :date_of_purchase)');                  

$stmt->param(':first_name', $post['first_name']);
$stmt->param(':last_name', $post['last_name']);
$stmt->param(':date_of_purchase', $post['month'] . $post['day'] . $post['year']); // Just an example, I am pretty sure this won't work, change it according to your database

答案 2 :(得分:0)

一种方法可以是:

//in PHP
//first : convert and valid the INPUT
try{
    $date = DateTime.CreateFromFormat("d-m-Y",$post["day"]."-".$post["month"]."-".$post['year']);
    //then you will convert it to MySQL format :
     $stmt = DB::query(Database::INSERT, 'INSERT INTO `registration` (`first_name`, `last_name`,  `date_of_purchase`) VALUES (:first_name, :last_name, :date_of_purchase)');                  

     $stmt->param(':first_name', $post['first_name']);
     $stmt->param(':last_name', $post['last_name']);
     $stmt->param(':date_of_purchase', $date->format("Y-m-d h:i:s"); 
}catch(Exception $e){
   //here re-ask the date because it is false
}