这是AJAX请求正文
Ajax
var date = new Date().toLocaleTimeString();
var text=this.value;
var id=1;
$.ajax({
type: "GET",
url: "StoreMessages.php" ,
data: { room: id, msg:text,sendat:date }
});
PHP代码
if(isset($_GET['room']))
{
$chatroom_name = $_GET['room'];
if(isset($_GET['msg']))
{
$text= $_GET['msg'] ;
if(isset($_GET['sendat']))
{
$local_time= $_GET['sendat']);
insertMessage( $text,$local_time, $chatroom_name);
}
}
}
function insertMessage($message_body,$local_time,$room_id)
{
echo "<script type='text/javascript'>alert('$message_body');</script>";
echo "<script type='text/javascript'>alert('$local_time');</script>";
echo "<script type='text/javascript'>alert('$room_id');</script>";
$conn = new mysqli($GLOBALS['server'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db_name']);
if($conn==false)
{
die("unable to connect database");
}
$sql="INSERT INTO `message` (`Message_Text`, `Time`, `Conversation_Id`) VALUES ('$message_body', '$local_time', '$room_id')";
if(mysqli_query($conn,$sql)){
echo "record inserted successfully"."<br/>";
}
else{
echo "error".mysqli_error($db_conn);
}
说明
ajax调用在用户键入消息并按Enter键时触发ajax数据字段变量包含我检查过的值,然后设置警报当我通过在php代码中设置警报来检查数据字段变量值时,只有文本变量包含值,而Alertbox没有我尝试将其他实时变量存储在数据库中
答案 0 :(得分:1)
调试此问题的第一步是/正在诊断发生故障的位置。为此:
network
标签network
标签中的请求response
标签* *如果请求的状态码是500,则也表明脚本在PHP端失败。转到服务器并查看错误日志。
从我们在response
选项卡中得到的响应中,我们确定该问题是此行上的尾随右括号:
$local_time= $_GET['sendat']);
此外,您应该使用参数化查询。任何字段中的单引号都会中断您的查询。
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
大致:
$sql="INSERT INTO `message` (`Message_Text`, `Time`, `Conversation_Id`) VALUES (?, ?, ?)";
然后prepare
,输入bind
,并查询execute
。
我还要发送回JSON对象而不是JS代码。看看http://php.net/manual/en/function.json-encode.php。