PHP聊天提交刷新按钮


PHP chat submit refresh button

我刚开始使用SQL,我正在聊天。

几个问题:-

1)如果您来自index.php(您只能输入用户名的站点)您将进入home.php。上面写着:你还没发信息。每次刷新它都会上传最后一条消息。我知道有一个修复,我只是找不到它。

2)如果我按下提交按钮,它刷新页面,并一直向上。所以你必须一直向下滚动才能进入并看到你的消息。+我可以修复这个没有刷新,但你没有看到任何消息开始发送。

<?php
if (isset($_POST["afzender"])){
    $_SESSION['afzender'] = $_POST['afzender'];
}
$servername = "localhost";
$username = "*******";
$password = "******";
$dbname = "*****";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$sql = "INSERT INTO 'chatbox_berichten'
(''id', 'afzender', 'chatbox_id', 'bericht', 'tijd')
VALUES (NULL, '".$_SESSION['afzender']."', '', '".$_POST['bericht']."', CURRENT_TIMESTAMP);";
echo $sql;
if ($conn->query($sql) === TRUE) {
    echo "Succesvol Toegevoegd.";
} else {
    echo $conn->connect_error;
}
echo "<hr/>";
$sql = "SELECT * FROM chatbox_berichten";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    echo "<table border='2'>";
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>" . $row["id"]. "<td>" . $row["afzender"]. "<td>" . $row["bericht"]. "  <td>" . $row["tijd"]. "</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}

$conn->close();
?>
<?php echo $_SESSION['afzender']; ?>        
<form action="home.php" method="post">
Bericht: <input type="text" name="bericht"><br>
<input type="submit">
</form>

我知道代码看起来很乱。我没有任何经验使它看起来更好。

我会帮助你,但是我没有时间为你写所有的代码。

每次刷新它都会上传最后一条消息

如果刷新页面,浏览器将重复上次请求。如果您之前发送了一条消息,它将是一个POST请求。因此,由于浏览器重复HTTP请求,消息将被再次发送。

最常见的解决方法是在处理POST请求时将HTTP重定向到相同的URL,因此浏览器发出的最后一个请求是GET请求(见下面的注释)。

如果我按下提交按钮,它会刷新页面并进入所有的的方式。所以你必须一直向下滚动才能进入并看到你的消息。+我可以修复这个没有刷新,但比你没有看到所有消息都开始发送。

对于聊天应用程序,这并不是最好的方法。您可以颠倒聊天消息的顺序(最新的在顶部),这样您就不需要向下滚动以查看最新消息。

理想的方法是异步客户机/服务器通信。请继续阅读一些关于AJAX(或websockets,如果您想在现代技术方面迈出一大步)的文章。一个简单的脚本可以定期(或通过使用websockets的通知)检查新消息,将它们附加到旧消息列表中并相应地滚动。如果你把消息发送作为后台任务,你的第一个问题就会消失,因为你不需要执行"前台请求"来发送/接收消息。

还有一件事:你真的应该读一些关于网络攻击的文章。您的代码容易受到XSS和SQL注入攻击。目前,您的PHP代码允许攻击者接管您的数据库并将任意代码注入页面。您应该使用HTML和SQL转义。