我得到了这个带有文本字段的 mysql 表。其中一个文本条目包含:
<?
if(isset($_GET["id"])) {
include($index.".php");
} else {
include("front.php");
}
?>
当我检索 mysql 数据时,如何按照脚本的意图输出 mysql 数据?它只是在我的索引文件中输出 php 而没有做任何事情。
首先,上面发布的代码不是要走的路。这是一般如何不编码的示例。
为什么
1) 你应该避免使用短的 PHP 标记,如 , <?
,<?=
以使你的代码更便携。因为如果服务器有一个选项,如allow_short_tags
禁用,那么 Web 服务器只会将您的代码视为纯文本。(不是 PHP 脚本)
2)if isset($_GET...)
块中的错误,因为您告诉脚本include($index.'.php')
何时$_GET['id']
具有任何值。任何!你甚至不过滤$_GET['id']
根据您最后的评论,这是对“为什么不应该将 PHP 代码存储在数据库中”的答案。
为了从数据库中读取代码,您应该(通常)
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)将代码保留在文件中,然后在需要时包含。