我制作了一个会议室预约系统,将会议室的预约情况用表格展示了出来,我想制作一个功能,点击表格中的空位即可预约这个空位所指的日期和时间。
我使用了form表单来传递数据,将表单夹在表格中,使用for循环输出表格的时候顺便输出多个表单时出现问题,所有表单传送的数据都是最后一个表格的
代码如下:
for($time=9;$time<18;$time++){
echo "<tr>";
echo "<td>";
if($time == 12){//跳过午休时段
$time = 14;
}
if($time == 9){//将9改为09
$timea = "0".$time;
}else{
$timea = $time;
}
$timeb = $time +1;
$time1 = $timea.":00:00";
$time2 = $timeb.":00:00";
//为了显示好看进行的格式修正
$timeshow1 = $timea.":00";
$timeshow2 = $timeb.":00";
echo $timeshow1."-".$timeshow2;
echo "</td>";
for($i=0;$i<5;$i++){//循环输出5天的预约情况
echo "<td>";
$datemark = 0;//日期匹配符
$timemark = 0;//时间匹配符号
//用(datemark,timemark)来判定,(0,x)和(1,0)都代表匹配失败,(1,1)匹配成功
$date = date("Y-m-d",strtotime("+$i day"));
foreach($rows as $row): //循环所有预约,进行3次判断,第一次判定日期,第二次判定开始时间,第三次判定结束时间
if($row['date'] == $date){
$datemark = 1;//日期匹配成功,日期匹配符置1
if($row['begintime'] < $time2){
if($row['finishtime'] > $time1){//这两次是在判断时间段是重叠/
if($row['mark'] == "通过"){//全部匹配成功并且预约以及通过
echo "已被占用";
$timemark = 1;
break;
}else if($row['mark'] == "待审批"){//全部匹配成功但是预约还没有被通过
?>
<form action="roomuse-create.php" method="POST">
<input type="hidden" name="rid" value=<?= $row['rid'] ?>>
<input type="hidden" name="rname" value=<?= $row['rname'] ?>>
<input type="text" name="date" value=<?= $date?>>
<input type="text" name="begintime" value=<?= $time ?>>
<input type="hidden" name="mark" value='1'>
<input type="submit" value="已被预约">
</from>
<?php
$timemark = 1;
break;
}
}
}
}
endforeach;
if($datemark == 0){//所有预约的日期都匹配失败,今天肯定空闲
?>
<form action="roomuse-create.php" method="POST">
<input type="hidden" name="rid" value=<?= $row['rid'] ?>>
<input type="hidden" name="rname" value=<?= $row['rname'] ?>>
<input type="text" name="date" value=<?= $date?>>
<input type="text" name="begintime" value=<?= $time ?>>
<input type="hidden" name="mark" value='1'>
<input type="submit" value="可预约1">
</from>
<?php
}
if($datemark == 1 and $timemark == 0){//日期匹配成功,时间错误,这个格子仍然输出可预约
?>
<form action="roomuse-create.php" method="POST">
<input type="hidden" name="rid" value=<?= $row['rid'] ?>>
<input type="hidden" name="rname" value=<?= $row['rname'] ?>>
<input type="text" name="date" value=<?= $date?>>
<input type="text" name="begintime" value=<?= $time ?>>
<input type="hidden" name="mark" value='1'>
<input type="submit" value="可预约2">
</from>
<?php
}
echo "</td>";
}
echo "</tr>";
}
因为你在循环输出表格的时候,每次输出表格都是相同的表单,没有区分开来。你可以在每个表单的name属性上加上不同的索引值,这样每个表单传送的数据不同。
你改一下将表单的name属性,
<input type="text" name="date[<?= $i ?>][<?= $time ?>]">
修改之后,获取数据
$date = $_POST['date'][$i][$time];