为什么刷新页面时此代码会运行?条件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 :(得分:0)
您最有可能遇到&#34;双重提交问题&#34;
如果浏览器发出的最后一个HTTP请求是带有数据有效负载的POST请求(在您的情况下是表单中的输入),并且您刷新/重新加载网页,浏览器将重新提交POST数据。
这显然会触发您的isset($_POST['topuj'])
条件。
浏览器通常会发出警告,说明它会这样做。
如果您正在开发并且想要避免这种情况,我会通过在地址栏中重新键入URL或单击返回表单的链接来浏览表单。
对于生产应用,您可能希望实施更好的解决方案,以防止用户重新加载页面 例如,在成功提交后将用户重定向远离页面,但也有许多(可能更好的)解决方案。