2016-12-13 57 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