簡體   English   中英

PHP $ _GET和$ _POST未定義的問題

[英]PHP $_GET and $_POST undefined problem

我是PHP的新手,所以如果這是一個簡單的問題,我道歉...

我正在將PHP站點從一個服務器移動到另一個服務器。 新服務器是IIS 7.0,PHP 5.2.1,短開標簽打開“On”,我不知道原始服務器是如何設置的(我剛剛給出了代碼)。

以下是其中一個頁面的第一部分代碼:

<?
ob_start();
session_start();

if($_GET['confirm'] == 13 || $_GET['confirm'] == 14 || $_GET['confirm'] == 15 || $_GET['confirm'] == 16) 
{
    include("test/query/test_query.php");
}
?>

執行此頁面時,始終顯示以下錯誤:

PHP注意:未定義的索引:在第6行的[文件位置] .php中確認

此外,用戶通過從主頁(標准HTML頁面)重定向來訪問此頁面。 正確導航到的完整URL如下:

HTTP:// WWW [現場] .COM / test.php的#登錄

...我理解為什么會拋出錯誤。 我不明白的是這個代碼如何在原始服務器上工作。 我可以錯過配置設置嗎?

*同樣的問題發生在整個網站的幾十個地方。 這只是該問題的一個特定事件。

新服務器將error_reporting設置為E_ALL。 你所看到的是通知,而不是錯誤。 嘗試:

error_reporting(E_ALL ^ E_NOTICE)

將錯誤報告設置為E_ALL時,訪問未設置的數組成員會生成錯誤。 如果您不希望降低錯誤報告級別,請在檢查$ _GET ['var']之前將代碼更改為:

if(isset($_GET['confirm']) && ($_GET['confirm'] == 13 || $_GET['confirm'] == 14 || $_GET['confirm'] == 15 || $_GET['confirm'] == 16)) {

通過在實際訪問$_GET['confirm']之前添加對isset()的調用,您將驗證您沒有訪問未設置的數組成員。 $_GET['confirm']只有在URL結束時才會設置?confirm=...?something...&confirm=...

我建議優化閱讀代碼:

if (isset($_GET['confirm']) && ($_GET['confirm'] >= 13 && $_GET['confirm'] <= 16)) 

我完全贊同喬希的建議。

由於沒有索引$ _GET ['confirm'],PHP會拋出一條通知,指出您正在查看未定義的索引。 正在顯示通知,因為新服務器在error_reporting中設置了E_NOTICE標志,可以在php.ini中,也可以在某些配置文件或在頁面加載上運行的引導程序中設置。

從php手冊中, E_NOTICE :“運行時通知。指示腳本遇到可能表示錯誤的內容,但也可能在正常運行腳本的過程中發生。”

如果您不擔心,可以嘗試關閉通知,或者使用它們追蹤可能存在問題的地方。

對於您發布的代碼,一個簡單的解決方法是將條件更改為

if(isset($_GET['confirm']) && <list of OR conditions>)

這樣,如果沒有'確認'索引,PHP將無法評估條件。

isset()是一個有用的函數。 如果變量存在則返回“true”,否則返回“false”。 通常,人們將它與$_GET$_POST$_GET全局結合使用來確定您是否從網站上的其他頁面發送 - 這允許您根據用戶來自何處以及數據是什么來創建不同的操作標記。 它還可以防止嘗試使用尚未定義的變量時出現錯誤,例如OP正在獲取。 因此,無需編寫兩個不同的.php文件,並擔心將用戶發送到錯誤的文件,您可以在一個頁面中完成所有操作。

周傑倫,我會小心你對其中一些電話的使用。 <?php<?更有可能工作<? 我聽說session_start()應該是設置到瀏覽器的第一件事,否則會導致頭問題。 是的,你需要在使用它之前聲明一個變量 - 如果你沒有輸入[file].php?confirm=[some number]作為你的URL,你的頁面將會破壞,除非你修改它以允許休息。

那是因為似乎沒有設置confirm查詢字符串變量,你可以檢查它:

ini_set('display_errors', true);
error_reporting(E_ALL);

var_dump($_GET['confirm']);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM