我在这里有一个简单的问题,
我的聊天内容中有这个表格:
<form action="../addchat.php" method="POST" enctype="multipart/form-data">
<textarea id="textarea" style="border-radius:0px; border:none; background-color:rgb(243,243,243); min-height:100px;"name="comment" rows="4" cols="50"></textarea><br>
<input height="25px" width="20px" style="float:right;" type="image" src="../arrow.png" name="submit" value="Comment">
</form>
此表单供用户提交聊天消息。之后,表单发布会将信息定向到addchat.php,其中包含以下代码:
<?php
ob_start();
session_start();
include_once("config.php");
$reply=mysqli_real_escape_string($mysqli,$_POST['comment']);
$cid=mysqli_real_escape_string($mysqli,$_SESSION['cid']);
$uid=mysqli_real_escape_string($mysqli,$_SESSION['userid']);
$time=time();
$ip=$_SERVER['REMOTE_ADDR'];
$q= mysqli_query($mysqli,"INSERT INTO conversation_reply (user_id_fk,reply,ip,time,c_id_fk) VALUES ('$uid','$reply','$ip','$time','$cid')") or die(mysqli_error($mysqli));
?>
这个脚本显然会将数据添加到表格中,之后聊天html页面上的另一个脚本将显示聊天消息。
然而,当前的问题是,首先,在用户点击提交后,页面将重定向到另一个空白页面并显示成功消息。其次,用户需要刷新才能看到新的聊天消息。
这个聊天应用程序是私聊(类似于Facebook),所以不太确定如何做到这一点?非常感谢一些帮助:)
答案 0 :(得分:0)
如果您不希望它重定向。将PHP代码移动到与表单相同的文件。您可以使用include
。
然后制作表格action=""
。
然后围绕PHP,您需要检查POST是否存在,以便它仅在表单提交时运行:
e.g。
if (!empty($_POST))
至于刷新问题。您可能想要研究AJAX甚至是socket.io。
答案 1 :(得分:0)
标准html表单提交始终将提交(和重定向)到表单的action
属性中定义的页面。使用jquery,您可以阻止此默认行为,并使用ajax发送表单数据:
$("form").on("submit", function(event){
event.preventDefault();
$.ajax({
url: "../addchat.php",
type: "POST",
cache: false,
data: {
comment: $("#textarea").text()
},
success: function(data){
//something you could do on success of your ajax call.
//you might not need it in this case.
}
});
});
其次,您需要一些自动刷新输出区域的过程。在html中创建一个div来显示聊天输出:
<div id="chat_content_div"></div>
然后你必须在你的javascript中做这样的事情来自动刷新它:
var refresh_time = 500; // chat refresh time in ms
setInterval(function(){
$.ajax({
url: "chat_output.php",
type: "GET",
dataType: "html",
cache: false,
success: function(data){
$("#chat_content_div").html(data);
}
});
}, refresh_time);
在“chat_output.php”中,您只显示数据库中的(html)数据,以便在此div中显示。
答案 2 :(得分:0)
回答这个问题并不简单,因为它属于您在聊天应用程序中想要的难度/复杂程度。
答案 3 :(得分:0)
如果我是你,我不会将PHP用于那个目的,或者如果你这样做,你需要很多ajax来使这个聊天工作。
ajax请求发送... ajax请求每n毫秒获取新消息。您还应该使用api而不是网页与服务器端应用程序进行交互。您的服务器需要高可用性并且响应速度非常快。
您应该选择支持websockets的语言(例如,查看python与django,或java,或其他...)如果您想要此聊天真的很有效率。
在编写这些行的时候,我发现了一些东西(Ratchet library)在php中使用websocket(我不知道它是如何工作的但是如果你的服务器的max_execution_time工作,你可能会遇到问题“而真正的“循环”
编辑:正如Tuan Duong所说,nodejs是另一个不错的选择