0

我一直在这几个小时试图找到我所做的小错误,但我找不到它......我所做的只是在函数中调用一个变量作为全局变量,它甚至无法正常工作虽然它与上面的功能配合得很好......

我收到一条错误消息,说 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 时调用它可能工作正常,因为当我按下 enter 时我可以看到错误代码。

哦,抱歉代码格式错误,不知道如何在这里修复它。

感谢您提供的任何帮助或建议。

4

2 回答 2

0

如何/何时post_message()调用?从您编辑的内容中,我找不到任何可以清除$mysqli变量的具体内容 - 但要调试它,我们需要更多的程序流程。

或者您可以在代码中创建一个“hack”,并在post_message()您声明后再次global $mysqli;执行,因为到那时您的数据库连接的引用已经丢失。但是,理想情况下,您需要遵循代码的流程来找出正确修复它的位置 - 您的流程似乎无法完全发布,或者太大而无法在此处完全发布。include 'data/mysqli_connect.php';$mysqli

(评论太长了,所以这个回复是以答案的形式出现的,我很抱歉。)

于 2012-10-17T01:29:01.570 回答
0

不要将 $mysqli 设为全局变量,而是尝试将其作为附加参数传递给您的函数。我遇到了同样的问题,这就是我解决它的方法。IE...

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());

}

希望这对你有用。

于 2013-02-08T17:24:00.663 回答