2010-09-21 4 views
1

таблицы базы данных company_infoзначение Сохранение в качестве имени переменной в базе данных

----------------------------- 
| companyname | companytype | 
----------------------------- 
| Company One | Blah  | 
----------------------------- 
| Company Two | Blah2  | 
----------------------------- 

Таблица базы данных invoice_template

----------------------------- 
| Header  | bgcolor  | 
----------------------------- 
| $company | Red   | 
----------------------------- 
| $company | Biege  | 
----------------------------- 

PHP файл common_include.php

$company = ... //FROM db table company_info field companyname 

PHP файл invoice.php

include('common_include.php'); 
$header = ... //FROM db table invoice_template field header 
echo "Header is ". $header; 
echo "<br/>Company is ". $company; //$company is defined in common_include.php 

ВЫХОД из invoice.php, когда компания регистрируется в для eg.Company One

Header is $company 
Company is Company One 

Вопрос: Как я могу получить $ в компанию выход, который будет показан как компания один? i.e Как получить вывод из базы данных MySQL для обработки как переменной?

+1

Какова сделка с строкой '$ header = FROM db ...', потому что это должно быть недействительным PHP ... – DisgruntledGoat

+0

@DisgruntledGoat. $ header = FROM db .. недействителен php, это просто означает, что я извлекаю данные из db. – abel

ответ

2

Решение будет eval("echo $header"), хотя НИКОГДА НИКОГДА НЕОБХОДИМО использовать такие решения. Вы должны, по моему мнению, перенести все данные, связанные с компанией, в базу данных.

Обновление Не располагать $company в вашей базе. Реляционные базы данных должны быть реляционные. Это означает, что первичные ключи и внешние ключи. Затем данные следует искать по его отношению. Смотрите также, как ОРМ будет работать в этой ситуации:

echo $invoice_template->getCompany()->getName(); 
+0

Спасибо за ответ. Я не понимал, почему я не должен этого делать? Данные компании находятся в дБ. файл только заполняет его в переменных, так что приложение может получить к нему доступ с помощью include. Это рискованно? Пожалуйста, объясни. – abel

+0

и echo eval ($ header) могут работать, но не работают в моей настройке. потому что эта переменная и другие находятся в переменной, используемой для отображения счета в формате pdf. например.Настоящая строка похожа на $ pdfcontent = <<< EOF html ...

$ header

... еще html EOF; , и я использую TCPDF. Выход, который я теперь получаю, равен eval ($ comapny) – abel

+1

Поскольку я все еще препятствую вам идти по этому пути, это будет нечто вроде '$ company = 'My Company'; $ which = '$ company'; eval ("\ $ which = $ which;"); echo $ which; ' – bouke

1

Вы не хотите, чтобы это сделать. Вы просто открываете слишком много потенциальных уязвимостей, смешивая код и данные вроде этого - представьте себе, что происходит, когда злоумышленник получает доступ к вашей базе данных (напрямую или через SQL-инъекцию) и помещает в этот стол всевозможные сумасшедшие PHP-коды? Используя только одну уязвимость, подобную этой, злоумышленник может захватить весь сервер. Что вы хотите, вероятно, представляет собой комбинацию правильной структуры базы данных, используя соединения для запроса связанной информации за один раз и, возможно, простой текстовый поиск и замену (используя str_replace или, возможно, даже preg_replace) для заполнения текстовых шаблонов фактическими данными ,

+0

Спасибо. Я мог бы заменить $ company на псевдо переменную типа #company, а затем на preg_replace #company с текущим названием компании. – abel

+0

Вы также можете использовать '$ company', просто не кормите его' eval() 'или аналогично злыми конструктами. Кроме того, 'str_replace()' выполняет задание быстрее, чем 'preg_replace()', если вам не нужны какие-либо фантазии. – tdammers

1

Если $header установлен в буквальном значении строки $company и переменной $company устанавливается в строке Company One то это должно работать:

echo "Header is ". $$header; // outputs 'Header is Company One' 

Однако, как уже говорили другие, это не очень хорошая идея, особенно для обеспечения безопасности.

+1

Как я согласен, эта идея также является уродливой идеей, ей это не понравится. $ header должен быть установлен в буквальное строковое значение 'company'. В противном случае php выдает уведомление: «Неопределенная переменная $ company». Это должно работать: '$ header = substr ($ header, 1); $ Заголовок = $$ заголовок; echo $ header; '. Тем не менее, это так же уродливо, как 'eval()'. – bouke