【问题标题】:Code runs when refresh刷新时运行代码
【发布时间】:2015-04-07 13:20:02
【问题描述】:

为什么刷新页面时这段代码会运行?条件 isset($_POST['topuj']) 有问题吗? “Topuj”是按钮的名称。

<?php
if(isset($_COOKIE['prihlaseny'])) {
require('db.php');
$meno1 = $_COOKIE['prihlaseny'];

$prikaz = $mysql->query("SELECT * FROM `uzivatelia` WHERE `meno`='{$meno1}'");
while($a = $prikaz->fetch_assoc()) {
$kredit = $a[kredity_topovania];
$plus = $a[topovanie];

if( $kredit > 0) {
echo "
<form method='post'>";
if( $kredit == 1) echo "Máš $kredit kredit."; 
if( $kredit == 2 || $kredit == 3 || $kredit == 4) echo "Máš $kredit kredity."; 
if( $kredit > 4) echo "Máš $kredit kreditov."; 
echo "<br /><button name='topuj' value='$a[id]' />Topovať</button>
</form>
";}

}
if( isset($_POST['topuj'])) {
$id = $_POST['topuj'];
$mysql->query("UPDATE `uzivatelia` SET topovanie='$plus'+1, kredity_topovania='$kredit'-1 WHERE id='{$id}'");
}

【问题讨论】:

  • 它的一部分在运行还是一切都在运行?
  • 如果你按f5,你的浏览器会要求你重新发送表单数据吗?
  • 您将再次发送帖子数据(大多数浏览器都会这样做)

标签: php button refresh


【解决方案1】:

您很可能遇到“双重提交问题”

如果浏览器发出的最后一个 HTTP 请求是带有数据负载的 POST 请求(在您的情况下是来自表单的输入)并且您刷新/重新加载网页,浏览器将重新提交 POST 数据。
这显然会触发您的isset($_POST['topuj']) 条件。

浏览器通常会发出警告,表明它会这样做。

如果您正在开发并且想要避免这种情况,我会通过在地址栏中重新键入 URL 或单击返回表单的链接来浏览回表单。

对于生产应用,您可能希望实施更好的解决方案,以防止用户重新加载页面。
例如,在成功提交后将用户重定向离开页面,但也有许多(可能更好)的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 2016-04-07
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多