2014-10-03 106 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