Я пытаюсь опубликовать данные формы с помощью вызова POST AJAX в JavaScript для создаваемой мной системы чата, почему следующее не работает? Я пытался получить документацию, но не могу ее найти.

<div id="view-chat-form">
    <input id="message" type="text" name="chat_message" placeholder="write a message..."/>, 
    <input type="button" value="send" onclick="sendData()"/>
</div>

И используя следующий код AJAX для отправки запроса без загрузки страницы с хешированной строкой, чтобы скрыть идентификатор чата

<script type="text/javascript">
   function sendData(){
            var cm = document.getElementById("message").value;
            var xhttp = new XMLHttpRequest();
            xhttp.open("POST", "chat_form.php", true);
            xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhttp.send("q=<?php echo $hashed_id; ?>&chat_message=" + cm);
        }
</script>

И следующий php-код для вставки сообщения в таблицу сообщений

<?php
    include "session.php";
    include "connection.php";
    $id = "";
    $hashed_id = mysqli_real_escape_string($connection, $_POST["q"]);
    $sql = "SELECT * FROM chats WHERE SHA2(id, 512) = ?";
    $stmt = mysqli_prepare($connection, $sql);
    mysqli_stmt_bind_param($stmt, 's', $hashed_id);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $count = mysqli_num_rows($result);
    
    if($count > 0){
        $row = mysqli_fetch_assoc($result);
        $id = $row["id"];
    } else {
        mysqli_free_result($result);
        mysqli_close($connection);
        header("Location: chat_error.php");
    }
    
    $msg = mysqli_real_escape_string($connection, $_POST["chat_message"]);
    $username = $_SESSION["username"];
    $date = date("d/m/Y");
    $time = date("H:i:s");
    $sql = "INSERT INTO chat_messages(chat_id, username, message, date, time) VALUES(?, ?, ?, ?, ?)";
    $stmt = mysqli_prepare($connection, $sql);
    mysqli_stmt_bind_param($stmt, 'dssss', $id, $username, $msg, $date, $time);
    mysqli_stmt_execute($stmt);
?>
1
user16936896 10 Окт 2021 в 17:09

2 ответа

Лучший ответ

Не понимаю, почему вы используете php $_POST в javascript, это не сработает. Попробуйте использовать document.getElementById(), чтобы захватить сообщение чата.

Правильный путь показан ниже.

<script type="text/javascript">
   function sendData(){
        var cm = document.getElementById("message").value;
        var xhttp = new XMLHttpRequest();
        xhttp.open("POST", "chat_form.php", true);
        xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhttp.send("q=<?php echo $hashed_id; ?>&chat_message=" + cm);
   }
</script>

Также в вашем PHP-коде, зачем использовать json_decode ()? Сообщение не в формате JSON. Исправьте и это.

Измените код ниже

$data = json_decode(file_get_contents("php://input"));
$hashed_id = $data->q;
$msg = $data->chat_message;

К

$hashed_id = $_POST["q"];
$msg = $_POST["chat_message"];
1
Subhashis Pandey 10 Окт 2021 в 14:19

Сделай что-нибудь вроде этого

<script type="text/javascript">
function sendData(){
    var id = <?php echo $hashed_id; ?>;
    var msg = <?php echo $_POST['chat_message']; ?>;
    var xhttp = new XMLHttpRequest();
    xhttp.open("POST", "chat_form.php", true);
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhttp.send(id,msg);
}
</script>
1
Dhruv 10 Окт 2021 в 14:16