Php 如何从数据库中验证开始日期和结束日期,使其不会与时间冲突
目前,我的数据库中有一些数据 我不得不采取一些行动来打发上课时间。后来成为Php 如何从数据库中验证开始日期和结束日期,使其不会与时间冲突,php,Php,目前,我的数据库中有一些数据 我不得不采取一些行动来打发上课时间。后来成为 $Starttimein=$_POST['startTime']; $Endtimein=$_POST['endTime']; $varstart=preg_split('/[\s:\s]+/', $Starttimein); $totvarstart=$varstart[0]*100+ $varstart[1]; $varend=pre
$Starttimein=$_POST['startTime'];
$Endtimein=$_POST['endTime'];
$varstart=preg_split('/[\s:\s]+/', $Starttimein);
$totvarstart=$varstart[0]*100+ $varstart[1];
$varend=preg_split('/[\s:\s]+/', $Endtimein);
$totvarend=$varend[0]*100+ $varend[1];
$sql8="select * from class where sup_id='$idselect' ";
$result8=mysqli_query($con,$sql8);
while($row8=mysqli_fetch_assoc($result8))
{
$preclasstime=$row8['class_time'];
$keywords = preg_split('/[\s,\s:\s-\s:\s]+/', $preclasstime);
$day = $keywords[0];
$tottimestart = $keywords[1]*100 + $keywords[2];
$tottimeend = $keywords[3]*100 + $keywords[4];
if($day==$_POST['csday'])
{
if((($totvarstart>= $tottimestart) && ($totvarstart<= $tottimeend)) || (($totvarend>= $tottimestart) && ($totvarend<= $tottimeend)))
{
?>
<script type="text/javascript">
alert("Time crash");
</script>
<?php
}
else
{
echo "correct";
}
}
}
使用preg_split函数分离日期、开始和结束时间。我希望验证,如果用户选择同一天,它将比较输入的开始和结束时间是否与存储在数据库中的时间崩溃。例如:如果用户选择Mon,10.30-11.30,它将显示一条警告消息,说明无法添加上课时间,因为它与以前的时间冲突。我试过使用if$totvarstart>=$tottimestart&&$totvarstart=$tottimestart&&$totvarend不要将这三个值保存在一列中,不管怎样,以后都必须拆分它们。将它们分为三列:dayofweek、starttime和endtime。对后者使用时间类型,以便可以对其运行比较运算符 有6种方式可以安排一个时间跨度与另一个时间跨度的关系。您可以在数据库中对此进行检查,以仅获取与输入值冲突的行。检查应如下所示:
[...]
WHERE
dayOfWeek = :dayOfWeek AND
(
(:starttime < starttime AND starttime < :endtime) OR
(:starttime < endtime AND endtime < :endtime) OR
(starttime < :startime AND :endtime < endtime)
)
注意::starttime和:endtime是准备好的语句中的绑定变量。根据您的API,您可能需要使用什么?相反
通过这种方式,您不需要阅读整个数据库来检查它们是否重叠。Hi,谢谢,但我可以知道绑定变量是输入值吗???@初学者是的,绑定变量是您在准备好的语句中的输入值。$sql7=select*from class,其中sup_id='$idselect',上课时间=:$csday和:$csstarttime