Помогите понять в чем ошибка: "Invalid argument supplied for foreach()" Вот код: PHP: <?php while ($row = mysql_fetch_array ($result)) { $tmp = ''; foreach($row2[$row['invoice']] as $row3){ { $tmp = $row3['FIELD_1']; } } echo '<tr><td>' . $row['invoice'] . '</td><td>' . $tmp . '</td></tr>'; } ?> Данные подставляются правильно, но сверху вот такая строка.
$row2 отсюда: PHP: <?php $result2 = mysql_query (" SELECT sales.invoice, SUM(sales.zakupka) AS FIELD_1, SUM(sales.prodaga) AS FIELD_2, sales.`date` FROM sales WHERE sales.pay <> 2 GROUP BY sales.invoice, sales.`date` ",$db); { while ($val=mysql_fetch_assoc($result2)) { $row2[$val['invoice']][] = $val; } } ?>
проверил, получается нужный массив. НО, если в базе нет данных для суммирования которое выполняется в условии запроса, то выскакивает эта ошибка. Если есть, пропадает. Только что проверял.
Это полный код. PHP: <?php $db = mysql_connect ("localhost","",""); mysql_select_db ("auto-auto", $db) or die(mysql_error()); $set_names = mysql_query("SET NAMES utf8", $db) or die(mysql_error()); ?> <?php $result = mysql_query (" SELECT * FROM sales GROUP BY sales.invoice ",$db); ?> <?php $result2 = mysql_query (" SELECT sales.invoice, SUM(sales.zakupka) AS FIELD_1, SUM(sales.prodaga) AS FIELD_2, sales.`date` FROM sales WHERE sales.pay <> 2 GROUP BY sales.invoice, sales.`date` ",$db); { while ($val=mysql_fetch_assoc($result2)) { $row2[$val['invoice']][] = $val; } } //echo '<pre>'; //print_r($row2);die(); //echo '</pre>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Test</title> <link rel="stylesheet" type="text/css" href="style.css"/> </head> <body> <table border="1" style="width:200px"> <tr> <th>Индекс</th> <th>Значение</th> </tr> <?php while ($row = mysql_fetch_array ($result)) { $tmp = ''; if (is_array($row2)) foreach($row2[$row['invoice']] as $row3) { { $tmp = $row3['FIELD_1']; } } echo '<tr align="center"><td>' . $row['invoice'] . '</td><td>' . $tmp . '</td></tr>'; } ?> </table> </body> </html> Ошибка выскакивает только в том случае, когда нечего сумировать тоесть условие несоответствует второму запросу. Как бы сделать так чтобы вместо этого значением был просто 0. А то сейчас пустая ячейка + ошибка сверху. Заранее благодарен.
c какой целью тут $row2[$val['invoice']][] = $val; двумерный массив делаешь? может ты имел в виду вообще какой-то аццкий код. в таком случае условие должно выглядеть if (is_array(row2[$row['invoice']]))
Отлично!!! Все сработало. Я тебе обязан. Спасибо огромное. P.S. Маленький вопросик, как все таки сделать так что бы вместо пустого значения был просто ноль? (Извини за назойливость)
ну попробуй echo '<tr align="center"><td>' . $row['invoice'] . '</td><td>' . $tmp . '</td></tr>'; заменить на echo '<tr align="center"><td>' . ($row['invoice']?$row['invoice']:'0') . '</td><td>' .($tmp?$tmp:'0') . '</td></tr>'; а вообще, мой совет, переписать все, потому что код, мягко говоря, далек от совершенства.