2015-10-26 120 views
2

好吧,讓我們說我有一個下表:循環邏輯PHP出了錯

CREATE TABLE booking (
    idBooking INTEGER PRIMARY KEY, 
    bookingDate DATE, 
    roomId INTEGER, 
    startHour TIME, 
    endHour TIME 
); 

和表有3個記錄: enter image description here

我與框架笨的工作,這是我的觀點:

<table border="1"> 
<thead> 
    <tr> 
     <th>Start Hour</th> 
     <th>Status</th> 
    </tr> 
</thead> 
<tbody> 
<?php 
    $open_time = "07:00:00"; 
    $close_time = "15:00:00"; 

    for($i=$open_time; $i<$close_time; $i+=3600) { ?> 
    <tr> 
     <td > 
      <?php $timeloop = date('H:i:s', $i); echo $timeloop; ?> </h1> 
     </td> 

     <td> 
      <?php 
       $count = count($bookingList); 
       for ($j=0; $j < $count ; $j++) { 
         $endtime1 = strtotime($timeloop)+3600; 
         $endtime2 = date('H:i:s', $endtime1); 
        if ($bookingList[$j]->startHour == $timeloop ||$bookingList[$j]->endHour == $endtime2) { 
        ?> <span>Booked </span> <?php 
        } 
        else { ?> <span> Available</span> 
       <?php 
         } 
       } ?> 
     </td> 
    </tr> 
    <?php } ?> 
</tbody> 

因此,我想根據預訂表顯示可用的小時數,這意味着表中沒有記錄。 這裏是我的期望:

07:00:00可用 08:00:00預訂 09:00:00預訂 10:00:00可用 11:00:00可用 12:00: 00預訂 13:00:00可用 14:00:00可用 15:00:00可用

但是,什麼是錯的與循環,我不知道如何定義的邏輯,這是真的工作罰款當表只有1條記錄, 但是,當我插入另一條記錄,出事了,這裏發生了什麼事

07:00:00可用可用可用 08:00:00預訂可用可用 09:00:00可預訂可用 10: 00:00可用可用空房 11:00:00可用空房 12:00:00可預訂空房預訂 13:00:00空房可用 14:00:00空房可用空房 15:00:00有空可用

您的快速響應是高度讚賞,我一直堅持這幾天:(

+1

你們是不是要加上'(INT)3600'爲'(串)07:00:00'導致不打算在所有的工作。 .. – prodigitalson

+0

這不是如何循環在PHP中工作。正如@prodigitalson所提到的,你不能將一個int添加到一個字符串,並期望循環正常工作。你應該在提問IMHO之前先閱讀php文檔。 – Gogol

+0

你們是否想念我的觀點?問題不是這個部分,請重新閱讀我的問題fellas –

回答

0

不要使用「for」語句循環通過數據庫表。使用「while」,因爲您知道記錄數量可以更改。

1)將邏輯傳遞給SQL查詢; 2)用PHP執行查詢;

例:

/* open th database connection */ 
 
$mysqli = new mysqli("localhost", "my_user", "my_password", "my_database"); 
 

 
/* check if the connection was successful */ 
 
if (mysqli_connect_errno()) { 
 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
 
    exit(); 
 
} 
 

 
/* query your database using the logic inside the query*/ 
 
$query = "SELECT * FROM booking WHERE openHour = '12:00' AND closeHour = '17:00'"; 
 

 
$result = $mysqli->query($query); 
 

 
while($row = $result->fetch_array()) 
 
{ 
 

 
?> 
 

 
<td><?php echo $row['openHour']; ?><td> 
 
<td><?php echo $row['closeHour']; ?><td> 
 
<td> 
 
<?php 
 
    if(date('H:m:i') == $row['openHour'] OR date('H:m:i') == $row['closeHour']){ 
 
     echo "Booked"; 
 
    } 
 
?> 
 
<td> 
 

 
<?php 
 

 
} 
 

 
?>

+0

你有什麼例子嗎? –

+0

@RedhaArifanJuanda我編輯了答案。 –