2015-06-08 62 views
0

我刚开始使用SQL,我正在聊天。PHP chat提交刷新按钮

几个问题: -

1)如果你来自index.php文件(该网站,你可以把一个用户名只) 你会来home.php。比顶部它说:你还没有发送消息。每次如果我刷新它只是上传最后的消息。我知道有一个修复我只是找不到它。

2)如果我按下提交按钮,刷新页面并一路向上。所以你必须一直向下滚动才能进入并看到你的消息。 +我可以解决这个问题,但没有看到任何信息发送。

<?php 

if (isset($_POST["afzender"])){ 
    $_SESSION['afzender'] = $_POST['afzender']; 
} 

$servername = "localhost"; 
$username = "*******"; 
$password = "******"; 
$dbname = "*****"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "INSERT INTO 'chatbox_berichten' 
(''id', 'afzender', 'chatbox_id', 'bericht', 'tijd') 
VALUES (NULL, '".$_SESSION['afzender']."', '', '".$_POST['bericht']."', CURRENT_TIMESTAMP);"; 
echo $sql; 
if ($conn->query($sql) === TRUE) { 
    echo "Succesvol Toegevoegd."; 
} else { 
    echo $conn->connect_error; 
} 
echo "<hr/>"; 

$sql = "SELECT * FROM chatbox_berichten"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    echo "<table border='2'>"; 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<tr><td>" . $row["id"]. "<td>" . $row["afzender"]. "<td>" . $row["bericht"]. " <td>" . $row["tijd"]. "</td></tr>"; 
    } 
    echo "</table>"; 
} else { 
    echo "0 results"; 
} 


$conn->close(); 
?> 
<?php echo $_SESSION['afzender']; ?>   
<form action="home.php" method="post"> 
Bericht: <input type="text" name="bericht"><br> 
<input type="submit"> 
</form> 

我知道代码看起来凌乱。我没有任何教训让它看起来更好。

所以,任何帮助,将不胜感激。

回答

0

我会帮你的,但我没有时间为你编写所有的代码。

每次如果我刷新它只是上传的最后一条消息

如果您刷新页面,浏览器会重复上次请求。如果您之前发送了消息,它将是一个POST请求。因此,该消息将被重新发送,因为浏览器会重复HTTP请求。

最常见的解决方法是在处理POST请求时HTTP重定向到相同的URL,因此浏览器发出的最后一个请求是GET请求(请参阅下面的备注)。

如果我按下提交按钮,它刷新页面,并将所有 的方式。所以你必须一直向下滚动才能进入并看到你的消息 。 +我可以解决这个问题,但没有看到 发送任何消息。

对于聊天应用程序,这不是最好的方法。您可以颠倒聊天消息的顺序(最新的顶部),因此您无需向下滚动查看最新消息。

理想的方法是异步客户端/服务器通信。继续阅读一些关于AJAX的文章(或者websockets,如果你想向现代技术迈出一大步)。一个简单的脚本可以定期(或通过使用websockets的通知)检查新消息,将它们附加到旧消息列表并相应地滚动。如果您也发送消息发送后台任务,则您的第一个问题将消失,因为您不需要执行“前台请求”来发送/接收消息。

还有一件事:你应该真的阅读一些关于网络攻击的文章。您的代码容易受到XSS和SQL注入攻击。目前,您的PHP代码允许攻击者接管您的数据库并向该页面注入任意代码。您应该使用HTML和SQL转义。