【发布时间】:2016-11-21 00:00:17
【问题描述】:
我是 php 的新手,我正在尝试编写一个迷你聊天网络应用程序。这是我的代码:用于连接数据库的页面正在检索所有信息,这些信息已在之前发布。
<?php
try{
$bdd = new PDO('mysql:host=localhost;dbname=chat', 'root', '');
}
catch(Exception $e)
{
die('Error: ' . $e->getMessage());
}
$myname =$_POST["myname"];
$message =$_POST["message"];
$req = $bdd->prepare('INSERT INTO users(myname, message) VALUES(
:myname,
:message)');
$req->execute(array(
'myname' => $myname,
'message' => $message,
));
include('page1.php');
$reponse = $bdd->query('SELECT myname, message FROM users ORDER
BY ID DESC');
while ($mydata = $reponse->fetch())
{
echo '<p>' .($mydata['myname']) .
'</strong> : ' . ($mydata['message']) . '</p>';
}
?>
另一个包含我的表单的页面,用户来这里发布他们的消息
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<title>chat</title>
</head>
<body>
<fieldset width="90">
<marquee>my mini chat </marquee>
<form method="post" action="enregisteur.php">
<label for="Identifier"> Identifier :</label>
<input type="text" name="myname" id="myname" value="myname" placeholder="myname"/>
<br>
<label for="message"> Messages :</label>
<textarea name="message" id="message" value="message">
</textarea>
<br>
<input type="submit" name="validate" value=" validate " size="15"/>
</form>
</fieldset>
</body>
</html>
这很好用,但有一个小问题我想解决:我一个用户说 user1 来输入 user1 和消息 Hello 然后点击提交。信息进入数据库并显示在网页上。如果他继续并重新加载页面而不单击提交,则相同的信息将发送到数据库并再次显示在网络播放中。那就是我们在网页上会有这样的东西
点击提交后 用户1:你好 重新加载页面后 用户1:你好 用户1:你好
每次重新加载后都会发生这种情况
欢迎任何帮助。 谢谢。
【问题讨论】:
-
要动态重新加载一些数据而不重新加载整个页面,你应该看看“AJAX”技术:)!
-
我认为这不是问题所在,据我所知,当有人提交“一些文本”并重新加载页面时,文本会两次发送到数据库。
-
SELECT 和 INSERT 在同一页面上,这也可能是个问题。但是是的,你是对的,这不是解决问题的方法,而是在重新加载页面时避免双重 INSERT 到数据库中的保护与当前的 OP 水平相差甚远,我认为他应该在决定什么之前看到更大的图景在这里做:)
-
我同意@Julqas。 berry 你在开放教室做教程吗?
-
@Ivan 是的,我正在从开放教室获取我的教程