2012-10-17 104 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()); 

} 

希望这适用于你。