如果我在数据库中有php,我可以使用它吗


If I have php in database can I use that?

如果我的数据库中有php,我可以使用它吗。具体来说,我有一个<?php echo $email; ?>,它有一个名为content的列。在一个名为user的受保护页面上,我调用内容列并吐出一个页面。类似于博客会在一段时间内mysqli。当我查看数据库时,我发现函数实际上是完整的<?php echo $email; ?>,而不是与表单一起发布的实际变量

编辑:

此外,我还在firebug中查看表单中显示的值,它确实是完整的echo语句。echo语句是作为存储表单的一部分从数据库中提取的。这不是一种好的做法吗?如果是这样,如何做到这一点?我是不是错过了什么??

进一步的信息是,我正在使用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"]; 
}
?>

这是实际用户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。。。。你说如何处理这个问题?我还能怎么回应呢?

根据这些评论,我认为一个快速的答案是查看我第一条评论中的链接文章。是的,问题是表单输出代码可能需要变量中的数据,而不是代码。您需要对变量求值(),以便实际执行包含在中的代码。然而,这不是最佳实践。

一个更好的解决方案是将$email的内容存储在DB中,然后将其发送到您的表单

这是之间的区别

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

编辑:

根据您上面对内容的解释,您可能只需要一种方法来忽略内容中标记之间的所有内容,并用实际内容替换它?我想你不能改变数据库的设计。。。

两个快速&脏&也许你可以试试不安全的东西:

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

或者您可以用regex:替换

$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's 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。

对于高级的Better Way To Do This(TM)类型的解释,简单地将实际数据存储在数据库中,并将内容放入smarty这样的模板引擎中会更有意义。然后创建表单的外壳,并在需要的地方将变量传递给它。保持数据与逻辑分离,输出/格式化标记仍然分离。

相关文章: