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]   

> Без описания
diz3x
Отправлено: 27 Февраля, 2015 - 10:33:43
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2015  


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




На Хостинге которым пользуюсь изменили версию PHP до 5.5... перед этим стояла 5.3 если не ошибаюсь. После этого на сайте стали выскакивать такие ошибки
Warning: Illegal string offset 'start' in /home/koles/public_html/inc/libD B.php on line 147
всего их 4 ошибки, в разных строках
Вот часть кода
PHP:
скопировать код в буфер обмена
  1. # DEBUG: print("<BR>SQL:$sql, START: $params[start], END: $params[end]");
  2.    # Build result
  3.    $rows = array();
  4.     $row_count = mysql_num_rows($res);
  5.     if ($row_count > 0) {
  6.         if ($params["start"] && $params["end"]) { // Optimized!  --- вот 147 строка. в которой ошибка.
  7.       if ($params["start"] < 0) {
  8.         $params["start"] = 0;
  9.       }
  10.       if ($params["start"] > $row_count - 1) {
  11.         $params["start"] = 0;
  12.       }
  13.       if ($params["end"] >= $row_count) {
  14.         $params["end"] = $row_count - 1;
  15.       }
  16.       for ($r = 0; $r < $params["start"]; $r++) {
  17.         $rows[] = array();
  18.       }
  19.       if (mysql_data_seek($res, $params["start"])) {
  20.         while (($row = mysql_fetch_array($res, MYSQL_ASSOC)) && $r <= $params["end"]) {
  21.           $rows[] = $row;
  22.           $r++;
  23.         }
  24.       } else {
  25.         return null;

Мог бы кто просмотреть код РНР и сделать его работающим за определенную плату? А то просто моих познаний в РНР ну очень мало, чтоб разобраться самому
 
 Top
RickMan
Отправлено: 27 Февраля, 2015 - 11:37:07
Post Id


Участник


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


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




Все очень просто. В вашем массиве $params, нету ячейки с ключем start, либо это вообще не массив. Попробуйте заменить:
PHP:
скопировать код в буфер обмена
  1. if ($params["start"] && $params["end"]) {

на
PHP:
скопировать код в буфер обмена
  1. if (isset($params["start"]) && $params["start"] && $params["end"]) {


так же можно использовать array_key_exists, но там надо быть уверенным, что это массив. Попробуйте заменить и посмотрите что будет с ошибками. Пропадет ли, какая новая появится...
 
 Top
diz3x
Отправлено: 27 Февраля, 2015 - 12:04:50
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2015  


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




[quote=RickMan][/quote]
Спасибо огромное, помогло.
Вот только я теперь не пойму как мне изменить оставшиеся две других ошибки
Warning: Illegal string offset
PHP:
скопировать код в буфер обмена
  1. function frmForm($template, $data= "", $params = "") {
  2.   static $CACHED_TEMPLATES;
  3.   global $TPLPATH;
  4.  
  5.   if (! $TPLPATH) {
  6.     $TPLPATH = TPLPATH;
  7.   }
  8.   if ($params["tpl_path"]) { -------- тут ошибка
  9.     $tpl_path = $params["tpl_path"];
  10.   } else {
  11.     $tpl_path = $TPLPATH;
  12.   }
  13.  
  14.   $filename = $tpl_path . "/" . $template;
  15.   if ($CACHED_TEMPLATES[$filename]) {
  16.     $html = $CACHED_TEMPLATES[$filename];
  17.   } else {
  18.     $html = @join ("", file($filename));
  19.     if (!$html) {
  20.       print("libForms Error: cannot read template '$filename'<br>");
  21.       return null;
  22.     }
  23.     $CACHED_TEMPLATES[$filename] = $html;
  24.   }
  25.  
  26.   if ($data) {
  27.     foreach ($data as $name => $value) {
  28.       $name = strtoupper($name);
  29.       $html = str_replace("{" . $name . "}", $value, $html);
  30.     }
  31.   }
  32.   if (! $params["no_cleanup"]) {  ----- тут ошибка
  33.     $html = ereg_replace("\{[a-zA-Z0-9_]+\}", "", $html);
  34.   }
  35.   return $html;
 
 Top
RickMan
Отправлено: 27 Февраля, 2015 - 12:40:06
Post Id


Участник


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


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





в
PHP:
скопировать код в буфер обмена
  1. if (isset($params["tpl_path"]) && $params["tpl_path"]) {


и


в
PHP:
скопировать код в буфер обмена
  1. if (!isset($params["no_cleanup"]) || !$params["no_cleanup"]) {
 
 Top
diz3x
Отправлено: 27 Февраля, 2015 - 14:35:53
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2015  


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




Спасибо огромное. Теперь все работает.
(Добавление)
Даже не знаю, после того как таким методом по исправлял ошибки, теперь в админке на сайте, в какое меню не перейду оно как бы выкидывает и требует чтоб я зашел заново и после этого впускает в то меню. Вот только ничего не работает толком.
В чем может быть проблема никто не подскажет?
 
 Top
LIME
Отправлено: 27 Февраля, 2015 - 15:58:32
Post Id


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


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


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




Я бы не стал заморачиваться и вернул все как было
На самом деле эти ошибки были всегда
Просто вывод ошибок был запрещен
А после апгрейда этот момент изменился
Можно это исправить в .htaccess
Погугли запрет вывода ошибок в htaccess
(Добавление)
Скорее всего просто ошибка в логике после этих вот изменений
 
 Top
Мелкий Супермодератор
Отправлено: 27 Февраля, 2015 - 16:02:53
Post Id



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


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


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




Illegal string offset крайне однозначно указывает на то, что ваш $params - ни разу не массив, а строка.
И стоит разбираться именно с этим. Случайно от смены версии php массивы в строки не превращаются, ошибка где-то там, где определяется $params и висеть она там может уже очень давно. В PHP5.3 этого варнинга просто не было, PHP игнорировал эту ошибку и возвращал нулевой байт строки.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 27 Февраля, 2015 - 16:06:19
Post Id


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


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


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




Мелкий это да
но это того стоит?
ковырять говнокод чтоб устранить пару глупостей для такого уровня новичка это значит похерить вообще все ився Улыбка
лучше вернуть все как было и спокойно жить далее Улыбка
так же отключив вывод ошибок
(Добавление)
чисто практический совет
 
 Top
Мелкий Супермодератор
Отправлено: 27 Февраля, 2015 - 16:14:25
Post Id



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


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


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




LIME, я предполагаю, что что-то изменилось во внешнем окружении скрипта и подавление ошибок не приведёт к работоспособности для пользователя.
Потому что какой-нибудь тот же $params["tpl_path"] явно во времена жизни этого скрипта состоял не из 1 байта. Хотя... $params = "" намекает на плохие мысли. Я в код-то не вглядывался.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 27 Февраля, 2015 - 16:49:47
Post Id


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


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


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




Да...можно предположить что подавления будет недостаточно
Но я исхожу из того что первоначально мешали только варннинги а баги пошли после правки кода
В любом случае тут либо конкретно рефакторить вооружившись хоть какими знаниями и большой совковой лопатой для навоза
Либо попробовать сначала также подавить вывод предупреждений
Что надо сделать в любом случае
Согласись тут копать не перекопать если уж на то пошло
Говнокод одно слово
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB