2015-02-07 70 views
2

为什么当我刷新页面时该代码正在运行?条件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}'"); 
} 
+0

是它的一部分运行还是一切正在运行? – 2015-02-07 12:22:02

+2

如果您按f5,您的浏览器是否要求您重新发送表单数据? – 2015-02-07 12:25:52

+0

您将再次发送发布数据(大多数浏览器都是这样) – user3647254 2015-02-07 12:26:05

回答

0

你最有可能遇到的“双提交问题”

如果通过浏览器进行的最后一个HTTP请求是与数据有效载荷POST请求(在你的情况下投入从一种形式)和您刷新/重新加载网页,浏览器将重新提交POST数据。
这明显会触发你的isset($_POST['topuj'])条件。

浏览器通常会发出警告,表示它将执行此操作。

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

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