我正在制作简单的php ajax聊天,不知怎的,我的call_wrapper
正在取消。
第一个php脚本$_SESSION['currentNum']
正在检查mysql数据库(raspberry pi-raspbian os)中的更改。
checkMessages.php
下一个php脚本header('Content-type: application/json; charset=utf-8');
session_start();
class Message{
public $name;
public $surname;
public $email;
public $mesgVal;
public $msgTime;
}
$dbhost = 'localhost:3036';
$dbuser = '******';
$dbpass = '*********';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Could not connect: ' . mysql_error());
}
if(!mysql_select_db('forum')){
die("Database does not exist " . mysql_error());
}
mysql_query("SET CHARACTER SET utf8");
$mesgList = array();
//first time when user is logged
if(!isset($_SESSION['currentNum'])){
$sql = "SELECT * FROM (
SELECT u.name, u.surname, u.email,m.id_message, m.value, m.ts
FROM users u, message m
WHERE m.user_id = u.id_user
ORDER BY m.id_message DESC LIMIT 10
) q
ORDER BY q.ts ASC;";
$query = mysql_query($sql, $conn);
while($row = mysql_fetch_assoc($query, MYSQL_ASSOC)){
$item = new Message();
$item->name = $row['name'];
$item->surname = $row['surname'];
$item->email = $row['email'];
$item->mesgVal = $row['value'];
$item->msgTime = $row['ts'];
$mesgList[] = $item;
$_SESSION['currentNum'] = $row['id_message'];
}
$currentNum = $_SESSION['currentNum'];
//rest of time
}else{
$currentNum = $_SESSION['currentNum'];
$sql = "SELECT u.name, u.surname, u.email, m.value, m.ts
FROM users u, message m
WHERE m.user_id = u.id_user
AND m.id_message > '$currentNum'
ORDER BY m.id_message ASC";
$query = mysql_query($sql, $conn);
if(mysql_num_rows($query) > 0){
//mysql_data_seek($query, 1);
while($row = mysql_fetch_assoc($query, MYSQL_ASSOC)){
$item = new Message();
$item->name = $row['name'];
$item->surname = $row['surname'];
$item->email = $row['email'];
$item->value = $row['value'];
$item->msgTime = $row['ts'];
$mesgList[] = $item;
$_SESSION['currentNum'] = $row['id_message'];
}
}
}
echo json_encode($mesgList);
mysql_close($conn);
正在将用户发布的消息保存到数据库。
saveMessage.php
接下来是JQuery的ajax调用脚本的javaScript代码。
header('Content-type: text/html; charset=utf-8');
session_start();
ini_set('display_errors', 1);
error_reporting(E_ALL);
$dbhost = 'localhost:3036';
$dbuser = '*********';
$dbpass = '************';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Could not connect: ' . mysql_error());
}
if(!mysql_select_db('forum')){
die("Database does not exist " . mysql_error());
}
mysql_query("SET CHARACTER SET utf8");
$message = test($_POST['message']);
if($message !== ""){
$logged = $_SESSION['login_user'];
$idOfMessageWriter;
$sql = "SELECT id_user FROM users WHERE email = '$logged'";
$query = mysql_query($sql, $conn);
if (!$query) {
die("Could not successfully run query ($sql) from DB: " . mysql_error());
}
while( $row = mysql_fetch_assoc($query, MYSQL_ASSOC)){
$idOfMessageWriter = $row['id_user'];
}
$sql = "INSERT INTO message (value, user_id) VALUES ('$message','$idOfMessageWriter')";
if(!mysql_query($sql, $conn)){
die("Sprava neuložená" . mysql_error());
}
}
function test($data){
$data = trim($data);
$data = stripcslashes($data);
$data = htmlspecialchars($data);
return $data;
}
mysql_close($conn);
从html doc调用函数 $( document ).ready(function(){
setInterval(check, 2000);
});
function check(){
$.ajax({
type:'GET',
url:'checkMessages.php',
dataType:'json',
success: function(result){
$("#messageBox").append(result);
for(var i in result){
$("#messageBox").append(result[i].email + ": " + result[i].mesgVal + "<br>");
}
},
error: function(/*jqXHR, exception"*/ts){
// $('#sendInfo').html("Error check " + ts.responseText);
}
});
}
function sendData(){
var textData = $('#chatText').val();
console.log(textData);
$.ajax({
type:'POST',
url:'saveMessage.php',
data: {
message:textData
},
dataType: 'text',
success: function(data){
$('#sendInfo').html(data);
},
error: function(/*jqXHR, exception"*/ts){
$('#sendInfo').html("Error send" + ts.responseText);
}
});
}
。
sendData()
我的问题是。当ajax和<input type="button" name="sendChatText" id="sendChatText" value="Odoslať" onClick="sendData()">
正在检查数据库中的更改时,它会设置checkMessages.php
。但是当我发布消息($_SESSION['currentNum']
被调用)saveMessage.php
取消设置时,我不知道为什么。有什么想法吗?
更新..问题不在会话中。在$_SESSION['currentNum']
中,第二个SELECT不正确。正确是
SELECT u.name,u.surname,u.email,m.id_message,m.value,m.ts 来自用户u,消息m WHERE m.user_id = u.id_user AND m.id_message&gt; '$ currentNum' ORDER BY m.id_message ASC;