2011-06-19 39 views
4

我有一种情况,我想使用php文件“query.php”来查看$_POST$_GET值作为MySQL查询。它看起来像这样:PHP - 将GET变量作为路径发送并包含/需要语句

<?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 

不过,我收到了一个错误:

Warning: require_once(query.php?tblName=classes) [function.require-once]: failed to open stream: No such file or directory

它是不能接受通过GET值的包含文件? PHP不会处理这个?

+0

我有一个偷偷摸摸的怀疑,如果你在一个页面上包含query.php文件,并尝试引用“获取”变量,PHP实际上会查找您当前所在页面的网址而不是query.php。你可以做的一件事就是设置页面中的变量,调用query.php上面的“include”query.php'“行,然后引用query.php中的所有变量。 – MoarCodePlz

回答

6

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

即:

file1.php称为file1.php VAR2 =值2

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

file2.php:

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

将输出:

value1 value2

+1

这是完美的。不敢相信我没有想到这一点:)我想我是如此专注于在这里重新创造轮子的想法,我没有考虑到这一点。这=辉煌,非常感谢 – netpoetica

+0

在我的情况下它不起作用。我用'POST'和'require_once'保持一切都是一样的。 –

0

包括/要求都采用文件名作为规格,而不是URI。 PHP不会将其解析为URI,因此您所尝试的内容不起作用。

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

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()失败。

+0

我欣赏这个建议!尽管$ _REQUEST比单独使用特定方法的安全性要低一些,但我已经听说过或读过某处。不过,根据你的建议,我会研究它!再次感谢 – netpoetica

+0

这是不安全的,因为您不清楚特定值来自哪里,因为请求方法稍后会在request_order中覆盖较早的值。如果您需要特定请求方法的值,请使用该特定的超全局。如果您正在执行类似搜索脚本的功能,并且不特别在意关键字来自哪里或脚本如何被调用,那么请使用_REQUEST。 –

1

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