使用Mysqli、PHP和AJAX的聊天系统正在将空白消息插入数据库

Chat system using Mysqli, PHP and AJAX is inserting blank message into Database

本文关键字:空白 消息 数据库 插入 系统 聊天 Mysqli PHP AJAX 使用      更新时间:2023-09-26

我的聊天系统项目遇到了困难,我花了一整天的时间试图找到解决方案。我来了。

在文件insert.php中,我试图使用$_REQUEST从chat.hp.中获取文本区域的值

当我键入内容并单击"发送"时,会向数据库发送一条空白消息。

玩过之后,有时网页会在div元素中显示"1",我试图在.中显示消息

任何帮助都将不胜感激,谢谢。

chat.php

<!DOCTYPE html>
<html>
<head>
    <title>{ Chat App }</title>
    <link rel = "stylesheet" href = "styles/style.css" media = "all" />
    <script src="insert.js"></script>
    <link href='https://fonts.googleapis.com/css?family=Rokkitt' rel='stylesheet' type='text/css'>
</head>
<body>
    <form name = "form1">
        <textarea name = "message"></textarea>
        <br>
        <a href = "#" onclick = "submit()">Send</a>
        <br>
        <div id = "msg"></div>
    </form>
</body>
</html>

insert.js

function submit(){
    if(form1.message.value == ''){
        document.writeln('Enter some text fool.');
    }
    var msg = form1.message.value;
    var xmlhttp = new XMLHttpRequest(); // main object
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { // data is ready
            document.getElementById('msg').innerHTML = xmlhttp.responseText; // txtHint div now displays the data received by the request
        }
    };
    xmlhttp.open('GET', 'insert.php', true);
    xmlhttp.send();
}

insert.php

<?php
    include("connection/connection.php");
    global $con;
    $msg = isset($_REQUEST['msg']);
    $insert = "INSERT INTO msg (message) VALUES ('$msg')";
    $run_insert = mysqli_query($con, $insert);
    $get_msg = "SELECT * FROM msg ORDER by id DESC";
    $run_msg = mysqli_query($con, $get_msg);
    while($row = mysqli_fetch_array($run_msg)){
        echo $row['message'];
    }
?>

第一个问题是,当您检查null值时,如果它是否为null,函数将继续并提交表单。

insert.js

function submit(){
    if(form1.message.value == ''){
        document.writeln('Enter some text fool.');
        // stop the submit action
        return;
    }
    var msg = form1.message.value;
    var xmlhttp = new XMLHttpRequest(); // main object
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { // data is ready
            document.getElementById('msg').innerHTML = xmlhttp.responseText; // txtHint div now displays the data received by the request
        }
    };
    xmlhttp.open('GET', 'insert.php', true);
    xmlhttp.send();
}

下一个问题是在表单处理程序中,您正在保存一个布尔值isset($_REQUEST['msg'])。试试这个

insert.php

...
$msg = (isset($_REQUEST['msg']) && !empty($_REQUEST['msg']) ? $_REQUEST['msg'] : false;
if($msg){
  // save data to database 
  ...
}

...
if((isset($_REQUEST['msg']) && !empty($_REQUEST['msg'])){
  // message was submitted and it is not an empty string
  $msg = $_REQUEST['msg']; 
  // save data to database 
  ...
}else{
  // do nothing
}

xmlhttp.open('GET', 'insert.php', true);尝试更改为xmlhttp.open('GET', 'insert.php?msg='+msg, true);

希望它能有所帮助!

当您检查消息是否为空时,最好在错误时添加"return"

if(form1.message.value == ''){
    document.writeln('Enter some text fool.');
}

所以它可能是

if(form1.message.value == ''){
    document.writeln('Enter some text fool.');
    return;
}

在submit()函数中因此,函数的其余部分将不会执行,也不会发送空消息。并分配给变量消息而不是验证))

if(isset($_REQUEST['msg']) && !empty($_REQUEST['msg'])){
    $msg = $_REQUEST['msg']; //addiotionally this need escape
    $insert = "INSERT INTO msg (message) VALUES ('$msg')";
    $run_insert = mysqli_query($con, $insert);
}