PHP - 将GET变量作为路径发送到Include / Require语句中

时间:2011-06-19 16:53:55

标签: php mysql database

我有一种情况,我想使用php文件“query.php”来查看$_POST$_GET值作为MySQL查询。它看起来像这样:

<?php
//verify data has been sent via POST or GET and set strings
//find supplied table name
if(isset($_POST['tblName'])){
    $strSuppliedTableName = $_POST['tblName'];
}
if(isset($_GET['tblName'])){
    $strSuppliedTableName = $_GET['tblName'];
}
else{
    $strSuppliedTableName = 'roles';
}

//find supplied field name or default to all fields in the table
if(isset($_POST['fieldName'])){
    $strSuppliedFieldName = $_POST['fieldName'];
}
else if(isset($_GET['fieldName'])){
    $strSuppliedFieldName = $_GET['fieldName'];
}
else{
    $strSuppliedFieldName = '*';
}

//query db
$query = 'SELECT ' . $strSuppliedFieldName . ' FROM ' . $strSuppliedTableName;

$results = mysql_query($query) or die(mysql_error());
?>

之后,我想在另一个将管理结果的文件中包含此文件“query.php”。我试图尽可能模块化。

<?php
require_once("query.php?tblName=classes");
......... (while loop, yadi yadi

然而,我收到一个错误:

  

警告:require_once(query.php?tblName = classes)[function.require-once]:无法打开流:没有这样的文件或目录

将GET值传递给包含的文件是不可接受的? PHP不会处理这个?

4 个答案:

答案 0 :(得分:6)

在包含或要求文件时,您不需要以get或POST方式传递变量,只要在包含发生之前设置了值,就可以在文件之间共享变量。

即:

file1.php称为file1.php?var2 = value2

<?php
$var1 = "value1";
$var2 = $_GET['value'];
include "file2.php";
?>

file2.php:

<?php
echo $var1.' '.$var2;
?>

将输出:

  

VALUE1   值2

答案 1 :(得分:1)

作为一种捷径,您可以在里面使用$_REQUEST,这是_GET,_POST,_COOKIE和_ENVIRONMENT超级全局的混合物。进入它的Exactyl受request_order .ini设置的控制。

或者,一种完全可靠的方法来检查您正在处理的方法是$_SERVER['REQUEST_METHOD']。在处理HTTP请求时始终设置此值,并且将是GET,POST,HEAD等...与检查表单字段的存在不同,它完全可靠 - 表单字段可能未提交(未选中复选框?) ,它可能会在HTML中重命名,但您忘记更改脚本等...

对于require(),除非指定绝对URL(http://...),否则PHP会将其参数解释为对本地文件的请求,并且不会将其传递给HTTP层。除非你有一个名为query.php?tblName...的文件,否则它将“找不到文件”并且require()失败。

答案 2 :(得分:1)

正确的方法是将数据定义为母文件中的变量,然后在子文件中使用这些变量。
在您给出的代码中,解析器查找文件'query.php?tblName = classes',显然它不存在。

答案 3 :(得分:0)

include / require都将文件名作为规范,而不是URI。 PHP不会将其解析为URI,因此您尝试的内容将无效。

最好设置一个包含/必需文件然后可以检查的对象。