gpt4 book ai didi

javascript - PHP防止同一页面上多个表单重新提交

转载 作者:行者123 更新时间:2023-12-03 03:28:40 25 4
gpt4 key购买 nike

您好,已检查 this page 的答案:但是它使用 action="" 是否容易受到 XSS 攻击?如果是,那么如果没有这样的解决方案,我的选择是什么?

我尝试使用 header 重定向。但由于我有 2 个表单,(在某些页面 4-5 个表单中)标题重定向对我来说不起作用,并出现错误。

这是我的代码:(简化)

第一种形式:可以通过重定向正常工作。

<form name="ip_block" method="post" class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2" for="ip"> Enter IP:</label>
<div class="col-sm-8">
<input type="text" name="ip" class="form-control" id="ip" />
</div></div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-8">
<button type="submit" class="btn btn-default"
name="ip_block_add">Submit</button>
</div></div>
</form>
<?php
if(isset($_POST['ip'])){
if($IP = filter_input(INPUT_POST, 'ip',
FILTER_SANITIZE_STRING)){
$add_ip = $mysqli->prepare("INSERT INTO block_ip(b_ip)
VALUES(?)");
$add_ip->bind_param("s",$IP);
$add_ip->execute();
$add_ip->store_result();
$add_ip->close();
header("refresh:5;url=./admin-security.php");// avoiding form
resubmission
echo 'Added successfully';
}
else {
echo 'failed to insert';
}
}
?>

表格 2:

 <form name="clear_data" method="post">
<input type="hidden" name="data_clear" value="1"/>
<button type="submit" class="btn btn-warning">Clean Data</button>
</form>
<?php
if(isset($_POST['data_clear'])){
if($mysqli->query("CALL clear_old_data")){
header("refresh:5;url=./admin-security.php");// avoiding form resubmission
echo 'operation successfull';
}
else
{
echo 'database failure';
}
}
//----
?>

对于第二种形式,我收到这样的错误

Warning: Cannot modify header information - headers already sent by

对于第二种形式,我在 echo 之前使用 header ,但它仍然不起作用。 reference ,我也尝试过使用 javascript,但失败了。

 echo "<script>setTimeout('window.location.href='./admin-
security.php';',4000);</script>";

已更新,采用 Dainis Abols 的想法:但页面刷新时仍显示表单重新提交选项

            <form name="clear_data" method="post">
<input type="hidden" name="data_clear" value="1"/>
<?php
$var=111;
$_SESSION['var']=$var;
?>
<input type="hidden" value="<?php echo $var; ?>" name="varcheck"
/>
<button type="submit" class="btn btn-warning">Clean
Data</button>
</form>
<?php
if(isset($_POST['data_clear']) &&
($_POST['varcheck']==$_SESSION['var'])){
// Some code
}

最佳答案

我宁愿使用ajax将数据发送到数据库,而不提交表单,并且成功后我将使用js重定向到/admin-security.php。在这种情况下,不可能将数据发送两次。

这是 PHP 代码:

     <?php
if(isset($_POST['ip'])){
if($IP = filter_input(INPUT_POST, 'ip',
FILTER_SANITIZE_STRING)){
$add_ip = $mysqli->prepare("INSERT INTO block_ip(b_ip)
VALUES(?)");
$add_ip->bind_param("s",$IP);
$add_ip->execute();
$add_ip->store_result();
$add_ip->close();
echo 1;
}
else {
echo 0;
}
exit;
}
?>

HTML:

<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2" for="ip"> Enter IP:</label>
<div class="col-sm-8">
<input type="text" name="ip" class="form-control" id="ip" />
</div></div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-8">
<button type="button" onClick="send_form()" class="btn btn-default"
>Submit</button>
</div></div>
</div>

以及用 JQuery 编写的 AJAX

<script>
function send_form() {
$.ajax({
url: "./admin-security.php",
type: "POST",
data: {
ip: $("#ip").val()
},
success: function(response) {
if(response==1) {
alert("Done");
location.href = "./admin-security.php";
}
else alert("Fail!");
}
});
}

关于javascript - PHP防止同一页面上多个表单重新提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46190389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com