【问题标题】:Calling PHP variables from inside a MySQL Database从 MySQL 数据库中调用 PHP 变量
【发布时间】:2009-06-27 00:14:41
【问题描述】:

我目前正在开发一个 CMS 系统,该系统直接根据保存在 MySQL 数据库中的信息构建网站。

这是我遇到的问题:

  • 在 CMS 内,用户输入模板编码
  • 网站前端(frontend.php)调用存储布局的变量($template_header)
  • 前端还通过从数据库中提取菜单代码来创建变量 $menu_code,该代码也是通过 CMS 存储的
  • 在模板代码内部,这个变量必须有一个break,当它被frontend.php运行时,它会被拾取。

这是我一直在尝试的:

frontend.php 内:

echo $template_header;

$template_header 内部:

<tr><td><center>'.$menu_code.'</center></td></tr>

frontend.php 在 IE 中运行时的样子:

<tr><td><center><script>rest of menu coding in here</script></center></td></tr>

我运行它时的样子:

<tr><td><center>'.$menu_code.'</center></td></tr>

它像文本一样显示它。这可能是一个简单的问题,但任何帮助将不胜感激,在这个项目的紧迫期限内,任何建议都将不胜感激。谢谢

【问题讨论】:

    标签: php mysql database variables echo


    【解决方案1】:

    如果我理解正确,一个简单的替换就可以解决问题:

    $template_data = "<tr><td><center>{%REPLACE_WITH_CONTENT%}</center></td></tr>";
    $template_data = str_replace("{%REPLACE_WITH_CONTENT%}", $menu_code, $template_data);
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,听起来您想要eval(),它将字符串解释为 PHP 代码,这意味着对 $menu_code 的任何引用都将被视为 PHP,而不是文本。

      来自手册:

      <?php
        $string = 'cup';
        $name = 'coffee';
        $str = 'This is a $string with my $name in it.';
        echo $str. "\n";
        eval("\$str = \"$str\";");
        echo $str. "\n";
      ?>
      

      输出以下内容

      This is a $string with my $name in it.
      This is a cup with my coffee in it.
      

      警告!!!!

      正如 cmets 中所指出的,此方法 (eval()) 为我们打开了解决重大安全问题的大门。此方法将评估任意代码,这可能非常危险。

      【讨论】:

      • 以及关于 eval() 不可避免的说明:eval() 可以执行任意代码,因此如果用户能够将例如array_map('unlink', glob('*')) 进入你的数据库 php 将愉快地删除 cwd 中的所有文件。如果您想/必须避免这种情况,请使用提供明确定义的子集(即模板系统)的东西。
      【解决方案3】:

      您似乎正在寻找的是:

      eval( $menu_code );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-24
        • 2016-06-02
        • 2014-11-21
        相关资源
        最近更新 更多