Maison >développement back-end >tutoriel php >Implémenter la fonction de salle de discussion en utilisant PHP
Aujourd'hui, avec la popularisation d'Internet, la communication en temps réel est devenue un élément indispensable de la vie quotidienne des gens, et les forums de discussion, en tant que méthode de communication collective, sont de plus en plus acceptés et utilisés par tous. Cet article explique comment utiliser PHP pour implémenter une fonction simple de salle de discussion.
Avant de commencer à écrire un programme, nous devons d'abord clarifier nos besoins. Une salle de discussion simple doit avoir les fonctions de base suivantes :
Avant d'implémenter la fonction de salon de discussion, nous devons d'abord concevoir la structure de table de base de données appropriée. Les tables de base de données requises pour une salle de discussion simple peuvent inclure les éléments suivants :
$mysqli = new mysqli("localhost", "root", "password", "chatroom"); if ($mysqli->connect_error) { die("连接失败: " . $mysqli->connect_error); }Ici "localhost" est l'adresse hôte de la base de données, "root" est le nom d'utilisateur de la base de données, "password" est le mot de passe de la base de données, et " chatroom" est le nom de la base de données. Vous devez le modifier en fonction de votre propre situation. 3.2 Enregistrement, connexion et déconnexion des utilisateursL'enregistrement, la connexion et la déconnexion des utilisateurs sont la base de la fonction de salle de discussion. Présentons-les respectivement ci-dessous. 3.2.1 Inscription des utilisateursLes utilisateurs doivent renseigner leur nom d'utilisateur et leur mot de passe lors de leur inscription. Nous devons imposer certaines restrictions sur les noms d'utilisateur et les mots de passe, telles que les noms d'utilisateur ne peuvent pas être répétés, les mots de passe doivent être cryptés, etc. Le code est le suivant :
// 判断用户名是否已存在 $query = "SELECT * FROM users WHERE username='$username'"; $result = $mysqli->query($query); if ($result->num_rows > 0) { echo '该用户名已被注册,请重新选择用户名!'; return; } // 使用 sha1 对密码进行加密 $password_hash = sha1($password); // 将加密后的密码和用户信息插入到用户表中 $add_time = date("Y-m-d H:i:s"); $query = "INSERT INTO users (username, password, add_time) VALUES ('$username', '$password_hash', '$add_time')"; if ($mysqli->query($query) === TRUE) { echo '注册成功!'; } else { echo '注册失败!'; }3.2.2 Connexion utilisateurLes utilisateurs doivent saisir le nom d'utilisateur et le mot de passe corrects lors de la connexion pour se connecter avec succès. Une fois la connexion réussie, les informations utilisateur doivent être enregistrées dans le tableau des utilisateurs en ligne pour une utilisation ultérieure. Le code est le suivant :
$query = "SELECT * FROM users WHERE username='$username' AND password='".sha1($password)."'"; $result = $mysqli->query($query); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $user_id = $row['id']; $online_time = date("Y-m-d H:i:s"); $query = "INSERT INTO online_users (user_id, online_time) VALUES ('$user_id', '$online_time')"; if ($mysqli->query($query) === TRUE) { echo '登录成功!'; } else { echo '登录失败!'; } } else { echo '用户名或密码错误,请重新输入!'; }3.2.3 Sortie utilisateurLorsque l'utilisateur quitte, l'enregistrement utilisateur correspondant dans la table des utilisateurs en ligne doit être supprimé. Le code est le suivant :
$online_time = date("Y-m-d H:i:s"); $query = "DELETE FROM online_users WHERE user_id='$user_id'"; if ($mysqli->query($query) === TRUE) { echo '退出成功!'; } else { echo '退出失败!'; }3.3 Afficher les enregistrements de discussion historiquesDans la salle de discussion, les utilisateurs peuvent consulter les enregistrements de discussion historiques. Nous pouvons lire plusieurs enregistrements récents du tableau des enregistrements de discussion et les afficher sur la page. Le code est le suivant :
$query = "SELECT * FROM chat_records ORDER BY id DESC LIMIT 50"; $result = $mysqli->query($query); echo '<div class="chat-history">'; while ($row = $result->fetch_assoc()) { echo '<div class="chat-message">'; echo '<span class="message-name">'.$row['username'].'</span>'; echo '<span class="message-time">'.$row['add_time'].'</span><br>'; echo '<span class="message-text">'.$row['message'].'</span>'; echo '</div>'; } echo '</div>';Dans le code ci-dessus, nous utilisons des styles CSS pour embellir l'effet d'affichage des enregistrements de discussion, nous n'entrerons donc pas dans les détails ici. 3.4 Implémentation de la messagerie instantanée La mise en œuvre de la messagerie instantanée nécessite l'utilisation de la technologie Ajax, ce qui signifie une interaction des données avec le serveur sans rafraîchir la page. Nous pouvons réaliser la fonction de messagerie instantanée en saisissant un message dans la zone de saisie du chat et en l'envoyant au serveur via Ajax. Le code est le suivant :
// 客户端通过Ajax发送消息到服务器 $(".chat-input").keypress(function(event) { if (event.which == 13) { var message = $(this).val().trim(); if (message != '') { $.post("send_message.php", { message: message }, function(data, status) { if (data == 'ok') { $(".chat-input").val(''); } else { alert('消息发送失败!'); } }); } } }); // 服务器接收到消息后将消息存储到聊天记录表中 $message = $_POST['message']; $add_time = date("Y-m-d H:i:s"); $query = "INSERT INTO chat_records (username, message, add_time) VALUES ('$username', '$message', '$add_time')"; if ($mysqli->query($query) === TRUE) { echo 'ok'; } else { echo 'error'; }Dans le code ci-dessus, nous envoyons le message dans la zone de saisie du chat au serveur via Ajax et stockons le message dans la table d'enregistrement du chat côté serveur. De cette façon, les autres utilisateurs en ligne peuvent voir instantanément les messages envoyés dans la salle de discussion.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!