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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Хлебные крошки или массив не массив

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: помогите найти ошибку в коде
Virtual1387
Отправлено: 27 Августа, 2010 - 17:40:31
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Авг. 2010  
Откуда: Moscow


Помог: 0 раз(а)




Друзья,

вы мне очень помогли в прошлый раз, помогите и в этот Улыбка

Пишу "хлебные крошки" в выводе каталога. Заранее прошу прощения за страшные названия переменных.
PHP:
скопировать код в буфер обмена
  1.  
  2. //Рисуем хлебные крошки
  3. echo "<div id=\"kroshki\"><a href=\"".$GLOBALS['home']."\">Каталог</a> >\n";
  4.  
  5.        
  6.         $k_id=$_GET['cat_id'];
  7.  
  8.        
  9.         $parent_category=mysql_query("SELECT * FROM catalog WHERE id LIKE $k_id");
  10.         $par_category=mysql_fetch_array($parent_category, MYSQL_ASSOC);
  11.         $k_id=$par_category['parent_id'];      
  12.        
  13.         while ($k_id > -1) {
  14.         $k_temp=mysql_query("SELECT * FROM catalog WHERE id LIKE $k_id");
  15.         $k_temp_catdata=mysql_fetch_array($k_temp, MYSQL_ASSOC);
  16.         $catidd=$k_temp_catdata['id'];
  17.         $catname=$k_temp_catdata['name'];
  18.         $k_kategorii=array('id'=>$catidd,'name'=>$catname);
  19.         $k_id=$k_temp_catdata['parent_id'];
  20.  
  21.         }
  22.        
  23.         if ($cat_id > -1){
  24.         $k_kategorii=array_reverse($k_kategorii);
  25.         foreach ($k_kategorii as $key => $k_val) {
  26.         echo "<a href=\"".$GLOBALS['name']."index.php?cat_id=".$k_val['id']."\">".$k_val['name']."</a> >\n";
  27.         }
  28. }
  29.  
  30.  
  31. //Пишем название текущей категории
  32.         $catn=mysql_query("SELECT * FROM catalog WHERE id LIKE $cat_id");
  33.         $catname=mysql_fetch_array($catn, MYSQL_ASSOC);
  34.         echo $catname["name"]."\n";    
  35.        
  36. echo "</div>\n";               
  37. //Написали название текущей категории
  38. //Нарисовали хлебные крошки
  39.  


В логе после выполнения три ошибки:
1) PHP Notice: Undefined variable: k_kategorii in catalog.php on line 24
2) PHP Warning: array_reverse() [<a href='function.array-reverse'>function.array-reverse</a>]: The argument should be an array in catalog.php on line 24
3) PHP Warning: Invalid argument supplied for foreach() in /Applications/MAMP/htdocs/hp.ant ex.ru2/catalog.php on line 25

Объясните, что не так?
Может кто-либо знает как оптимизировать скрипт?


Отредактировано модератором: JustUserR, 27 Августа, 2010 - 18:28:14
Убрал дупликат от старой версии сообщения
 
 Top
alexspb
Отправлено: 27 Августа, 2010 - 18:27:46
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Undefined variable
в начале скрипта стоит добавить:
PHP:
скопировать код в буфер обмена
  1. if( $_SERVER['REMOTE_ADDR'] == '127.0.0.1' ){
  2.         Error_Reporting( E_ALL & ~E_NOTICE );
  3. }else{
  4.         Error_Reporting( 0 );
  5. }

второе и третье, смотрите что передаете, ведь пишет по русски
The argument should be an array - должен быть массивом
Invalid argument supplied for foreach() - тоже не массив, цикл и выдает ошибку

смотрите как массивы формируются


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
JustUserR
Отправлено: 27 Августа, 2010 - 18:34:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Virtual1387 По приведенным сообщениям об ошибках и предупреждения можно судить о том что в вашем PHP-скрипте функция array_reverse не может осуществить свои дейтсвия по той причине что ей предоставлен неправилный аргумент - как правило при работе с чистыми ассоцитативными массивами этой фукнции можно передать второй агрумент true для сохранения ключей
Кроме того причина может быть в ошибке в самом SQL-запросе - в частности передаваемый оператору LIKE операнд с правой стороны должен быть строкой в правильном виде - относительно уровня экранирования по символьным подстановкам


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Virtual1387
Отправлено: 27 Августа, 2010 - 18:36:18
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Авг. 2010  
Откуда: Moscow


Помог: 0 раз(а)




alexspb пишет:
Undefined variable
в начале скрипта стоит добавить:
PHP:
скопировать код в буфер обмена
  1. if( $_SERVER['REMOTE_ADDR'] == '127.0.0.1' ){
  2.         Error_Reporting( E_ALL & ~E_NOTICE );
  3. }else{
  4.         Error_Reporting( 0 );
  5. }

второе и третье, смотрите что передаете, ведь пишет по русски
The argument should be an array - должен быть массивом
Invalid argument supplied for foreach() - тоже не массив, цикл и выдает ошибку

смотрите как массивы формируются


в том то и дело,
я уверен в том, что передаю фукциям в качестве аргумента именно массив.
вот где он формируется

PHP:
скопировать код в буфер обмена
  1. $k_kategorii=array('id'=>$catidd,'name'=>$catname);


а вот кде вызывается в качестве аргумента


и

PHP:
скопировать код в буфер обмена
  1. #
  2. foreach ($k_kategorii as $key => $k_val) {
  3. #
  4.        echo "<a href=\"".$GLOBALS['name']."index.php?cat_id=".$k_val['id']."\">".$k_val['name']."</a> >\n";
  5. #
  6.        }



Где же ошибка?
 
 Top
JustUserR
Отправлено: 27 Августа, 2010 - 18:49:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Virtual1387
JustUserR пишет:
Как правило при работе с чистыми ассоцитативными массивами этой фукнции <array_reverse> можно передать второй агрумент true для сохранения ключей
Можете посмотреть более подробное описание здесь http://www.php.su/functions/?array_reverse


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Virtual1387
Отправлено: 27 Августа, 2010 - 18:54:41
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Авг. 2010  
Откуда: Moscow


Помог: 0 раз(а)




JustUserR пишет:
Virtual1387 По приведенным сообщениям об ошибках и предупреждения можно судить о том что в вашем PHP-скрипте функция array_reverse не может осуществить свои дейтсвия по той причине что ей предоставлен неправилный аргумент - как правило при работе с чистыми ассоцитативными массивами этой фукнции можно передать второй агрумент true для сохранения ключей
Кроме того причина может быть в ошибке в самом SQL-запросе - в частности передаваемый оператору LIKE операнд с правой стороны должен быть строкой в правильном виде - относительно уровня экранирования по символьным подстановкам


Предаваемый операнд справа от LIKE - число. Целое, неотрицательное число, без каких либо спецсимволов. Экранировать там нечего Улыбка
Аргумент true сечас попробую поставить... хм, в логи чисто. только вот почему-то выглядить мои "хлебные крошки" стали странно (см. прикрепленный файл, выделено красным).
Прикреплено изображение (Нажмите для увеличения)
Снимок экрана 2010-08-27 в 7.52.30 PM.png
 
 Top
alexspb
Отправлено: 27 Августа, 2010 - 21:04:59
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Virtual1387 пишет:
в том то и дело,
я уверен в том, что передаю фукциям в качестве аргумента именно массив.

чтобы быть действительно уверенным, дебажте:
print_r($k_kategorii);


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB