我有一种情况,我想使用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不会处理这个?
答案 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,因此您尝试的内容将无效。
最好设置一个包含/必需文件然后可以检查的对象。