2014-10-03 169 views
0

因此,我正在製作這個系統,您可以預定座位,但是當我檢查座位是否已經預留時,它會被擰緊(意味着我對循環太糟糕了)。我在我的數據庫中有3個測試用戶,並且它與用戶一樣多次呼應座位。它甚至可以獲得正確着色的預留座位。php中的循環問題

$sql = "SELECT * FROM users"; 
$result = mysql_query($sql); 
$list = array(); 
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $reserved = $row["seat"]; 
    $list[] = $reserved; 
} 

echo '<div id="top-section">'; 
for($i = 0; $i < 44; $i++) { 
    $seatCount++; 
    foreach($list as $obj) { 
     if($seatCount == $obj) { 
      echo '<div id="seat_'.$seatCount.'" class="seat reserved">'.$seatCount.'</div>'; 
     } 
     else { 
      echo '<div id="seat_'.$seatCount.'" class="seat available" onclick="selectSeat('.$seatCount.');">'.$seatCount.'</div>'; 
     } 
    } 
} 

echo '</div>'; 

,結果是這樣的:http://i.gyazo.com/d10e787cea7028b46c716ac41766456a.png(我的座位3個div的,只有做了頂部的循環,使不介意45 - 68,因爲它們是正確的)。我該如何製作,所以只能張貼一次座位?

+0

請,或不使用'mysql_ *'功能(http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions -in-PHP)。 *他們不再維護,並[已正式棄用](https://wiki.php.net/rfc/mysql_deprecation)*。看到[紅色框](http://uk.php.net/manual/en/function.mysql-connect.php)?學習[準備的語句](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://us1.php.net/pdo)或[MySQLi](http:// us1.php.net/mysqli)。 [這篇文章](http://php.net/manual/en/mysqlinfo.api.choosing.php)將幫助你決定哪些。 – 2014-10-03 21:24:36

+0

爲什麼你需要'$ seatCount'變量,是不是與'$ i'相同? – Barmar 2014-10-03 21:30:32

+0

我之後需要在代碼中使用它,因爲就像我說過的那樣,我有三個座位,我也在兩個後來的div上使用它。 – D3xless 2014-10-04 07:08:36

回答

0

如果我想我知道你要做什麼,你不需要有那個內部foreach聲明。

雖然你的代碼有兩個錯誤。

首先,這種說法是有點多餘

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $reserved = $row["seat"]; 
    $list[] = $reserved; 
} 

改成這樣,你知道,爲了簡單:

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $list[] = $row["seat"]; 
} 

然後,循環看起來就有點像這樣(這使用in_array代替另一個循環):

for($i = 0; $i < 44; $i++) { 
    $seatCount++; 

    if(in_array($seatCount, $list)) { 
     echo '<div id="seat_'.$seatCount.'" class="seat reserved">'.$seatCount.'</div>'; 
    } else { 
     echo '<div id="seat_'.$seatCount.'" class="seat available" onclick="selectSeat('.$seatCount.');">'.$seatCount.'</div>'; 
    } 
} 

然後,這樣,$seatCount變量將在用戶座位上查找,如果是,它將顯示預留座位,如果不是,則只顯示可選座位。

0

你的foreach($ list as $ obj)在循環中。你有三個保留,所以它打印座位三次。你需要在循環之外移動它。

0

使用in_array()

for ($i = 0; $i < 44; $i++) { 
    if (in_array($i, $list)) { 
     echo '<div id="seat_'.$seatCount.'" class="seat reserved">'.$seatCount.'</div>'; 
    } 
    else { 
     echo '<div id="seat_'.$seatCount.'" class="seat available" onclick="selectSeat('.$seatCount.');">'.$seatCount.'</div>'; 
    } 
} 

更妙的是,使$list使用保留席位鍵,而不是值:

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $reserved = $row["seat"]; 
    $list[$reserved] = true; 
} 

那麼你的第二個循環可以使用:

if (isset($list[$i])) 
0

你可以這樣做:

$sql = "SELECT * FROM users"; 
$result = mysql_query($sql); 
$list = array(); 
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $reserved = $row["seat"]; 
    $list[$reserved] = 1; 
} 

echo '<div id="top-section">'; 
for($i = 0; $i < 44; $i++) { 
    $seatCount++; 
    if(isset($list[$seatCount]) AND $list[$seatCount] == 1) { 
     echo '<div id="seat_'.$seatCount.'" class="seat reserved">'.$seatCount.'</div>'; 
    } 
    else { 
     echo '<div id="seat_'.$seatCount.'" class="seat available" onclick="selectSeat('.$seatCount.');">'.$seatCount.'</div>'; 
    } 
} 

echo '</div>'; 
0

你應該使用in_array()並刪除一個foreach循環。

<?php 
$list = array(1,2,5); 
echo '<div id="top-section">'; 
for($i = 0; $i < 44; $i++) { 
     if(in_array($i,$list)) { 
      echo '<div id="seat_'.($i+1).'" class="seat reserved">'.($i+1).'</div>'; 
     } 
     else { 
      echo '<div id="seat_'.($i+1).'" class="seat available" onclick="selectSeat('.($i+1).');">'.($i+1).'</div>'; 
     } 
} 

echo '</div>'; 
?> 

演示:https://eval.in/201702