2013-11-08 2 views
0

Если я запускаю этот запрос без инициализации переменной products, код правильно заполняет <ul>, но я получаю ошибку undefined variable: products in.... В руководстве по php я прочитал, что при использовании подготовленных операторов они возвращают дополнительный (пустой) набор результатов в результате вызова самого оператора. Может ли это быть проблемой или это потому, что HTML отображает сначала, видит пустую переменную продукта и отключает эту ошибку, потому что когда я инициализирую $products = "", все в порядке. Любопытно точно знать, что происходит.неопределенное уведомление переменной, когда определена переменная

line 67: $sql = $db->prepare("SELECT * from item WHERE user_id = '$pid'"); 

$sql->execute(); 

$products = ""; 

while($row = $sql->fetch()) 
{ 
    $item_id = $row['item_id']; 
    $user_id = $row['user_id']; 
    $item_name = $row['item_name']; 
    $item_description = $row['item_description']; 
    $date = $row['add_date']; 
    $image = $row['photopath']; 

    $products .= "<li><a href='item_view.php?pid=".$item_id."'><img src='$image' 
width='50' height='50'/></a> Item ID: $item_id UserID: $user_id NAME: $item_name Added on: $date DESCRIP: $item_description</li>"; 

в HTML

<ul> 
line 112: <?php echo $products; ?> 
</ul> 
+0

показать номер вашей линии? – farmer1992

+0

Это включено? Как ваш HTML связан с PHP-кодом, если он не является встроенным? – Machavity

+0

HTML находится под php в том же файле. ONly include - это соединение – rogerthat

ответ

2

Причина ошибки заключается в том, что вы используете .= для объединения в $products. Это требует, чтобы переменная уже имела значение, поэтому оно может добавить к ней. Если он не инициализирован, вы получаете уведомление о неопределенной переменной в первый раз через цикл.

Он обрабатывает это неопределенное значение как пустую строку, поэтому конкатенация фактически совпадает с инициализацией на этой первой итерации. Итерации в будущем ведут себя нормально, потому что переменная имеет значение. Но если у вас есть предупреждения, вы получаете уведомление о первой итерации, жалуясь на неинициализированную переменную. Всегда лучше инициализировать переменные, а не в зависимости от этого автоматического принуждения.

+0

, но isnt $ продукты, которые инициализируются после первого цикла в то время? – rogerthat

+0

Уведомление происходит _during_ первый цикл в то время, не так ли? – Barmar

+0

То, как я смотрю на это во время первого цикла '$ products', заполняется первым циклом данных, но, по-моему, моя логика выключена – rogerthat

2

Поступая $products .= вы фактически делаете: $products = $products . который является конкатенация продуктов для себя и другую строку. Очевидно, что это не удается, когда продукт не определен.

Смежные вопросы