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

PHP-在and Include/Require语句中将GET变量作为路径发送,php,mysql,database,Php,Mysql,Database,我有一种情况,我想使用一个php文件“query.php”来查找MySQL查询,将$\u POST或$\u 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'];

我有一种情况,我想使用一个php文件“query.php”来查找MySQL查询,将
$\u POST
$\u 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

include/require两者都将文件名作为规范,而不是URI。PHP不会将其解析为URI,因此您所尝试的不会起作用


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

在包含或需要文件时,不需要以类似get或POST的方式传递变量,只要在包含之前设置了值,变量就在文件之间共享

i、 e:

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

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

file2.php:

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

将输出:

价值1 价值2


作为一种快捷方式,您可以在内部使用
$\u REQUEST
,它是“GET”、“POST”、“COOKIE”和“ENVIRONMENT superglobals”的混合体。确切地说,进入它的是在
request\u order
.ini设置的控制下

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


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

正确的方法是将数据定义为母文件中的变量,然后在子文件中使用这些变量。

在您提供的代码中,解析器查找文件'query.php?tblName=classes',显然它不存在。

我有一个隐秘的怀疑,如果您在页面上包含query.php文件并尝试引用“get”变量,php实际上会查找您当前所在页面的url,而不是query.php。您可以做的一件事是在“include'query.php'”行上方调用query.php的页面中设置变量,然后在query.php中引用所述变量。我感谢您的建议!我听说或读到过,尽管$\u请求不如单独使用特定方法安全。不过,根据你的建议,我会调查的!感谢againIt的不安全性,因为您不知道特定值的确切来源,因为请求顺序中稍后的请求方法将覆盖先前的值。如果需要特定请求方法的值,则使用该特定的超全局。如果您正在执行搜索脚本之类的操作,并且不特别关心关键字来自何处或脚本是如何调用的,那么请使用_REQUEST。这非常完美。我不敢相信我没有想到这一点:“我想我太专注于重新发明车轮了,所以我没有考虑过。”这太棒了,谢谢你在我的情况下它不起作用了。我使用了
POST
require\u一次
保持一切不变。