2010-11-17 59 views
1

我一直在處理本地服務器上的項目。現在是上傳它的時候了,所以我就這麼做了。我開始在網上進行測試,導航無法正常工作。當不在本地測試時,URL中的變量不起作用

導航的工作原理是這樣:

<a href="index.php?p=add">Add</a> 

頁上,然後檢查$p是否存在,如果是這樣,它顯示的相關內容。出於某種原因,儘管我點擊鏈接時我的內容並未顯示出來。我打開了錯誤報告,並添加了此行(第39行)

echo $p; 

到文檔。現在我得到這個錯誤:Notice: Undefined variable: p in /home/silver/public_html/admin/index.php on line 39但只有在線測試時,它在我本地測試時正常工作。

我可以發佈我的代碼,如果我需要,但有很多它,我不知道哪一位是問題。

UPDATE: 感謝所有的答覆,但我很困惑,你如何使用你的建議,我已經習慣了做事我的樣子。

此刻,我這樣做是爲了檢查$p變量是什麼

<?php if(!isset($p)) { // DEFAULT PAGE VIEWED AT INDEX.PHP ?> 

,並使用此鏈接到網頁:

<a href="index.php?p=add">Add New Item</a> 
+0

你有一些東西,說:'$ P = $ _GET [ 'P'];' ? – 2010-11-17 14:38:39

回答

3

您依賴register_globals,這是PHP的一個過時和棄用的功能。該功能自動翻譯GET,POST,COOKIE,SERVER等變量並將其插入全局範圍。這意味着file.php?p=blah將導致$p == 'blah'。由於大量不同的範圍和安全原因,這是一個壞主意in the PHP manual

改爲使用superglobals(例如$_GET,$_POST,$_SERVER)。


在回答您的更新問題,你的代碼

<?php if(!isset($p)) { // DEFAULT PAGE VIEWED AT INDEX.PHP ?> 

應該成爲

<?php if(!isset($_GET['p'])) { // DEFAULT PAGE VIEWED AT INDEX.PHP ?> 
+0

魔術引號是一個不同的功能,但不應該使用。 – Sonny 2010-11-17 14:44:29

+1

@Sonny是的,謝謝你,白癡時刻。固定。 – lonesomeday 2010-11-17 14:46:33

+0

我更新了我的第一篇文章 – Chrish 2010-11-17 14:55:55

1

$p不會自動從設置參數在URL中。您需要首先使用代碼$p = $_GET['p'];$p附加到來自URL的值。你需要清理這個GET參數和/或創建一個白名單,以確保它是一個有效的參數。

1

您正在依靠PHP的一箇舊的非常糟糕的「特性」,名爲register_globals,它直接從GET加載變量。如果您想通過HTTP GET設置$p,則需要執行$p = $_GET['p']

1

可能是因爲'register_globals'在您的開發系統上處於ON狀態,而在您的實時系統上處於OFF狀態。在您的開發中將其設置爲OFF並使用$ _GET ['p']

+0

http://us2.php.net/manual/en/ini.core.php#ini.register-globals – Sonny 2010-11-17 14:43:26