2014-09-06 24 views
-1

比方說,我有以下形式和PHP插入到MySQL數據庫的數據。如何將日期範圍保存爲數據庫中的單個記錄?

<form id="" class="" action="" method="post"> 
<input type="text" class="" name="name" id="" value="" /> 
<input type="text" class="" name="date" id="" value="" /> 
<input type="submit" class="" name="submit" value="Submit"> 
</form> 

<?php 
if (isset($_POST['submit'])) { 
    $name = mysql_real_escape_string(htmlspecialchars($_POST['name'])); 
    $date = mysql_real_escape_string(htmlspecialchars($_POST['date'])); 
    mysql_query("INSERT table SET name='$name', date='$date' "); 
} 
?> 

每次填寫和提交時,都會有一條記錄插入到數據庫中,其中有兩條數據。

這裏是我想要做的下一步。

<form id="" class="" action="" method="post"> 
<input type="text" class="" name="name" id="" value="" /> 
<input type="text" class="" name="date" id="" value="" /> 
<input type="text" class="" name="date2" id="" value="" /> 
<input type="submit" class="" name="submit" value="Submit"> 
</form> 

我想補充的日期範圍。如果一個人填寫了兩個日期字段並提交,我想在表格中輸入儘可能多的記錄,因爲他們選擇的日期範圍內有日期。在每個記錄中,名稱字段中將顯示相同的名稱,但每個記錄都會有不同的日期。

例如,如果有人在名稱字段中輸入joe,並在第一個日期字段中輸入09-08-2014,並在第二個日期字段中輸入09-12-2014,然後單擊提交...應該有5個表中的新記錄。

記錄1的名稱應爲joe,日期爲09-08-2014,記錄2的名稱應爲joe,日期爲09-09-2014,記錄3的名稱應爲joe,日期爲09 -10-2014,記錄4的名稱應爲joe,日期爲09-11-2014,記錄5的名稱應爲joe,日期爲09-12-2014。

如果該人員只填寫第一個日期字段並將第二個日期字段留空,則將帶有名稱和日期的單個記錄插入到表中。

怎麼會這樣做呢?

+0

這可能有助於數組的名字,如通過'$ _ POST ['日期'NAME = 「日期[]」',而不是'NAME = 「date2的」'然後循環']'數組,並根據日期是否填充來添加。 – Rasclatt 2014-09-06 05:01:44

+0

旁註:你的例子中的插入查詢是錯誤的 – Ghost 2014-09-06 05:05:34

+0

什麼是「插入(日期)」數據類型?是'DATETIME'嗎? – Ghost 2014-09-06 05:09:26

回答

1

首先注意:使用更好的擴展名,在這個例子中是mysqli_*。是的,這可以通過DatePeriod Class輕鬆完成。例如:

表單提交後:

$db = new mysqli('localhost', 'username', 'password', 'database'); 
$stmt = $db->prepare('INSERT INTO `table_name` (`name`, `date`) VALUES (?, ?)'); 

if(isset($_POST['submit'])) { 
    $name = $_POST['name']; 
    // provided the format is mm-dd-yyyy 
    $date = $_POST['date']; 
    $date2 = $_POST['date2']; 

    $begin = DateTime::createFromFormat('m-d-Y', $date); 
    $end = DateTime::createFromFormat('m-d-Y', $date2); 

    $interval = new DateInterval('P1D'); 
    $daterange = new DatePeriod($begin, $interval ,$end); 
    foreach($daterange as $dr) { 
     // ASSUMING your DATE column is DATETIME datatype 
     $stmt->bind_param('ss', $name, $dr->format('Y-m-d H:i:s')); 
     $stmt->execute(); 
    } 
} 

如果DATE1 == 09-08-2014和date2 == 2014年9月12日,那麼它會循環,直到該日期,並由此創建條目。

0

僞代碼:

$this_date = $date;

while ($this_date < $date2){ # save $name and $this_date to a new db record # increment $this_date by 1. See: adding one day to a date }