如何将日期范围保存为数据库中的单个记录?

时间:2014-09-06 04:58:50

标签: php html mysql date

假设我有以下形式和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。

如果此人只填写第一个日期字段并将第二个字段留空,则会将一个带有名称和日期的记录插入表格中。

怎么会这样呢?

2 个答案:

答案 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 }