Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Храрение и вывод переменных из базы


Автор: chiffa 26.8.2010, 13:56
Добрый день. У меня в базе хранятся переменные $_lang ['a'], $_lang ['b'], $_lang ['c']

После авторизации подключается языковый файл и пользователю должно вывести значения $_lang ['a'], $_lang ['b'], $_lang ['c'], но вместо это выводится просто текст

"$_lang ['a']"
"$_lang ['b']" 
"$_lang ['c']"

вопрос как преобразовать этот текст в переменные? Заранее спасибо за ответ 

Автор: CruorVult 26.8.2010, 14:11
Код

eval()

Автор: chiffa 26.8.2010, 14:37
Спасибо за ответ! Но почему то после обработки eval("\$_lang ['a'] = \"$_lang ['a']\";");

возвращает Array ['a]... не подскажешь почему так?

Автор: patap 26.8.2010, 14:42
может стоит все переделать? без хранения имен переменных в бд. Или если так уж хочется, то может лучше через сериализацию (http://ua.php.net/serialize)?

Автор: enoff 26.8.2010, 14:45
chiffa, Что находится в базе данных? Что находится в языковом файле?
Код

\$_lang ['a'] = "$_lang ['a']";

и что вы хотите добиться выполнением этого кода, который выведет parse error? Присвоение переменной $_lang['a'] строки "$_lang['a']"?

Цитата(patap @  26.8.2010,  15:42 Найти цитируемый пост)
может стоит все переделать?

и лучше выбрать что-то одно, база или файлы  smile 

Автор: Sanchezzz 26.8.2010, 15:00
файлы проше? в глобале и через фукцию нужно слово запрашивал. допустим при загрузки некого модуля грузится и класс и файл с языком
который можно слить в global $lang_;

а достовать через функцию.

function getMessage($line = ''){
    global $lang_;
        $line = ($line == '' OR !empty($lang_[$line])) ? FALSE : $lang_[$line];
               return $line;
}


<input type="button" value="<?=getMessage('Back')?>">


Ну если так нужно массивы в БД можно дедовским способом serialize(array) ,  unserialize(string)

Автор: chiffa 26.8.2010, 15:00
в базе находится $_lang ['a']

я языковом файле $_lang ['a']='ТЕСТ';

и вывожу я  $_lang ['a'] из базы, которая должна стать переменной и замениться на текст из языкового файла. Как с помощью eval это правильно сделать?...

Автор: enoff 26.8.2010, 15:09
Цитата(chiffa @  26.8.2010,  16:00 Найти цитируемый пост)
в базе находится $_lang ['a']

в этом случае лучше заменять с помощью регулярок. И в тексте использовать не $_lang['a'], а какие-нибудь специальные значения, чтобы удобно было заменять.
Или, думаю, лучший вариант, пересмотреть вашу систему...

Автор: gta4kv 26.8.2010, 16:41
Цитата(chiffa @ 26.8.2010,  15:00)
Как с помощью eval это правильно сделать?...

С помощью eval — делать вообще не правильно. Смотрите на регулярки. 
Так же, хранить ланг в бд, когда он уже хранится в файле — смысла не имеет.

Код

$app = singleton::getInstance( 'application' );
        
preg_match_all( '#lang\{(.+?)\}#', $this->page, $matches );
        
for( $i = 0; $i < count( $matches[ 0 ] ); $i++ )
{
    if( ! isset( $app->lang[ $matches[ 1 ][ $i ] ] ) )
    {
        $line = '[err#1]';
    }
    else
    {
        $line = $app->lang[ $matches[ 1 ][ $i ] ];
    }
          
    $this->page = str_replace( $matches[ 0 ][ $i ], $line, $this->page );    
}


$app->lang[ /**/ ] просто ассоциативный массив.


Цитата

файлы проше? в глобале и через фукцию нужно слово запрашивал. допустим при загрузки некого модуля грузится и класс и файл с языком
который можно слить в global $lang_;

Не надо учить людей тому, чего делать не нужно - а то послушают еще ведь.

Автор: chiffa 26.8.2010, 23:49
gta4kv, спасибо за ответ. ТОлько что такое singleton::getInstance?

и если не затруднит на конкретном примере можно?

Автор: gta4kv 27.8.2010, 00:00
singleton это излишки моего кода, для наглядности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)