Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Обработка полученной информации перед выводом пользователю
Форумы портала PHP.SU » » Работа с СУБД » Обработка полученной информации перед выводом пользователю

Страниц (2): [1] 2 »
 

1. Uchenik - 23 Августа, 2011 - 07:42:55 - перейти к сообщению
Возможно эта ситуация уже здесь описывалась, но я не нашёл. У меня в БД есть таблица Config, в которую записываются конфигурации структуры сайта и т.д. Ну просто чтобы не писать все параметры всех страниц в коде, я решил сделать их в БД и просто вытягивать нужное.
Структура таблицы
Спойлер (Отобразить)

в этой таблице есть такая запись
Спойлер (Отобразить)

И вытягивается всё таким запросом
select variable from config where category='Menu' and Access=".$_SESSION['access']." and Location={$_SERVER['REQUEST_URI']}
Всё хорошо, всё прекрасно работает, но
пользователю выводится меню вот в таком виде
Спойлер (Отобразить)


Как теперь сделать так, чтобы перед выводом из БД эти все переменные заменялись в зависимости от языка пользователя? Т.е. выводились не сами переменные, а их значение в соответствии с настройками вошедшего юзера? Имеются несколько Lang файлов
примерно такого содержания
Спойлер (Отобразить)
2. КЫР - 23 Августа, 2011 - 07:54:59 - перейти к сообщению
http://www.php.su/functions/?eval
3. Uchenik - 23 Августа, 2011 - 08:02:57 - перейти к сообщению
т.е. как-то так?

PHP:
скопировать код в буфер обмена
  1. $q="select variable from config where category='Menu' and Access=".$_SESSION['access']." and Location={$_SERVER['REQUEST_URI']}";
  2. $result=mysql_query($q);
  3. $myrow=mysql_fetch_array($result);
  4. eval ("\$myrow['variable'] = \"$myrow['variable']\";");
  5. echo $myrow['variable'];
4. КЫР - 23 Августа, 2011 - 08:05:08 - перейти к сообщению
Uchenik
как-то так, да)
5. Uchenik - 23 Августа, 2011 - 08:05:37 - перейти к сообщению
выводит
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\{Location}\www\parameters.php on line 6
6. КЫР - 23 Августа, 2011 - 08:07:33 - перейти к сообщению
какая строка в $myrow['variable'] содержится?
7. Uchenik - 23 Августа, 2011 - 08:08:51 - перейти к сообщению
variable это поле в БД, там лежит
Спойлер (Отобразить)
8. КЫР - 23 Августа, 2011 - 08:10:18 - перейти к сообщению
Uchenik
так вы сначала переменные все из этого кода вытащите, а потом уже к каждой eval делайте
9. Uchenik - 23 Августа, 2011 - 08:11:16 - перейти к сообщению
Всмысле? Не понял
10. КЫР - 23 Августа, 2011 - 08:12:56 - перейти к сообщению
надо чтобы было, например
$var[1] = "$lang['link.calls']"
$var[2] = "$lang['link.calls.desc']"
и т.д.
а потом к каждому $var[] eval применять
11. Uchenik - 23 Августа, 2011 - 08:14:48 - перейти к сообщению
Хмм... по такой логике нет никакого смысла записывать всё в БД, если в таком случае приходится применять кучу всяких проверок и в результате код получается ещё более громозтким, я просто думал что вместо того чтобы писать меню прямо на странице, можно его записать в БД и оттуда вытягивать, а теперь получается что его нельзя просто вытянуть, нужно кщё и обработать?
12. КЫР - 23 Августа, 2011 - 08:29:59 - перейти к сообщению
Uchenik
вообще де-факто стандарт - меню в отдельном файле, который инклюдится везде
13. Uchenik - 23 Августа, 2011 - 08:45:56 - перейти к сообщению
Это конечто интересное предложение, но я это уже пробовал, и как-то не очень удобно получается, когда у меня больше 20 разных меню, которые должны выводится в зависимости от вошедшего пользователя, его местоположения и выбранного языка, поэтому создание отдельного меню файла отпало сразу после начала создания файла самого меню, и файла, который будет проводить все эти проверки, слишком уж много параметров. И тем более планируется что меню можно изменять из админки, а это без БД я пока не представляю, так как с AJAX я не дружу, а вытягивать файл с сервера чтобы переделать менюшку слишком много гемора. Можно конечно попробовать поэкспериментировать с ковычками в самой записи таблицы, чтобы переменные воспринимались как переменные, а не как часть текстового сообщения
14. КЫР - 23 Августа, 2011 - 09:07:59 - перейти к сообщению
Uchenik
тогда предлагаю не парить мозг и бд хранить пункты меню со ссылками, язык, к которому относится этот пункт и права доступа
15. Uchenik - 23 Августа, 2011 - 09:15:26 - перейти к сообщению
Тоже не вариант. Я заранее не знаю какой язык у пользователя, и какие у него права доступа, и на какой странице он находится. При построении меню планировалось что БД просто выведет нужное меню, а дальше просто переведу на нужный язык. Или мне придётся в самой таблице писать все записи несколько раз, чтобы учесть все возможные варианты, огромная таблица получится. 10 Location, 5 уровней доступа, 3 возможных языка пользователя, это уже 150 записей в таблице, не считая того что нужно ещё учесть другие параметры конфигурации вошедшего пользователя.

 

Powered by ExBB FM 1.0 RC1