добрый день! Подскажите пожалуйста, почему у меня выдает ошибку Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in XXX on line 12 при следующем фрагменте кода. PHP: class child { function select($parentid) { $sql = "SELECT * FROM modx_catalog WHERE parent=$parentid ORDER BY title ASC"; $result = mysql_query($sql); } function action($parentid) { $select_array = $this -> select($parentid) -> result; printf (mysql_fetch_array($select_array)); } } $obj = new child; $obj -> action(0); должен вывести инфу об одной записи
PHP: <? class child { function select($parentid) { $sql = "SELECT * FROM modx_catalog WHERE parent=$parentid ORDER BY title ASC"; return mysql_query($sql); } function action($parentid) { $select_array = $this -> select($parentid); printf (mysql_fetch_array($select_array)); } }
обьясните пожалуйста PHP: class child { function select($parentid) { $sql = "SELECT * FROM modx_catalog WHERE parent=$parentid ORDER BY title ASC"; echo "$sql <br />"; return mysql_query($sql); } function action($parentid) { $select_array = $this -> select($parentid); for ($z = 0; $z < mysql_num_rows($select_array); $z++) { $catalog_array = mysql_fetch_array($select_array); if ($catalog_array[isFolder] == 0) { $wraperr = $wraperr."<div style=\"margin-left: 15px;\">$catalog_array[title]</div>"; } else { $title = $this -> action($catalog_array[id]); $wraperr = $wraperr."<div style=\"margin-left: 15px;\"> <div style=\"margin-left: 15px;\">$catalog_array[title]</div> <div style=\"margin-left: 15px;\"> <div style=\"margin-left: 15px;\">$title</div> </div>"; } } echo ($wraperr); } } $obj = new child; $obj -> action(0); должен вывести, по идее, следущий список: Лесной Комплекс Оборудование Вентиляционное Конверс, ООО Сантехника Но вместо этого получаю Конверс, ООО Вентиляционное Сантехника Лесной Комплекс Оборудование
Tinvul - уберите, пожалуйста, весь мусор, и оставьте только то, где происходит сортировка (запрос) - объясните, какой порядок вы ожидаете и почему.
armadillo PHP: class child { // Данная функция делает запрос в БД MySQL function select($parentid) { $sql = "SELECT * FROM modx_catalog WHERE parent=$parentid ORDER BY title ASC"; return mysql_query($sql); } //Собственно в этой функции идет основная работа - обработка и сортировка полученной информации из БД function action($parentid) { //Получение массива компаний, у которых один родитель $select_array = $this -> select($parentid); //обработка массива for ($z = 0; $z < mysql_num_rows($select_array); $z++) { $catalog_array = mysql_fetch_array($select_array); //Если полученая строка не является папкой (то есть isFolder=0), то if ($catalog_array[isFolder] == 0) { //то строковой переменной $wrapper добавляем блок див с Названием строки $wraperr = $wraperr."<div style=\"margin-left: 15px;\">$catalog_array[title]</div>"; } else { // Если же Строка является родительской папкой, то получаем ее дочерние компании/строки // В данном случае переменой $title = Новый вызов функции, с уже измененым $parentid(нужна для выборки строк, где указаны у параметра parent передоваемое значение) $title = $this -> action($catalog_array[id]); //снова в конец $wraperr добавляем полученное значение; $wraperr = $wraperr."<div style=\"margin-left: 15px;\"> //это блок для название Папки <div style=\"margin-left: 15px;\">$catalog_array[title]</div> <div style=\"margin-left: 15px;\"> //Этот блок выводит полученный контейнер с дочерними документами <div style=\"margin-left: 15px;\">$title</div> </div>"; } } echo ($wraperr); } } //Создаем экземпляр класса, и просим начать с строк у которых Нет собственно родительской папки.... $obj = new child; $obj -> action(0); Собствено, я ожидал, что сначало он мне выдаст Строку с Лесной комплекс, т.к. Сортировка стоит по убыванию, потом пойдет Раздел Оборудование, у которого есть Два дочерних документа - Сантехника И вентиляция. У Вентиляции есть еще один дочерний документ. Я собственно предполагаю, что надо делать в нутри (при повторном вызове функции) новые экземпляры класса. Но не уверен что так можно и вообще ли я правильно мыслю... Или же нужна еще одна функция которая будет все это дело выводить уже после окончательной обработки Если надо то могу кинуть БД... З.Ы. я знаю что телепаты вымерли, если что-то упустил, то дополню
1. А где return для метода action? 2.Происходит следующее: Берется первая верхняя папка (Лесной Комплекс), до записи в переменную в 32 строке опять вызывается action и берется следующая папка (Оборудование). Таким образом спускаемся до "Конверс, ООО", выводим его. И начинаем подниматься. Выводим "Вентиляционное" и т.д. Думаю надо заменить echo ($wraperr); (40 строка) на return $wraperr;. И соответственно $obj -> action(0); (45 строка) на echo $obj -> action(0);