1

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

编辑:

此外,我正在萤火虫中查看表单中显示的值,它确实是完整的 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....你说如何处理这个?我还能如何回应这个?

4

1 回答 1

1

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

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

这是以下之间的区别:

$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.'<?');

或者你可以用正则表达式替换:

$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 这样的模板引擎中会更有意义。然后您创建表单的外壳,并在需要的地方将变量传递给它。将数据与逻辑分开,输出/格式化标记仍然分开。

于 2013-08-11T04:34:59.187 回答