Javascript 有没有办法在mysql数据库表中插入一系列日期
我正在使用一个表格供用户通过我的网站预订假期住宿,预订详细信息包括公寓、入住、退房日期以及使用日期差异功能计算的总天数。我还使用for循环在签入和签出日期之间进行迭代,然后生成一系列日期。问题是,当我对mysql执行insert查询时,只有范围中的结束日期被插入到数据库表中。我的目标是将整个范围插入mysql,以便禁用日期选择器上已预订的日期。谁能告诉我我做错了什么,请看下面我的代码 我已经尝试使用date period对象,并在phpmyadmin中探索了日期范围字段的所有数据类型 我还尝试为日期范围使用单独的表Javascript 有没有办法在mysql数据库表中插入一系列日期,javascript,php,ajax,Javascript,Php,Ajax,我正在使用一个表格供用户通过我的网站预订假期住宿,预订详细信息包括公寓、入住、退房日期以及使用日期差异功能计算的总天数。我还使用for循环在签入和签出日期之间进行迭代,然后生成一系列日期。问题是,当我对mysql执行insert查询时,只有范围中的结束日期被插入到数据库表中。我的目标是将整个范围插入mysql,以便禁用日期选择器上已预订的日期。谁能告诉我我做错了什么,请看下面我的代码 我已经尝试使用date period对象,并在phpmyadmin中探索了日期范围字段的所有数据类型 我还尝试为
if(isset($_POST['apmt'])){
$value = $_POST['apmt'];
$ds = $_POST['ds'];
$de = $_POST['de'];
$d = $_POST['d'];
try{
$dateb = $de;
$datea = $ds;
for ($i = $datea; $i <= $dateb; $i++)
{
$dr = date("Y-m-d", strtotime($i));
}
$query = "INSERT INTO bookings SET apmt = :apmt, dateStart = :dateStart, dateEnd = :dateEnd, dateRange = :dateRange, totalDays = :totalDays, date = NOW(), clientID = '".$_SESSION['ID']."' ";
$s = $pdo->prepare($query);
$s->bindvalue(":apmt", $value);
$s->bindvalue(":dateStart", $ds);
$s->bindvalue(":dateEnd", $de);
$s->bindvalue(":dateRange", $dr);
$s->bindvalue(":totalDays", $d);
$s->execute();
$id = $pdo->lastInsertId();
if($id > 0 ){
$table = "";
$table .= '<table style="text-align:center;width:100%;margin:auto"><tr><th>APARTMENT</th><th>DATE START</th><th>DATE END</th><th>DAYS</th></tr>';
$table .= '<tr><td>' .$value. '</td>';
$table .= '<td>' .$ds. '</td>';
$table .= '<td>' .$de. '</td>';
$table .= '<td>' .$d. '</td>';
$table .= '</tr></table>';
echo $table ."</br>";
}
}
catch (PDOException $e) {
$output = "Unable to connect to database server" . $e->getMessage();
echo "$output";
exit();
}
}
因此,您定义的问题来自于for循环,它给出了意外的结果,您在每次迭代后分配$br的值,这就是为什么在循环完成时,最后一个日期存储在$br中 我推荐以下解决方案,因为它将是以后最容易操作的解决方案,并为您提供最干净的代码。通过使用数组替换$br,您可以在每次迭代后向其追加一项。当插入到数据库中时,使用该函数可以按照您想要的方式对其进行字符串化,而无需使用粗糙的字符串操作
$dr = [];
for ($i = $datea; $i <= $dateb; $i++)
{
array_push($dr, date("Y-m-d", strtotime($i)));
}
进一步建议
在使用问题中略微暗示的SQL日期模式的情况下,存储范围不是默认值。因此,存储为文本或Varchar可能是您最好的选择,然后遍历字符串date、date、date的范围,并分别为每个分解的字符串创建一个新的日期PHP对象。如果您包括表模式,并给我们一些示例和预期结果,这将有所帮助谢谢@user3035660,意义重大。你会考虑选择这个答案吗?谢谢,@user3035660
$drString = implode(',', $dr) # (String) "date,date,date,date"