2011-08-05 46 views
0

我有一個簡單的if語句可以在我的本地機器上運行,但是當我上傳它時,tom ypaid站點在我的主頁上出現錯誤。PHP如果/ Elseif聲明不能正常工作

錯誤:

Warning: include(./pages/.php) [function.include]: failed to open stream: No such file or directory in /home/a5410474/public_html/index.php on line 33 
Warning: include() [function.include]: Failed opening './pages/.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/a5410474/public_html/index.php on line 33 

驗證碼:

<?php 
    if (isset($_GET['p']) && $_GET['p'] != NULL || $_GET['p'] != '') { 
     $p = mysql_real_escape_string($_GET['p']); 
    }elseif ($_GET['p'] == '' || $_GET['p'] == NULL){ 
     $p = 'home'; 
    } 
include("./pages/".$p.".php"); 
?> 
+0

你需要過濾'$ p'變量以確保它不包含像'../../../../usr/share/PHP/something'。你可能只想要字母。更好的方法是保存'。/ pages'中實際存在的有效文件數組並檢查輸入值。 –

回答

3

一個更詳細的方法:

$p = empty($_GET['p']) ? 'home' : $_GET['p']; 
include("./pages/{$p}.php"); 

其他一些注意事項:

  1. 你不應該在要傳遞給的變量上使用。該函數用於準備插入到SQL查詢中的數據。

  2. 您不應該include基於通過查詢字符串或任何類型的用戶輸入傳遞的變量的文件。有人可以使用它來讀取服務器上的系統文件,然後控制整個計算機。

+0

,謝謝你的回答! – rackemup420

4

代替或者,你需要在這裏,也請用括號下半年。

if (isset($_GET['p']) && $_GET['p'] != NULL || $_GET['p'] != '') { 

// should be 
if (isset($_GET['p']) && ($_GET['p'] != NULL && $_GET['p'] != '')) { 

你沒有else情況下,它很可能正在傳遞的價值成`$ _GET [「P」]符合上述兩種情況。

這將是更好的把它寫這樣的,用寫這個的empty()

if (isset($_GET['p']) && !empty($_GET['p']) { 
    $p = mysql_real_escape_string($_GET['p']); 
} 
else $p = 'home'; 
+0

ty:D整天都在寫,需要一雙新的眼睛lol – rackemup420

+0

你不需要同時使用'isset'和'empty',因爲'empty'調用'isset'本身。 –

+0

@丹恩謝謝,我總是忘記這一點。舊習慣。當然, –

-1

你也可以試試這個:

<?php 
    $p = 'home'; 
    if (!empty($_GET['p'])) 
     $p = $_GET['p'];  
    include("./pages/".$p.".php") 
?> 
1

你應該更加意識到目錄遍歷的,過濾用戶輸入,並確保該文件是即使在那裏。 (re:你的錯誤):

<?php 
if (isset($_GET['p'])) { 
    $p = preg_replace('/[^a-zA-Z0-9_]/s', '', $_GET['p']); 
} else { 
    $p = 'home'; 
} 
$path = "./pages/" . $p . ".php"; 

if (file_exists($path) === true) { 
    include $path; 
} else { 
    include './pages/notfound.php'; 
} 
+0

我試過了,它以某種方式拋棄了我的佈局......沒有工作。 – rackemup420

+0

在你的頁面例如:home.php你是否包括原始的HTML或PHP的回聲任何HTML或你是否將輸出封裝在一個變量? –