[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Надо разобратся с выводом меню
sub_putnik

<?php
class
Menu{
static function creatMenu($sub = "0"){
Db::opendb();
$sql = "SELECT * FROM menu WHERE sub = '$sub'";
$res = Db::dbsql($sql) or die("Ошибка выборки!");
$row = Db::dbar($res) or die("Ошибка массива sql!");
Db::closedb();
echo "<ul>\n\r";
do{
echo "<li><a href='".$row['link']."'".$row['func'].">".$row['name']."</a></li>\n\r";
self::creatMenu($row['id']);
}
while($row = Db::dbar($res));
echo "</ul>\n\r";
}

}

?>


Пишет ошибку когда выводится запрос с несуществующем $sub

$sub это подпункт меню который привязан к id пункту родителя



Спустя 56 секунд (8.09.2011 - 22:15) Winston написал(а):
Какую ошибку выводит ?

Спустя 44 секунды (8.09.2011 - 22:15) sub_putnik написал(а):
Ошибка массива sql!

Спустя 1 минута, 42 секунды (8.09.2011 - 22:17) Winston написал(а):
Перепишите вот так
$res = Db::dbsql($sql) or die("Ошибка выборки!<br/>" . mysql_error());
$row = Db::dbar($res) or die("Ошибка массива sql!<br/>" . mysql_error());




Спустя 1 минута, 31 секунда Winston написал(а):
Какую ошибку выводит ?

Спустя 4 минуты, 48 секунд (8.09.2011 - 22:22) sub_putnik написал(а):
Ничего не поменялось...

Спустя 40 секунд (8.09.2011 - 22:22) Winston написал(а):
mysql_error() должно текст ошибки выдать.

Спустя 1 минута, 52 секунды (8.09.2011 - 22:24) sub_putnik написал(а):

Спустя 4 минуты, 34 секунды (8.09.2011 - 22:29) sub_putnik написал(а):
--
-- Структура таблицы `menu`
--

CREATE TABLE IF NOT EXISTS `menu` (
`id` int(3) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`sub` int(11) NOT NULL,
`func` text NOT NULL,
`link` text NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

Спустя 18 секунд (8.09.2011 - 22:29) Winston написал(а):
Попробуй так напиши
$sql = "SELECT * FROM `menu` WHERE `sub` = '" . (int)$sub . "'";

Покажи метод dbar из класса Db

Спустя 3 минуты, 22 секунды (8.09.2011 - 22:33) sub_putnik написал(а):
Добавил ничего не поменялось...

Класс Db

<?php
class
Db{
const DBHOST = "localhost";
const DBLOGIN = "мой логин";
const DBPASS = "мой пасс";
const DBNAME = "моё имя";
static function connectdb(){
$db = mysql_connect(self::DBHOST,self::DBLOGIN,self::DBPASS) or die("Нет соединения с базой");
return $db;
}
static function opendb(){
mysql_select_db(self::DBNAME,self::connectdb()) or die("База не открывается!");
}
static function closedb(){
mysql_close();
}
static function dbsql($sql){
$result = mysql_query($sql) or die("Данные не выбрались!");
return $result;
}
static function dbar($res){
$row = mysql_fetch_assoc($res);
return $row;
}
}

?>

Спустя 9 минут, 26 секунд (8.09.2011 - 22:42) Winston написал(а):
Цитата (sub_putnik @ 8.09.2011 - 22:14)
  do{
  echo "<li><a href='".$row['link']."'".$row['func'].">".$row['name']."</a></li>\n\r";
  self::creatMenu($row['id']);
  }
  while($row = Db::dbar($res));

Замени на
    while($row = Db::dbar($res)){
echo "<li><a href='".$row['link']."'".$row['func'].">".$row['name']."</a></li>\n\r";
self::creatMenu($row['id']);
}

Спустя 2 минуты, 39 секунд (8.09.2011 - 22:45) sub_putnik написал(а):
Пропал список, так выводит http://project.newukr.net/

Спустя 3 минуты, 16 секунд (8.09.2011 - 22:48) Winston написал(а):
Цитата (sub_putnik @ 8.09.2011 - 22:14)
Db::closedb();

Ты закрываешь соединение с БД, а после того обращаешься к ней.
Перепиши так
static function creatMenu($sub = 0){
Db::opendb();
$sql = "SELECT * FROM `menu` WHERE sub = '" . (int)$sub . "'";
$res = Db::dbsql($sql) or die("Ошибка выборки!<br/>" . mysql_error());
$row = Db::dbar($res) or die("Ошибка массива sql!<br/>" . mysql_error());
echo "<ul>";
while($row = Db::dbar($res)){
echo "<li><a href='".$row['link']."'".$row['func'].">".$row['name']."</a></li>\n\r";
self::creatMenu($row['id']);
}
echo "</ul>";
Db::closedb();
}

Спустя 8 минут, 16 секунд (8.09.2011 - 22:56) sub_putnik написал(а):
Сначала переставил, а потом вообще убрал разрыв соединения с базой.... результат тот же(((

Спустя 10 часов, 52 минуты, 32 секунды (9.09.2011 - 09:49) Winston написал(а):
Тогда так попробуй
Свернутый текст
static function creatMenu($sub = 0){
Db::opendb();
$sql = "SELECT * FROM `menu` WHERE `sub` = '" . (int)$sub . "'";
$res = mysql_query($sql) or die("Ошибка выборки!<br/>" . mysql_error());
$row = mysql_query($res) or die("Ошибка массива sql!<br/>" . mysql_error());
echo "<ul>";
while($row = mysql_fetch_assoc($res)){
echo "<li><a href='".$row['link']."'".$row['func'].">".$row['name']."</a></li>\n\r";
self::creatMenu($row['id']);
}
echo "</ul>";
}

Спустя 1 час, 19 минут, 29 секунд (9.09.2011 - 11:08) sub_putnik написал(а):
Вывело

Ошибка массива sql!
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #6' at line 1

Спустя 1 минута, 11 секунд (9.09.2011 - 11:09) Winston написал(а):
Уже лучше, есть с чем работать smile.gif

Спустя 2 минуты, 10 секунд (9.09.2011 - 11:12) sub_putnik написал(а):
Из за чего может она возникать?

Спустя 6 секунд (9.09.2011 - 11:12) Winston написал(а):
Цитата (Winston @ 9.09.2011 - 09:49)
$res = mysql_query($sql) or die("Ошибка выборки!<br/>" . mysql_error());
    $row = mysql_query($res) or die("Ошибка массива sql!<br/>" . mysql_error());

Вот
$row = mysql_query($res) 

Ты ф-и mysql_query передаешь не sql запрос, а результат работы другой ф-и mysql_query из-за этого и ошибка.

Спустя 2 минуты, 7 секунд (9.09.2011 - 11:14) sub_putnik написал(а):
Есть предложения как поправить?

Спустя 2 минуты, 40 секунд (9.09.2011 - 11:16) Winston написал(а):
Пробуй так
static function creatMenu($sub = 0){
Db::opendb();
$sql = "SELECT * FROM `menu` WHERE `sub` = '" . (int)$sub . "'";
$res = mysql_query($sql) or die("Ошибка выборки!<br/>" . mysql_error());
echo "<ul>";
while($row = Db::dbar($res)){
echo "<li><a href='".$row['link']."'".$row['func'].">".$row['name']."</a></li>\n\r";
self::creatMenu($row['id']);
}
echo "</ul>";
}

Спустя 4 минуты, 27 секунд (9.09.2011 - 11:21) sub_putnik написал(а):
Всё великодушное спасибо!!! зароботало!!!

РЕСПЕКТ Winston!!!

Спустя 3 минуты, 51 секунда (9.09.2011 - 11:25) Winston написал(а):
Ну тогда метод привести к первоначальному виду, с исправлением ошибок :)
Свернутый текст
class Menu{
static function creatMenu($sub = 0){
Db::opendb();

$sql = "SELECT * FROM `menu` WHERE `sub` = '" . (int)$sub . "'";
$res = Db::dbsql($sql) or die("Ошибка выборки!");

echo "<ul>\n\r";
while($row = Db::dbar($res));{
echo "<li><a href='".$row['link']."'".$row['func'].">".$row['name']."</a></li>\n\r";
self::creatMenu($row['id']);
}
echo "</ul>\n\r";

Db::closedb();
}

}

Спустя 16 минут, 41 секунда (9.09.2011 - 11:41) Winston написал(а):
sub_putnik
Если посмотреть на ваш исходный html код, то там черти-что, особенно со списком, теги ul натыканы, куда попало. Потому лучше уберите из своего метода createMenu()
эти строки
echo "<ul>\n\r";
....

echo "</ul>\n\r";

А потом, когда будете выводить меню, напишите так
echo "<ul>";
Menu::creatMenu(....);
echo "</ul>";

Спустя 10 минут, 49 секунд (9.09.2011 - 11:52) sub_putnik написал(а):
Главное что зароботало, а там уже буду игратся...

Спустя 20 дней, 3 часа, 45 минут, 57 секунд (29.09.2011 - 15:38) sub_putnik написал(а):
Чуть изменил код чтоб не выводились лишние улы


<?php
class
Menu{
static function creatMenu($sub = 0){
Db::opendb();
$sql = "SELECT * FROM `menu` WHERE `sub` = '" . (int)$sub . "'";
$res = Db::dbsql($sql) or die("Ошибка выборки!");

while($row = Db::dbar($res)){
$men .= "<li><a href='".$row['link']."'".$row['func'].">".$row['name']."</a>";
$submen = self::creatMenu($row['id']);
if($submen != ""){$men .= "<ul>".$submen."</ul>";}
$men .= "</li>\n\r";
}
Db::closedb();
return $men;
}

static function showMenu(){
print "<ul>";
echo self::creatMenu();
print "</ul>";
}
}

?>


Может кому пригодится!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.