我有一个带有文本字段的mysql表。其中一个文本条目包含:
<?
if(isset($_GET["id"])) {
include($index.".php");
} else {
include("front.php");
}
?>
当我检索mysql数据时,如何输出脚本所要做的mysql数据?它只是在我的索引文件中输出php而没有做任何事情。
答案 0 :(得分:2)
答案 1 :(得分:1)
首先,上面发布的代码不是要走的路。这是一般如何不进行编码的示例。
<强>为什么强>
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)将代码保存在文件中,然后在需要时进行包含。