2016-12-13 147 views
1

我觉得我在这里很容易丢失一些东西,并在构建“预约日程安排”日历时有点卡住。PHP for循环,匹配输出与数据库结果

客户可以预订他们自己的时间段,当他们这样做时...我需要让他人无法使用这些时间段。

对于“开始时间”选择,我从上午9点至晚上7点以30分钟的时间间隔使用下拉菜单中的“for循环”。如果在数据库中保存“上午10点”的“开始时间”和“上午11点30分”的“结束时间”......上午10点,上午10点30分和上午11点需要从成功提交表单后的“开始时间”下拉菜单。

(数据库结果是在一个字符串的形式... FYI)

为了做到这一点,我有这样的:

$sql_slots = "SELECT * FROM XXXXXXXXX WHERE date = '$query_date' ORDER BY XXXXXXXXX ASC"; 

    $result_slots = mysqli_query($connection, $sql_slots); 

    $open = strtotime("9:00am"); 

    echo' 
    <select name="start_time">'; 

     for($b = 0; $b <= 20; $b++){ 

      $y = strtotime(($b*30) . " Minutes", $open); 

      $the_time = date("h:ia", $y) . "<br>"; 

      $starting = array(); 

      while($row_result_slots = mysqli_fetch_assoc($result_slots)){ 

       $starting[] = $row_result_slots['start_time']; 

       } 

      if(in_array($the_time, $starting)){ 
      echo "<option>Not Available</option>"; 
      } else { 
      echo "<option>" . $the_time . "</option>"; 
      } 

} 
     echo'</select>'; 

任何建议,要完成这个或不是“更好的方法in_array“来完成我想要做的事情?

预先感谢您。

+1

为什么在'for'部分'while'一部分?在'for'的第一次迭代之后'mysqli_fetch_assoc'将不会提供任何内容。 – JOUM

+0

良好的通话。我将while循环移至for循环之前,并解决了一个问题。另一个问题是 - 在进行比较时,我没有考虑附加到$ the_time字符串的“
”。感谢您的帮助。 – Shane

回答

0

解决的办法是在“for循环”之外移动“while循环”,我没有考虑到附加到$ the_time变量末尾的“br”。

这里是工作代码:

$sql_slots = "SELECT * FROM XXXXXX WHERE date = '$query_date' ORDER BY XXXXXXX ASC";  

    $result_slots = mysqli_query($connection, $sql_slots); 

    $open = strtotime("9:00am"); 

    $starting = array(); 

      while($row_result_slots = mysqli_fetch_assoc($result_slots)){ 

       $starting[] = $row_result_slots['start_time']; 

       } 

    echo' 
    <select name="start_time">'; 

     for($b = 0; $b <= 20; $b++){ 

      $y = strtotime(($b*30) . " Minutes", $open); 

      $the_time = date("h:ia", $y); 

      if(in_array($the_time, $starting)){ 
      echo "<option>Not Available<br></option>"; 
      } else { 
      echo "<option>" . $the_time . "<br></option>"; 
      } 
     } 
+0

“br”可以附加到“echo”.echo“”; – JohnZ

+0

更新了答案。好的建议,谢谢。 – Shane