2011-09-22 63 views
0

我正在做一個簡單的程序來與數據庫進行交互。我在名爲「connect_database.php」的文件中從用戶處取得了一個用戶名變量,並將其命名爲$ un。然後,我嘗試在另一個文件中訪問該變量,在那裏我必須將用戶名用查詢提交給數據庫。查詢中的每個變量都已經通過,除了用戶名,所以我認爲這是由於我使用了include()。任何幫助?php include()不工作

include ("connect_database.php"); 

mysql_query("INSERT INTO `my_proj`. `inci` (
    `type`, `date`, `time`, `reporter`, `ID`, `desc`) 
    VALUES ('$typeinc', CURDATE(), CURTIME(), '$un' ,NULL, '$text');" 
) or die(mysql_error()); 
+1

其中是connect_database.php?這個腳本在哪裏? –

回答

0

您可能需要重新閱讀有關include及其兄弟的文檔。他們不像你所期望的那樣行事;而不是解析相對於當前文件(您正在查看的文件)的包含路徑,它們使用當前的工作目錄和包含路徑,這可以是任何東西,具體取決於操作系統,Web服務器,PHP配置文件,並且在包含之前執行的任何事情都會發生。與其他人所建議的一樣,使用require而不是include不會解決您的問題,但它會告訴您包含是否確實失敗。

您可以通過兩種方式解決您的包含問題:控制當前工作目錄和包含路徑並應用代碼規則以確保它們不會更改;或使用絕對值包括 - __FILE__常數與dirname結合可以用來模擬應該是默認值的行爲。

另一方面,將字符串連接到查詢中的方式是等待發生的SQL注入攻擊。你最好現在離開mysql_XXXX()API,並使用支持參數化查詢的東西(PDO很好,mysqli也可以)。

1
require_once("connect_database.php"); 

應該解決您的問題。

1

require_once()替換include(),看看apache的錯誤日誌,它會告訴你這個問題。

2

我會將include()更改爲require(),因爲如果沒有它,程序將無法正常工作。它們是相同的,但require將殺死執行,如果文件不能被包括在內。

然後,一旦你確定該文件實際上是包括在內,仔細檢查該值被設置正確:

require("connect_database.php"); 
var_dump($un); 

如果還是不行,回去connect_database.php文件並檢查你的拼寫。

1

$un在哪裏申報?全球或功能?您正在使用的查詢不顯示在函數中嗎?如果是這樣,變量不能從那裏訪問。見variable scope

也許你需要某處或將$ un分配給$GLOBALS['un']並引用它。