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

时间:2013-08-11 03:59:50

标签: php mysqli mysql-real-escape-string

如果我的数据库中有php,我可以使用它。具体来说,我有一个名为content的列<?php echo $email; ?>。在名为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"]; 
}
?>

这是实际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 ....你怎么说接近这个?我怎么能回应这个呢?

1 个答案:

答案 0 :(得分:1)

根据评论我会说快速回答是在我的第一条评论中检查链接的文章。是的问题是您的表单输出代码可能期望变量中的数据而不是代码。您需要eval()变量才能实际执行其中包含的代码。然而,这不是最佳做法。

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

区别在于:

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

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

编辑:

根据您对上述内容的解释,您可能只需要忽略内容中标记之间的所有内容并将其替换为实际内容?我假设你无法改变数据库设计......

两个快速&amp;肮脏的你可以尝试的不安全的事情是:

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's late...
$newContent = preg_replace($phpTagPattern,$replacePattern,$content);

然后你仍然需要使用parse_str来获取变量内容......可能比执行代码更安全。

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

使用tokenizer扩展可以更轻松地实现这一切: http://www.php.net/manual/en/tokenizer.examples.php 您将搜索T_OPEN_TAG和T_CLOSE_TAG。

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