0

我得到了这个带有文本字段的 mysql 表。其中一个文本条目包含:

<?
if(isset($_GET["id"])) {
include($index.".php");
} else {
include("front.php");
}
?>

当我检索 mysql 数据时,如何按照脚本的意图输出 mysql 数据?它只是在我的索引文件中输出 php 而没有做任何事情。

4

2 回答 2

2

使用eval().

请参见此处:PHP 手册 - eval()

但是您应该考虑为您的问题找到另一种解决方案,使您将代码放入 mysql 表中。大多数时候,这样的事情很容易避免并且被认为是不好的做法。

于 2013-01-06T00:33:12.210 回答
1

首先,上面发布的代码不是要走的路。这是一般如何不编码的示例。

为什么

1) 你应该避免使用短的 PHP 标记,如 , <?<?=以使你的代码更便携。因为如果服务器有一个选项,如allow_short_tags禁用,那么 Web 服务器只会将您的代码视为纯文本。(不是 PHP 脚本)

2)if isset($_GET...)块中的错误,因为您告诉脚本include($index.'.php')何时$_GET['id']具有任何值。任何!你甚至不过滤$_GET['id']

根据您最后的评论,这是对“为什么不应该将 PHP 代码存储在数据库中”的答案。

为了从数据库中读取代码,您应该(通常)

  • 连接到 SQL 服务器
  • 运行查询
  • 获取结果
  • eval()通过函数评估响应

但是,如果您的 SQL 服务器很忙并且没有响应怎么办?然后必须停止脚本。这通常被认为是一种bad practice,你永远不应该这样编码。

当您可以简单地执行以下操作时,为什么要执行所有上述“操作”:

<?php include('some_codes.php');// or better require()

另一个重要的事情

当您依赖$_GET['some_key']并根据键的值包含某些文件时$_GET,您应该始终验证$_GET['some_key']. 一个非常基本的验证如下所示:

<?php

if ( isset($_GET['foo']) ){

   if ( file_exists('../path' . $_GET['foo']) ){
      // seems like a valid one
      // do include then
   }
}

结论
1)不要使用短标签,而是使用完整标签 - <?php
2)不要相信用户输入,即永远不要相信你从$_GET和获得的值$_POST
3)将代码保留在文件中,然后在需要时包含。

于 2013-01-06T01:30:43.710 回答