Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Несовместимость с PHP5
 
 автор: epc   (16.05.2006 в 15:00)   письмо автору
 
 

Был скрипт,который на PHP4 работал нормально. Но когда поставили на сервере PHP5 стала вылезать ошибка

Fatal error: Cannot use string offset as an array in /admin/all/classes.inc on line 86


83 if ($s = mysql_fetch_array($r, MYSQL_ASSOC)) {
84 $s[status] = -1;
85 for ($i = 0; $i < count($this->subn); $i++)
86 if ($this->subn[$i][rname] == $s[rname]) $s[status] = $i;
87 return $s;
88 } else return false;

Не подскажете ли в чем может быть проблема?

   
 
 автор: cheops   (16.05.2006 в 16:14)   письмо автору
 
   для: epc   (16.05.2006 в 15:00)
 

Исправьте эту строку следующим образом
<?php
 
if ($this->subn[$i]['rname'] == $s['rname']) $s['status'] = $i;
?>

   
 
 автор: epc   (16.05.2006 в 16:24)   письмо автору
 
   для: cheops   (16.05.2006 в 16:14)
 

не помогает, та же самая ошибка в той же строке...

я уже и скобки пробовал фигурные ставить... тоже не помогло..

   
 
 автор: Trianon   (16.05.2006 в 17:00)   письмо автору
 
   для: epc   (16.05.2006 в 16:24)
 

По-моему, дело в разной реализации классов в версиях PHP.
Нужно смотреть определение класса, фрагмент метода которого Вы привели. А лучше весь файл.

   
 
 автор: epc   (16.05.2006 в 17:28)   письмо автору
 
   для: Trianon   (16.05.2006 в 17:00)
 

ну примерно вот такой фрагмент, весь файл слишком большой:


class cPart {

    var $data;
    var $subn;

    // Конструктор, $rn - путь rname к разделу.
    function cPart($rn, $fields = "*")
    {
        // Берем раздел
        if ($rn) {
            $r = mysql_query("select " . $fields . " from tmain where rname='" . $rn . "'");
            $this->data = mysql_fetch_array($r, MYSQL_ASSOC);
            // Берем путь к нему
            $this->subn[0][rname] = $this->data[rname];
            $this->subn[0][name] = $this->data[name];
            $this->subn[0][ID] = $this->data[ID];

            $this->getsn($this->data, 0);
        } else {
            $this->data = "";
            $this->subn = "";
        }
    }
    // Получить параметр
    function get($v)
    {
        return $this->data[$v];
    }
    // Получить список разделов
    function getMenu(&$r, $tip = "%%%%", $pid = "-1", $fields = "", $ls = '-1', $lf = '-1', $ord = "", $add = "")
    {
        // подготовка данных для запроса
        if (!$r) {
            if (!$fields)
                $fields = "name, rname, ID, n" . ($tip[1]?", data":"") . ($tip[0]?", des":"");
            if ($pid == '-1') $pid = "pid='" . $this->get('ID') . "'";
            else
            if ($pid == '-2') $pid = "pid=pid";
            else $pid = "pid='" . $pid . "'";

            if (!$ord) {
                if (!$this->get('sort')) {
                    if (!$ord) {
                        if ($tip[1] == '1') $ord = ''data'';
                        else $ord = ''n'';
                    }
                } else
                    $ord = $this->get('sort');
            }
            $query = "select " . $fields . " from tmain where " . $pid . " and (tip LIKE '" . $tip . "')  " . ($add?"and (" . $add . ")":"") . " order by " . $ord . " " . (($ls == '-1')?'':"limit " . $ls . ", " . $lf);
            // echo "<li>".$query;
            $r = mysql_query($query);
        }
        if ($s = mysql_fetch_array($r, MYSQL_ASSOC)) {
            $s[status] = -1;
            for ($i = 0; $i < count($this->subn); $i++)
            if ($this->subn[$i]['rname'] == $s['rname']) $s['status'] = $i;
            return $s;
        } else return false;
    }

   
 
 автор: Trianon   (16.05.2006 в 17:41)   письмо автору
 
   для: epc   (16.05.2006 в 17:28)
 

name, rname, ID, status где-нибудь определены? Если да, то как?

   
 
 автор: epc   (16.05.2006 в 17:57)   письмо автору
 
   для: Trianon   (16.05.2006 в 17:41)
 

не понял как определены? это названия столбцов в базе данных, больше нигде не определяются.

   
 
 автор: axxil   (16.05.2006 в 18:16)   письмо автору
 
   для: epc   (16.05.2006 в 17:57)
 

Смотрите:
        if ($rn) { 
            $r = mysql_query("select " . $fields . " from tmain where rname='" . $rn . "'"); 
            $this->data = mysql_fetch_array($r, MYSQL_ASSOC); 
            // Берем путь к нему 
            $this->subn[0][rname] = $this->data[rname]; 
            $this->subn[0][name] = $this->data[name]; 
            $this->subn[0][ID] = $this->data[ID]; 

            $this->getsn($this->data, 0); 
        } else { 
            $this->data = ""; 
            $this->subn = ""
        } 

Вариант когда $rn==false; (else)
И далее:
if ($this->subn[$i]['rname'] == $s['rname']) $s['status'] = $i; 

Т.е. $this->subn просто является пустой строкой и никак не массивом, откуда имеем ошибку

Может есть смысл вместо
$this->subn = "";
написать $this->subn = array();

   
 
 автор: Trianon   (16.05.2006 в 18:18)   письмо автору
 
   для: epc   (16.05.2006 в 17:28)
 

Попробуйте строку for ($i = 0; $i < count($this->subn); $i++) поставить под условие:

            if($this->subn != "") 
              for ($i = 0; $i < count($this->subn); $i++) 
                if ($this->subn[$i]['rname'] == $s['rname']) $s['status'] = $i; 

   
 
 автор: XPraptor   (16.05.2006 в 18:31)   письмо автору
 
   для: Trianon   (16.05.2006 в 18:18)
 

axxil правильно говорит. Я вообще не понимаю как оно на PHP4 работало. У вас имена столбцов в массивах без кавычек, это получается константы, и хи нужно дефайнить. Поставьте кавычки во всех массивах при именованных столбцах.

   
 
 автор: epc   (17.05.2006 в 11:32)   письмо автору
 
   для: XPraptor   (16.05.2006 в 18:31)
 

axxil, Ваш совет сработал. Даже не пришлось проставлять кавычки во всех массивах. Огромное вам спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования