2011-05-28 35 views
0

我只是潛入PHP並一直在做一些閱讀和玩耍 - 我的代碼如下,我試圖加載頁面(正如你所看到的) - 我得到解析錯誤。開始PHP(加載DIV)

<?php include(''$id'') ?> 

我告訴我的指數中的語法錯誤,unexpecter T_VARIABLE在第7行

7號線的index.php應該是變量,而不是( '的$ id')

當我在當前編碼中使用('$ id')或('$ nav_menu')時,它使我無法打開流:沒有這樣的文件或目錄

我可能錯過了明顯的東西,但有人能指引我走向正確的方向嗎?

感謝

<?php 
if (is_numeric($_GET['id'])) //prevent hacking 
{ 
switch ($_GET['id']) //get the id of menu needed for this page 
{ 
case 0: 
    $nav_menu = "content.php"; //if the variable is 0 or not set 
    break; 
case 1: 
    $nav_menu = "bio.php"; //if the variable is 1, get category 1 links 
    break; 
case 2: 
    $nav_menu = "contact.php"; //if the variable is 2, get category 2 links 
    break; 
default: 
    $nav_menu = "content.php"; //redundant for defaulting if the id is greater than 2 
} 
} 
?> 
+0

btw爲什麼你曾經想在$ id變量周圍使用2對單引號? – luca 2011-05-28 21:59:52

+0

@luca當你想包含文件'$ id.php'? :D它可能適用於Mac! – Halcyon 2011-05-28 22:17:43

+1

@frits van Campen是啊!你是對的(我試過了= D) – luca 2011-05-28 22:34:21

回答

4
<?php include($id); ?> 

暫無報價。

此外,請務必檢查$ id的值,你不會希望有人包括「../../path/to/my/passwords.txt」或者同樣令人不安;)

您對$nav_menu的switch-case聲明是粗略但有效的,並且肯定是必需的。

而且,我敢肯定switch安全所以沒有必要對$_GET['id']

編輯檢查is_numeric:賈裏德提到相對VS絕對路徑。我不知道他在說什麼,但是這是我想想: 永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠永遠使用:

include (dirname(__FILE__) . "/thefile.ext"); 

這將永遠讓你的路徑毫無疑問絕對

1

你在這裏做了四件事。

首先,你需要在每個語句結尾處使用分號。

<?php include(''$id''); ?> // Note semicolon 

您應該只有一個報價上聯字符串聲明的兩端,與其他的轉義,即:現在

<?php include('\'$id\''); ?> // Valid string 

,如果要展開的變量,你需要或者使用雙引號字符串或使用.連接器。在這種情況下,你不需要它周圍的報價:

<?php include("$id"); ?> 
<?php include($id); ?> 

最後,你應該給予相對/絕對文件路徑,包括。

<?php 

$path = "../includes/$id"; 

include($path); 

?> 
+0

嗯,反對票,沒有解釋。有趣... – 2011-05-28 22:09:19

2

沒有必要使用圍繞可變引號,但是:

<?php 

$path = "myinclude.php"; 
$path = "../includes/myinclude.php"; 
$path = "/web/my_site_com/includes/myinclude.php"; 

include($path); 

?> 

如果您使用的開關,啓動特定的文件,你可以用雙引號字符串做到這一點如果這樣做,請確保使用"而不是''。您可以嘗試:

<?php 
include($id); 
include($nav_menu); 
?> 

17行代碼可以縮短爲兩個。你可以用它來代替:

<?php 
$list = array("content.php", "bio.php", "contact.php"); 
$navmenu = (isset($_GET['id']) && isset($list[$_GET['id']]) ? $list[$_GET['id']] : 'content.php'; 
?>