| |
|
|
| | Был скрипт,который на 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;
Не подскажете ли в чем может быть проблема? | |
| |
|
|
| |
|
|
| |
для: epc
(16.05.2006 в 15:00)
| | | Исправьте эту строку следующим образом
<?php
if ($this->subn[$i]['rname'] == $s['rname']) $s['status'] = $i;
?>
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(16.05.2006 в 16:14)
| | | не помогает, та же самая ошибка в той же строке...
я уже и скобки пробовал фигурные ставить... тоже не помогло.. | |
| |
|
|
| |
|
|
| |
для: epc
(16.05.2006 в 16:24)
| | | По-моему, дело в разной реализации классов в версиях PHP.
Нужно смотреть определение класса, фрагмент метода которого Вы привели. А лучше весь файл. | |
| |
|
|
| |
|
|
| |
для: 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;
}
|
| |
| |
|
|
| |
|
|
| |
для: epc
(16.05.2006 в 17:28)
| | | name, rname, ID, status где-нибудь определены? Если да, то как? | |
| |
|
|
| |
|
|
| |
для: Trianon
(16.05.2006 в 17:41)
| | | не понял как определены? это названия столбцов в базе данных, больше нигде не определяются. | |
| |
|
|
| |
|
|
| |
для: 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(); | |
| |
|
|
| |
|
|
| |
для: 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;
|
| |
| |
|
|
| |
|
|
| |
для: Trianon
(16.05.2006 в 18:18)
| | | axxil правильно говорит. Я вообще не понимаю как оно на PHP4 работало. У вас имена столбцов в массивах без кавычек, это получается константы, и хи нужно дефайнить. Поставьте кавычки во всех массивах при именованных столбцах. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(16.05.2006 в 18:31)
| | | axxil, Ваш совет сработал. Даже не пришлось проставлять кавычки во всех массивах. Огромное вам спасибо. | |
| |
|
|