2012-10-17 42 views
0

我一直在這幾個小時試圖找到我所做的小錯誤,我只是找不到它......我所做的就是將一個變量作爲全局調用功能和它的,雖然它工作得很好與它上面的功能只是甚至沒有工作......mysqli和全局變量

我得到一個錯誤說mysqli的是空...

include 'data/mysqli_connect.php'; 

function process_login(){ 

global $mysqli; 

$username = $_SESSION['username']; 


$sql = "SELECT * FROM auth WHERE user='".mysqli_real_escape_string($mysqli,$username)."'"; 
$query = mysqli_query($mysqli,$sql); 


if(mysqli_num_rows($query)>0){ 

$sql = "DELETE FROM auth WHERE user='".mysqli_real_escape_string($mysqli,$username)."'"; 
$query = mysqli_query($mysqli,$sql); 


if(!$query){ 

die(mysqli_error()); 

} 

} 


$sql = "INSERT INTO auth (user, session) VALUES ('".mysqli_real_escape_string($mysqli,$username)."', '".$_SESSION['id']."')"; 
$query = mysqli_query($mysqli,$sql); 

if(!$query){ 

echo "Can not insert info into database!<br />". mysqli_error(); 

}else{ 

header("Location:chat.php"); 

} 

} 


function logout(){ 

global $mysqli; 

$sql = "DELETE FROM auth WHERE session='".mysqli_real_escape_string($mysqli,$_SESSION['id']). "'"; 
$query = mysqli_query($mysqli,$sql); 


if(!$query){ 

echo "Can not delete info from database!"; 

}else{ 

session_destroy(); 
header("Location: chat.php"); 

} 

} 


function get_username(){ 

global $mysqli; 


$sql = "SELECT * FROM auth WHERE session='".mysqli_real_escape_string($mysqli,$_SESSION['id']). "'"; 
$query = mysqli_query($mysqli,$sql); 
$row = mysqli_fetch_array($query); 


if(mysqli_num_rows($query) == "0"){ 

$username = "Guest"; 

}else{ 

$username = $row['user']; 

} 

return $username; 

} 



function post_message(){ 

global $mysqli; 

$text = addslashes(htmlentities(htmlspecialchars($_REQUEST['text']))); 


$sql = "INSERT INTO chat (time, user, text) VALUES ('".date("H:i")."', '".get_username()."', '".$text."')"; 

$query = mysqli_query($mysqli,$sql); 


if(!$query){ 

die(mysqli_error()); 

} 

} 

    mysqli_connect.php 
    $mysqli = mysqli_connect(localhost, "info", "info", "info"); 

就像我說的,它的工作對上面的函數這一個,但不是這個,它不會使敏感......我猜我在那裏有一個愚蠢的錯誤,只是不知道在哪裏。

順便說一句,我測試和工作職能是process_login()logout()get_username()

get_username()先運行,然後process_login()post_message()從一個jquery代碼運行,當我按下輸入時,它會調用它,可能工作正常,因爲我可以看到錯誤代碼,當我按Enter鍵。

哦,對不起,代碼格式不正確,不知道如何解決它在這裏。

感謝您的任何幫助或建議,你可能會發現。

+1

那麼......它在做什麼呢? – Jon

+3

開始學習準備好的語句。你所說的*「讓我們清理用戶輸入的文本」*在評論中是完全錯誤的。 – hakre

+0

哦,忘了說我得到的錯誤,$ mysqli爲空,所以空,我測試了它,真的是空的... –

回答

0

如何/何時調用post_message()?從您編輯的內容中,我找不到任何可以清除$mysqli變量的具體內容 - 但要調試它,我們需要更多的程序流程。

或者你也可以在代碼中創建一個「黑客」,並在post_message()聲明global $mysqli;後,再做include 'data/mysqli_connect.php';$mysqli參考您的數據庫連接已被再丟。但是,理想情況下,您需要遵循代碼流程以找出正確的解決方法 - 而且您的流程似乎無法完全發佈,或者太大而無法在此完全發佈。

(太長了評論,所以這種反應來回答的形式,我向你道歉。)

+0

感謝您的建議,經過多次審查流程後,我意識到我在jquery中發送文件時弄錯了目錄,對於麻煩抱歉... –

0

而不是使$ mysqli的一個全局變量,儘量將它作爲一個額外的參數,以你的函數。我遇到了同樣的問題,這就是我解決問題的方法。即...

function post_message($mysqli){ 


$text = addslashes(htmlentities(htmlspecialchars($_REQUEST['text']))); 


$sql = "INSERT INTO chat (time, user, text) VALUES ('".date("H:i")."', 
'".get_username()."', '".$text."')"; 

$query = mysqli_query($mysqli,$sql); 


if(!$query){ 

die(mysqli_error()); 

} 

希望這適用於你。