【问题标题】:php mySQL echo database content with php and html codephp mySQL 使用 php 和 html 代码回显数据库内容
【发布时间】:2014-03-26 11:24:55
【问题描述】:

我想知道如何实现这一点:我在数据库中有内容,我正在通过 php 检索。我想要做的是回显该内容,但不是纯文本,而是执行该字符串中的 php 代码,并且正确显示其中的 html 代码。所以就像我会包含一个页面一样

    ///File:test.php
    <?php
         //some php code to execute
    ?>
    <div>
        //some html
    </div>

所以我想要实现的行为与我会做的事情相同

    ///php code
    include test.php

但我不想包含它,而是想做类似的事情

    ///php code
    echo $content; ////$content="string retrieved from database";

我知道eval(),但这仅在字符串仅包含 php 代码时才有效。

编辑 我要执行的代码不会被用户以任何方式修改。包含一个带有 php 代码和 hmtl 代码的页面和做我所要求的有什么区别?如果有人能启发我,我真的会非常感激。

提前致谢。

【问题讨论】:

  • 不好的做法,不要这样,不要将代码存储在数据库中。 google why not store php code in the database then execute it 你会在这个问题上找到一百万件事情。
  • 不要那样做。是什么让你想这样做?
  • 同上 - 这听起来非常混乱和危险。
  • 承认您担心安全问题 - 如果有人能回答这个问题,我仍然非常希望
  • 有些解决方案确实比其他解决方案更糟糕,但这属于非常糟糕的类别,因此为什么没有人这样做。所以我再次问:是什么让你想这样做?

标签: php html mysql echo


【解决方案1】:

您可以使用allow_url_include directive 来执行此操作。

这样做,您可以编写一个 PHP 脚本,只查询存储在数据库中的 PHP 代码并将其输出。结果将包含在包含文件的脚本中,并再次解释。

这是一个工作示例。它不从数据库中读取代码;为了简单起见,我只是用代码设置了一个变量,但如果 $a 从存储在数据库中的字符串中获取其值,它也可以工作。

首先,您必须将allow_url_include 设置为On。打开你的php.ini 文件并添加

allow_url_include = On

然后重启你的 httpd 服务器。

现在,我们将编写两个 PHP 脚本。第一个是从数据库中查询源代码并将其发送到stdout,命名为include.php。在这个例子中,它只声明了一个简单的函数:

<?php
  header('Content-type: application/x-httpd-php');

  $a = <<<PHP_STR
<?php
  function test() {
    echo 'Hello World!';
  }
?>
PHP_STR;

  echo $a;
?>

注意header() 调用是必需的,否则&lt;?php?&gt; 将被转义。在您的解决方案中,$a 值将从数据库中查询,而不是设置为常量值,但它是相同的。

最后,将包含此生成代码的 PHP 文件命名为 test.php

<?php
  include('http://localhost/include.php');
?>
<span style="background: lightgreen; color: white; border: 1px solid black;">
  <?php test(); ?>
</span>

现在我在 5 月浏览器中打开 http://localhost/test.php,我在浅绿色背景上以白色字符显示 Hello World,并被黑色细边框包围。

希望对你有帮助。

【讨论】:

  • 感谢您的回答,您能否进一步解释一下您的意思?
  • 我会在今天中午编辑我自己的答案,用一个工作示例来完成它,如果你觉得可以的话:)
  • 完成了。但是,请按照技术上的方式来看待它,但是对于您想要做的事情,可能有比这个更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多