Если у меня есть php в базе данных, я могу это использовать?

51
3

Если у меня есть php в моей базе данных, я могу это использовать. В частности, у меня есть <?php echo $email;?> <?php echo $email;?> с столбцом под названием content. На защищенной странице, называемой пользователем, я вызываю столбец содержимого и выплевываю страницу. Подобно блогу в течение некоторого времени mysqli. Когда я просматриваю свою базу данных, хотя я вижу, что функция на самом деле является полным <?php echo $email;?> <?php echo $email;?> а не фактическая переменная, которая была отправлена с формой.

Редактировать:

Кроме того, я смотрю в firebug, чтобы увидеть, что отображается для значения внутри формы, и это действительно полный оператор эха. Вывод echo извлекается из базы данных как часть сохраненной формы. Разве это не хорошая практика? Если да, то как это можно сделать? Я что-то упускаю??

Дополнительная информация заключается в том, что я использую строку escape mysqli для ввода данных.

У меня есть сценарий, который выделяет содержимое страницы. В этом случае содержимое из базы данных представляет собой форму, которая содержит скрытое поле для электронной почты. Таким образом, я могу сказать, кто отправляет в базу данных, чтобы мы могли установить соединение.

На исходной странице находятся активные переменные, которые включены в эту страницу. Я включаю в форму из базы данных следующее поле:

<input type="hidden" id="email" value="<?php echo $email; ?>" />

Обычно эхо будет работать, но я не уверен, почему его нет. Вот почему я спрашиваю, влияет ли тот факт, что это поле ввода из базы данных не влияет на него, на основе переменных, уже расположенных на странице?

Дополнительный пример для объяснения:

<?php
include_once "includes/db_conx.php";
$sql = "SELECT * FROM course ORDER BY id DESC";
$sql_page = mysqli_query($db_conx,$sql);
while($row = mysqli_fetch_array($sql_page)){

$email = $row["email"];
}
?>

Thats электронная почта на фактической странице user.php.....

Теперь user.php также имеет область для контента.

<?php
include_once "includes/db_conx.php";
$sql = "SELECT * FROM content ORDER BY id DESC LIMIT 1";
$sql_page = mysqli_query($db_conx,$sql);
while($row = mysqli_fetch_array($sql_page)){

$content = $row["content"];
}
?>

Мы скажем, что контент выглядит так...

    <form>
<input type="hidden" id="email" value="<?php echo $email; ?>" />
//
</form>

Это также выводит на user.php уведомление о том, что user.php имеет $ email... как вы говорите, чтобы подойти к этому? Как еще я могу повторить это?

спросил(а) 2013-08-11T06:59:00+04:00 6 лет, 8 месяцев назад
1
Решение
51

Основываясь на комментариях, я бы сказал, что быстрый ответ - проверить связанную статью в моем первом комментарии. Да, проблема в том, что ваш код вывода формы, скорее всего, ожидает данных в переменной, а не в коде. Вам нужно eval() переменную, чтобы фактически выполнить код, содержащийся внутри. Однако это не лучшая практика.

Лучшим решением было бы просто сохранить содержимое $ email в БД и просто отправить его в вашу форму

Это разница между:

$x = '<php? echo $hello ?>';

$outstr= "<input type='hidden' value=' $x ' >";
//no this wont work unless you use eval($x)

РЕДАКТИРОВАТЬ:

Основываясь на приведенном выше объяснении с контентом, вам может потребоваться просто игнорировать все теги в контенте и заменить его на фактический контент? Я предполагаю, что вы не можете изменить дизайн db...

Две быстрые и грязные и, возможно, небезопасные вещи, которые вы можете попробовать:

include("data:,$content");
//or
eval('?>'.$content.'<?');

Или вы можете заменить регулярным выражением:

$phpTagPattern = "#<\?.*?(echo)\s+(\$\w+);.*?(\?>|$)#s";  //just searching specifically
//for <?php echo $varname; ?> to replace with $varname;
$replacePattern = "$2"; // this may need some cleaning/debugging here. It late...
$newContent = preg_replace($phpTagPattern,$replacePattern,$content);

Тогда вам все равно придется parse_str получать содержимое переменной в любом случае... несколько безопаснее, чем выполнение кода.

echo parse_str($newContent); //should get you to actual contents of $email variable

Все это может быть легче достигнуто с расширением токенизатора: http://www.php.net/manual/en/tokenizer.examples.php. Вы будете искать T_OPEN_TAG и T_CLOSE_TAG.

Для получения более высокого уровня лучшего способа сделать это (ТМ) было бы разумнее просто хранить ваши фактические данные в базе данных и помещать контент в шаблонный движок, например smarty. Затем вы создаете оболочку формы и просто передаете переменные туда, где это необходимо. Храните данные отдельно от логики, а разметка вывода/форматирования раздельная.

ответил(а) 2013-08-11T07:34:00+04:00 6 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема