假设我有以下形式和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' ");
}
?>
每次填写并提交时,一条记录将被插入到包含2条数据的数据库中。
这是我接下来要做的事情。
<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应具有乔的名称和日期09-08-2014,记录2应具有乔的名称和日期09-09-2014,记录3应具有乔的名称和日期09- 10-2014,记录4应具有乔的名称和日期09-11-2014,记录5应具有乔的名称和日期09-12-2014。
如果此人只填写第一个日期字段并将第二个字段留空,则会将一个带有名称和日期的记录插入表格中。
怎么会这样呢?
答案 0 :(得分: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 == 09-12-2014,那么它将循环到那个日期,从而创建条目。
答案 1 :(得分: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
}