[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Динамическое меню
Snash
Прошел курс на сайте irbis-team.com и написал эту так сказать маленькую CMS. Это первое что я изучил после курсов Евгения П.

Появилась потребность в создание меню которые будут храниться не в файлах а в базе. В моем случае это меню категорий. Но я решил сделать функцию более широкой и написал её для вывода не только категорий но и всех остальных меню.

То есть я пишу:
<?php echo creatmenu('название меню'); ?>

Из таблицы у меня выбираются все ссылки принадлежащие этому меню.

Таблица с ссылками: id, title, public, type - тип меню(то есть к какому принадлежит), url - вид ссылки "content/1/all"

Теперь собственно сама функция:

<?php
/**
* Функция создания меню
*/


/**
* Подключаем базу
*/

include './libs/mysql.php';


function creatmenu($menu_data)
{
$res = mysqlQuery("SELECT `url`, `title`
FROM `"
. IRB_DBPREFIX ."menu`
WHERE `public` = 1
AND `type` = '"
.(string)$menu_data."'");
if (mysql_num_rows($res) > 0)
{

while($row = mysql_fetch_assoc($res))
{
$url = explode( "/", $row['url']);
$link = href('page='.$url[0].'','rem='.$url[1].'','id='.$url[2].'','article='.$url[3].'');
$menu_link[] = '<a href="'.$link.'/" />'.$row['title'].'</a></br>';
}

$menu = implode($menu_link);
}
return $menu;
}


Первое: как можно убрать подключение к базе из функции? Ведь это нехорошо, потому что если будет вызываться несколько меню одновременно то следовательно и подключений файла(include './libs/mysql.php';) будет несколько.

Второе: как вообще написана функции? Это моя первая функция после курсов Попова, так что не уверен что все сделано как следует. Ну то есть не сильно ли такая маленькая функция грузит сервер(для своих размеров конечно) и т.п.



Спустя 25 минут, 19 секунд (21.07.2011 - 16:52) alex12060 написал(а):

$res = mysqlQuery("SELECT `url`, `title`
FROM `"
. IRB_DBPREFIX ."menu`
WHERE `public` = 1
AND `type` = '"
.(string)$menu_data."'");

Это sql_Inj

Спустя 1 минута, 13 секунд (21.07.2011 - 16:53) alex12060 написал(а):
alex12060

Подключи базу один раз и все.

Спустя 9 минут, 33 секунды (21.07.2011 - 17:03) Snash написал(а):
Цитата (alex12060 @ 21.07.2011 - 13:52)

$res = mysqlQuery("SELECT `url`, `title`
FROM `"
. IRB_DBPREFIX ."menu`
WHERE `public` = 1
AND `type` = '"
.(string)$menu_data."'");

Это sql_Inj

В смысле?
Быстрый ответ:

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