首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP聊天应用程序: Accumulation+Concatenation工作,但只在个人主机上?

PHP聊天应用程序: Accumulation+Concatenation工作,但只在个人主机上?
EN

Stack Overflow用户
提问于 2018-03-26 05:24:47
回答 1查看 28关注 0票数 0

我有一个文本区域,你可以在其中输入你的消息,还有一个文本区域,它应该输出来自我页面上任何主机的所有消息:

代码语言:javascript
复制
<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)。该站点位于web上,其他回声也出现在其他客户端上,例如

代码语言:javascript
复制
echo "<br>Connected to MySQL.<br>";

但是,当我在我的服务器计算机上发送一条消息时,它不会出现在我主机的Chatbox文本区域中,反之亦然。

我已经尝试将Chatbox文本区域移出表单,但没有解决问题。

尝试直接将$accum回显到页面上,而不是文本区域,这并没有解决问题。

代码语言:javascript
复制
<?php session_start(); ?> 

在刚开始的时候,chatroom.php也不能工作。

顺便说一句,我在php代码中使用了mySQL,并且在mysqli中使用了"localhost“而不是我的外部IP。我不认为这是问题所在,因为当他们远程注册时,数据库会添加一个新用户。

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

我想知道问题是不是所有客户端都有自己的$message、$results和$accum变量,因为每个客户端都连接到服务器,而不是彼此连接。所以这能解释这种行为吗?(或者我不是完全正确的?)

忘了提一下,我正在通过再次单击Send来刷新页面,以检查文本是否出现;我还没有实现自动刷新。

编辑:在chatroom.php中:

代码语言:javascript
复制
<?php

$message = $_POST["message"];
$results= $_POST["results"];

?>

我只是将html name参数转换为一个php变量,然后将该变量直接发送回页面的不同位置。

此外,还包括:

代码语言:javascript
复制
<?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;
    ?>

我的注册页面:

代码语言:javascript
复制
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与此有关--但我可能错了。

EN

回答 1

Stack Overflow用户

发布于 2018-03-26 05:56:00

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

有一个请求(获取/chat.php,响应是聊天页的超文本标记语言),此时web浏览器和服务器之间的连接关闭。

在此之后,web客户端将无法知道有人向数据库中发布了一条新消息,除非:

  1. 存在持久套接字连接(websockets)或
  2. 您的应用程序正在轮询服务器(可能使用计时器和ajax调用或
  3. 您的客户端应用程序正在以某个时间间隔刷新

解决方案1、2和3需要一定程度的javascript能力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49481097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档