0

私はこれを何時間も続けて、自分が行った小さな間違いを見つけようとしましたが、それを見つけることができません...私がしているのは、関数内で変数をグローバルとして呼び出すことだけで、それも機能していませんそれはその上の関数でうまく機能しましたが...

mysqliがnullであるというエラーが表示されます...

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()Enterキーを押すとエラーコードが表示されるため、Enterキーを押すとそれを呼び出すjqueryコードから実行されます。これはおそらく正常に機能します。

ああ、悪いコードフォーマットについて申し訳ありませんが、ここでそれを修正する方法がわかりません。

あなたが見つけるかもしれないどんな助けやアドバイスにも感謝します。

4

2 に答える 2

0

どのように/いつpost_message()呼び出されますか?$mysqliあなたが編集したものから、変数をクリアするものを具体的に見つけることはできませんが、それをデバッグするには、より多くのプログラムフローが必要になります。

または、コードに「ハック」を作成し、post_message()宣言した後global $mysqli;、DB接続への参照が失われているinclude 'data/mysqli_connect.php';ため、再度実行することもできます。$mysqliただし、理想的には、コードのフローに従って、コードを正しく修正する場所を見つける必要があります。フローを完全に投稿できないか、ここに完全に投稿するには大きすぎるようです。

(コメントには長すぎるので、この回答は回答形式で提供されます。お詫び申し上げます。)

于 2012-10-17T01:29:01.570 に答える
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());

}

これがあなたのために働くことを願っています。

于 2013-02-08T17:24:00.663 に答える