2010-09-10 3 views
0

Любое предложение о том, что случилось с моей петлей WHILE?Проблема с While Loop в PHP

<?php 
     include('header.php'); 
     $manage = "current_page_item"; 
     include('nav.php'); 
     include('sidebar.php'); 
    ?> 
    <div class="primary"> 
    <br/> 
    <?php 
    $userId = $_GET['id']; 
    echo "<div class=\"item_list\">"; 
    $sql = "SELECT * FROM user WHERE id = " . intval($userId); 
    $result = mysql_query($sql); 
    while($item = mysql_fetch_array($result, MYSQL_ASSOC)) 
    { 
     echo "<b>Title: </b>" . $item['item'] . "<br/><b>Email: </b>" . $item['email'] . "<br/>"; 
     echo "<b>Price: </b>" . $item['price'] . "</b><br/><b>Category: </b>" . $item['category'] . "</b><br/> <b>Extra: </b>" . ($item['extra'] ."</b><br/><b>Date Listed: </b>". $item['date']; 
    } 
    echo "</div>"; 
?> 
</div> 
<?php include('footer.php'); ?> 
+5

Для справки, вы не должны редактировать код в вопросе чтобы отразить ответы. Люди, которые смотрят на этот вопрос позже, не будут видеть исходный код, вызвавший проблему, если они не смотрят на историю изменений, и больно смотреть на историю изменений и ответы в одно и то же время. – cHao

+2

Для других редакторов: будьте очень, очень уверены, что вы не меняете какой-либо фактический синтаксис или значение кода, когда вы пытаетесь форматировать его более чисто. Как говорит chao, это может вызвать путаницу в ответах. – BoltClock

+0

@cHao Я думаю, что внесенные изменения были просто форматированием, а не исправлением самого кода –

ответ

5

Ваша ошибка здесь. Вы используете имя переменного неправильно для выборки строк:

while($userid = mysql_fetch_array($result, MYSQL_ASSOC)){ 

Оно должно быть:

while($item = mysql_fetch_array($result, MYSQL_ASSOC)){ 

Кроме того, есть свободная закрывающая скобка } на самом последнюю строку непосредственно перед закрывающим тегом ?>. Я не знаю, был ли он сиротой в блоке открытия, который вы оставили вне вашего вопроса, или это было действительно по ошибке.

+0

Я думаю, что правильно, но все еще не работал. Как насчет этой записи? $ sql = "SELECT * FROM user WHERE id =".intval ($ USERID); – Tim

+0

Что вы подразумеваете под 'didnt work'? Это дает вам ошибку? Попробуйте '$ result = mysql_query ($ sql) или die (mysql_error());' и скажите мне, говорит ли он что-либо. Также убедитесь, что отчет об ошибках полностью включен; поместите 'error_reporting (E_ALL);' в начале вашего скрипта. – BoltClock

+0

Хорошо, я включил отчет об ошибках и Im получение. Уведомление: неопределенная переменная: userid в – Tim

0

Снимите закрытие } на последней строке.

0

Похоже, вы неверно назвали ваши переменные?

Вы прошли $userid в аргументе функции while, но используете в своем цикле $item?

У вас также есть дополнительный }, если только вы не разместили фрагмент функции.

1

На второй эхо-линии у вас есть несколько беспризорных круглых скобок. Sould быть:

echo "<b>Price: </b>" . $item['price'] . "</b><br/> <b>Category: </b>" . $item['category'] . "</b><br/> <b>Extra: </b>" . $item['extra'] . "</b><br/><b>Date Listed: </b>" . $item['date']; 
2

вместе с чем BoltClock сказал и stoosh, у вас также есть ошибка синтаксиса:

echo "<b>Price: </b>" . $item['price'] . 
    "</b><br/> <b>Category: </b>". $item['category'] . 
    "</b><br/> <b>Extra: </b>". $item['extra'] . 
    "</b><br/><b>Date Listed: </b>". $item['date']; 

У вас было два parans, где они не делают никакого смысла, и моя ставка вызывают синтаксис ошибка. Вы действительно должны были установить error_reporting на E_ALL и display_errors установить на on для разработки! Это облегчает отладку этого материала.

Update

Чтобы установить, что временно для сценария добавить это к вершине (после <?php конечно)

error_reporting(E_ALL); 
ini_set("display_errors", "on"); 
+0

Установлен ли он в браузере? – Tim

+0

@tim: вы можете установить это в php.ini или установить во время выполнения функцию 'error_reporting()' (http://www.php.net/manual/en/function.error-reporting.php). –