Появилась потребность в создание меню которые будут храниться не в файлах а в базе. В моем случае это меню категорий. Но я решил сделать функцию более широкой и написал её для вывода не только категорий но и всех остальных меню.
То есть я пишу:
<?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) |
Это sql_Inj |
В смысле?