2012-10-26 64 views
0

我正在構建一個聊天應用程序並遇到一些問題。首先我要的聊天開始從數據庫中,一旦用戶登錄加載從Ajax聊天中獲取上次插入的消息

功能,從DB獲得了整個聊天這是由AJAX

function getChatData(){ 
    global $mysqli; 
    //echo $lastinseted= $mysqli->insert_id(); 
    $sql = "SELECT `chat`.`message`, 
     `users`. `username`, 
     `chat`.`timestamp` 
     from `chat` JOIN `users` ON (`chat`.`user_id`=`users`.`user_id`) 
     ORDER BY `chat`.`timestamp` DESC limit 15"; 
    try{ 
     if($stmt=$mysqli->prepare($sql)){ 
      echo returnJson($stmt); 
      $stmt->close(); 
      $mysqli->close(); 
     }else{ 
      throw new Exception("An error occured while fetching record data"); 
     } 
    }catch(Exception $e){ 
     log_error($e, $sql, null); 
     echo 'fail'; 
    } 
} 

這裏所說的是回調函數:

function getChatCallback(data){ 
    var h=''; 
    for(var i=0, l=data.length;i<l;i++){ 
     h+=data[i].username+' says: '+data[i].message+'<span style="color:gray"> at the time '+data[i].timestamp+'</span><br/>'; 
    } 
    $('.messages').html(h); 
    setTimeout(getChat,1500); 
} 

這是將插入新的消息,一旦用戶點擊進入,它是由Ajax調用也被稱爲被稱爲數據庫中的函數:

function putChatData($message,$room,$user_id){ 
    global $mysqli; 
    $sql = "INSERT INTO `chat` 
    (`message`,`timestamp`,`room`,`user_id`) 
    VALUES (?,?,?,?)"; 
    $timestamp = gmdate("Y-m-d H:i:s"); 


    try{ 
     if($stmt=$mysqli->prepare($sql)){ 
      $stmt->bind_param('ssii',$message,$timestamp,$room,$user_id); 

      $stmt->execute(); 

      $stmt->close(); 
      $mysqli->close(); 

     }else{ 
      throw new Exception("An error occured while fetching record data"); 
     } 
    }catch(Exception $e){ 
     log_error($e, $sql, null); 
     echo 'fail'; 
    } 

} 

現在的問題是,我可以插入新的信息到數據庫,但第一個函數獲取聊天,帶給所有的聊天,包括在用戶登錄之前舊的。我嘗試使用時間戳或最後插入ID,但沒有與我一起工作。

+0

我認爲沒有犯罪,如果用戶得到一塊先前對話和了解的主題。它是如此糟糕? – heximal

+0

新的消息中插入後,你需要調用getChatData()函數更新的消息.. –

+0

heximal,我只是想在新的用戶開始觀看聊天,他英寸Parasath日誌的時間,即getChatData每兩秒調用,所以當插入的新消息應該馬上顯示出來,這就是現在正在發生的事情。謝謝 – Timmy

回答

0

對於這個用例,你需要知道的REG時間和WHERE條件添加到您的查詢

$sql = "SELECT `chat`.`message`, 
    `users`. `username`, 
    `chat`.`timestamp` 
    from `chat` JOIN `users` ON (`chat`.`user_id`=`users`.`user_id`) 
    WHERE `chat`.`timestamp` > $userRegDate 
    ORDER BY `chat`.`timestamp` DESC limit 15"; 
+0

在數據庫中正常工作,但沒有使用PHP。 – Timmy

+0

'$ userRegDate'的格式必須與'chat.timestamp'中的一樣。輸出變量以檢查代碼中是否爲真。 –

相關問題