Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблемка с выводом в цикле
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Проблемка с выводом в цикле

Страниц (1): [1]
 

1. middlee - 02 Июля, 2014 - 07:51:11 - перейти к сообщению
Здравствуйте, вот мой код:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Mcat extends Db {
  3. var $id;
  4.                
  5. function __construct() {
  6.         $this->id = $_GET['id'];
  7. }
  8.                
  9. function return_cat() {
  10.         $sql = "SELECT * FROM subcat WHERE active=1 AND cat=".$this->id." ORDER BY id ASC" ;
  11.         $res = mysql_query($sql) ;
  12.         return $res ;
  13. }
  14. }
  15.  
  16.  
  17. class Ccat extends Mcat {
  18.                
  19. function print_cat() {
  20.         $res = parent::return_cat() ;
  21.         $vcat = array();
  22.  
  23.         while ($row = mysql_fetch_assoc($res))
  24.         {
  25.                 $vcat[$row['id']] = array("id"=>"$row[id]", "title"=>"$row[title]", "cat"=>"$row[cat]", "image"=>"$row[image]", "active"=>"$row[active]");
  26.         }
  27.         return $vcat;
  28. }
  29. }
  30.  
  31.  
  32.  
  33. $aux_vcat = new Ccat() ;
  34. $aux_vcat = $aux_vcat->print_cat() ;
  35. $count_cat = count($aux_vcat) + 1;
  36.  
  37.  
  38. for ($i=1; $i < $count_cat; $i++) {
  39.         echo $aux_vcat[$i]['image'];
  40.         }
  41.  

Проблема в том, что если в $_GET[id] передаю 1, то все отображается нормально, если что-то другое, выводит просто пустые блоки (кол-во блоков правильное).

P.S.: Проверял функцией print_r($aux_vcat) - массив выводится правильно при любых $_GET[id].
CODE (text):
скопировать код в буфер обмена
  1. Array
  2. (
  3.     [4] => Array
  4.         (
  5.             [id] => 4
  6.             [title] => Подкатегория 3
  7.             [cat] => 3
  8.             [image] => pizhami.jpg
  9.             [active] => 1
  10.         )
  11.  
  12.     [6] => Array
  13.         (
  14.             [id] => 6
  15.             [title] => Подкатегория 4
  16.             [cat] => 3
  17.             [image] => pizhami.jpg
  18.             [active] => 1
  19.         )
  20.  
  21. )
2. Panoptik - 02 Июля, 2014 - 10:43:52 - перейти к сообщению
вообще передавать гет напрямую в запрос - это небезопасно
и у вас ошибка при передаче параметров
PHP:
скопировать код в буфер обмена
  1. while ($row = mysql_fetch_assoc($res))
  2.         {
  3.                 $vcat[$row['id']] = array("id"=>"$row[id]", "title"=>"$row[title]", "cat"=>"$row[cat]", "image"=>"$row[image]", "active"=>"$row[active]");
  4.         }
  5.         return $vcat;

$row[id] - массивы и объекты в строке нужно оборачивать в фигурные скобки смотрите пример ниже с $row[id]
или вообще конкатенировать или не использовать строку остальные параметры $row
PHP:
скопировать код в буфер обмена
  1. while ($row = mysql_fetch_assoc($res))
  2.         {
  3.                 $vcat[$row['id']] = array("id"=>"{$row[id]}", "title"=>$row['title']", "cat"=>$row['cat'], "image"=>$row['image'], "active"=>$row['active']);
  4.        }
  5.        return $vcat;

(Добавление)
и вообще вместо вот этой фигни
PHP:
скопировать код в буфер обмена
  1. array("id"=>"{$row[id]}", "title"=>$row['title']", "cat"=>$row['cat'], "image"=>$row['image'], "active"=>$row['active'])
просто напишите $row
PHP:
скопировать код в буфер обмена
  1. while ($row = mysql_fetch_assoc($res))
  2.         {
  3.                 $vcat[$row['id']] = $row;
  4.        }
  5.        return $vcat;

 

Powered by ExBB FM 1.0 RC1