2012-05-17 1 views
0

Я создал страницу «заказов», которая должна быть довольно прямой, требуя для каждого цикла генерировать прошлые заказы из БД. В каждом цикле должен быть взрыв, чтобы отделить каждый элемент (,), затем другой взрыв, чтобы вытащить детали из каждого элемента (-). Мне было интересно, может ли кто-нибудь сказать мне, почему я получаю сообщение об ошибке «Warning: mysql_num_rows() ожидает параметр 1» в конце каждой итерации моего цикла foreach? Это особенно сбивает меня с толку, потому что код все еще работает, и я не думаю, что если ошибка была правдой.php взрывает массив продуктов, забрасывая ошибки

<?php 
$sql = "SELECT * FROM orders WHERE store='$user'"; 
$res = mysql_query($sql); 

$arrOrders = array(); 
while ($row = mysql_fetch_array($res)) { 
    array_push($arrOrders, $row); 
} 
?> 

<table width="85%" align="center" border="0" cellpadding="5"> 
    <?php if (count($arrOrders) > 0) { ?> 
    <?php foreach ($arrOrders as $key => $value) { ?> 
     <tr> 
      <td valign="top" style="font-weight: bold"> 
       ID #<?=$value['id']?> 
      </td> 
      <td valign="top" style="font-weight: bold"> 
       Status: <?=$value['status']?> 
      </td> 
      <td valign="top" style="font-weight: bold"> 
       Order #<?=$value['order_ref']?> 
      </td> 
      <td align="left" valign="top" style="font-weight: bold"> 
       <?php 
       $tmpProds = explode(',', $value['products']); 
       foreach ($tmpProds as $key2 => $value2) { 
         $tmpProdInfo = explode('-', $value2); 

       $sql2 = 'SELECT * FROM products_full WHERE id = ' . $tmpProdInfo[0]; 
       $res2 = mysql_query($sql2); 

       if (mysql_num_rows($res2) > 0) { // THIS IS THE ROW THAT THE ERROR MESSAGE POINTS TO 
       echo $tmpProdInfo[1] + $tmpProdInfo[2] . ' x <a href="item_details.php?id=' . mysql_result($res2, 0, 'id') . '">' . mysql_result($res2, 0, 'alpha_code') . ' (' . trim(mysql_result($res2, 0, 'description')) . ')</a><br /><br />'; 
         } 
        } 
       ?> 
      </td> 
     </tr> 
     <tr> 
      <td width="100%" colspan="5" align="center"> 
       <hr style="width: 100%" /> 
      </td> 
     </tr> 
    <?php } ?> 
    <?php } else { ?> 
    <tr> 
     <td width="100%" align="center"> 
      There are currently no complete orders. 
     </td> 
    </tr> 
    <?php } ?> 
    </table> 

Спасибо заранее, я думаю, что я включил все, что относительно, но если что-то еще необходимо, сообщите мне.

Джо

+0

Это выглядит, как если бы ваш запрос '$ sql2' не удается, и поэтому неверный результат ресурса передается в' mysql_num_rows() ' – billyonecan

+0

Спасибо @deifwud, и, как это происходит в конце из каждого цикла было бы понятно, что это потому, что он получает пустую часть массива? Массив перед любым взрывом разделяется запятыми (например, 3-3-3,4-4-4,), но он также заканчивается запятой, так что мой первый взрыв также создает пустой массив? – JoeP

+0

Вот что это было :) – JoeP

ответ

0

Попробуйте это:

$sql2 = 'SELECT * FROM products_full WHERE id = '.$tmpProdInfo[1].''; 
if (count($res2) > 0) 

Кроме того, имейте в виду, когда вы хотите использовать mysql_num_rows вы должны включать в себя соединение. смотрите руководство:

$link = mysql_connect("localhost", "mysql_user", "mysql_password"); 
mysql_select_db("database", $link); 

$result = mysql_query("SELECT * FROM table1", $link); 
$num_rows = mysql_num_rows($result); 
+0

Привет, спасибо за ваш ответ. У меня есть соединение mysql, открытое в include в другом месте на странице, требуется ли по-прежнему подключение с использованием метода «link» из руководства? – JoeP

+0

Я пробовал использовать метод count, который имеет тот же результат, что и удаление оператора if, что вызывает то же сообщение об ошибке, но 3 раза. – JoeP

+0

Возможно, ваш метод explode дает вам нулевое значение в '$ tmpProdInfo [0]' попытайтесь изменить его так, как это '$ tmpProdInfo [1]', а затем используйте 'count' или' mysql_num_rows'. – Othman

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

  • Нет связанных вопросов^_^