<?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 написал(а):
Перепишите вот так
Спустя 1 минута, 31 секунда 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 ;
-- Структура таблицы `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 написал(а):
Попробуй так напиши
Покажи метод dbar из класса Db
$sql = "SELECT * FROM `menu` WHERE `sub` = '" . (int)$sub . "'";
Покажи метод dbar из класса Db
Спустя 3 минуты, 22 секунды (8.09.2011 - 22:33) sub_putnik написал(а):
Добавил ничего не поменялось...
Класс Db
Класс 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
Ошибка массива 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 написал(а):
Уже лучше, есть с чем работать
Спустя 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!!!
РЕСПЕКТ 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()
эти строки
А потом, когда будете выводить меню, напишите так
Если посмотреть на ваш исходный 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>";
}
}
?>
Может кому пригодится!