2011-06-19 71 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',顯然它不存在。