代码在刷新时运行

时间:2015-02-07 12:20:21

标签: php button refresh

为什么刷新页面时此代码会运行?条件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}'");
}

1 个答案:

答案 0 :(得分:0)

您最有可能遇到&#34;双重提交问题&#34;

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

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

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

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