PHP聊天应用程序:累积 串联工作,但仅在单个主机上



我有一个文本方面,您可以在其中输入消息和一个应该从我的页面上的任何主机输出所有消息的文本方面:

<form action= "chatroom.php" method="post">
Chatbox:<textarea name="results" rows="10" cols="40">
<?php
$accum = $results . $message;
echo $accum;
?>
</textarea>
<br>
Send message:<textarea name="message" rows="7" cols="30"></textarea>
<input type="submit" value="Send" name="send">
</form>

它可以正常工作,但仅在任何单独的计算机上。

我不相信这是服务器问题(使用WAMP(。该网站在网络上,其他回声确实出现在其他客户端,例如

echo "<br>Connected to MySQL.<br>";

但是,当我在服务器计算机上发送消息时,它不会出现在主机计算机上的chatbox Textarea中,反之亦然。

已经尝试将Chatbox Textarea移出表格之外,这无法解决问题。

尝试将$直接累积在页面上而不是在没有解决问题的文本中。

<?php session_start(); ?> 

在chatroom.php的开头也没有工作。

作为旁注,我正在使用mysql,并在我的PHP代码中使用了" localhost",而不是在mysqli中的外部IP。我认为这不是问题,因为数据库远程注册时确实会添加新用户。

我以为所有PHP都是在服务器上执行的,所以$累计不应该从所有主机上拾取文本吗?

我想知道问题是否是所有客户端都有自己的$消息,$结果和$累计变量,因为每个客户端都连接到服务器,而不是彼此连接?那可以解释行为吗?(还是我不完全正确?(

忘了提到,我正在通过再次单击"发送"来刷新页面以检查文本是否出现;我尚未实施自动刷新。

编辑:在chatroom.php中:

<?php
$message = $_POST["message"];
$results= $_POST["results"];
?>

我只是将HTML名称参数转换为PHP变量,然后将该变量直接发布到其他位置的页面上。

也有:

<?php
$username = $_POST["username"];
$word = $_POST["word"];

 $conn = new mysqli("localhost", "user", "pw", "", 8080);
if($conn->connect_error)
 echo $conn->connect_error;
else 
 echo "<br>Connected to MySQL.<br>";
if ($conn->query("create database chatdb")===TRUE)
 echo "Created database";
else 
 echo $conn->error;
if ($conn->query("use chatdb")===TRUE)
 echo "using chatdb";
else 
 echo "<br>Not using chatdb<br>";
if (
$conn->query("create table 
users(
id INT(6) unsigned auto_increment primary key,
username varchar(30),
word varchar(30)
)")===TRUE)
{
    echo "table created";
}
else
 echo $conn->error;
if ($conn->query("insert into users (username, word) values ('$username', 
    '$word')")===TRUE)
 echo "<br>inserted values<br>";
else 
 echo $conn->error;
    ?>

我的注册页面:

Sign Up:
<form action="chatroom.php" method="post">
Username:<input type="text" name="username"><br>
Password:<input type="text" name="word"><br>
<input type="submit" value="Sign Up!" name="signup">
</form>

再次,我认为MySQL与此无关 - 但我可能错了。

HTTP协议是一个请求/响应协议。当有人显示聊天页面时,我假设您的代码会从数据库中读取消息并显示这些消息。

有一个请求(get/chat.php,响应是html的html(,到那时,网络浏览器和服务器之间的连接已关闭。

之后,除非:

  1. 有一个持久的插座连接(WebSockets(或
  2. 您的应用程序正在轮询服务器(也许使用计时器和AJAX调用或
  3. 您的客户端应用程序会在某些间隔
  4. 刷新

解决方案1,2和3需要一定级别的JavaScript能力。

最新更新