我有一个包含许多下拉菜单和数字滑动条的表单。
我正在使用post方法将所选变量传递给另一个页面。我通过$ _POST()方法在下一页中获取变量的位置。
我正在更新传递到数据库中的变量,更新后将javascript弹出为“您已成功保存”。
所以我的问题是当我点击浏览器后退按钮时,值会一次又一次地在数据库中更新。如何通过禁用浏览器后退按钮来阻止此操作。
答案 0 :(得分:1)
如果用户使用会话返回页面,您可以重定向用户,而不是禁用后退按钮。
<强> page1.php中强>
session_start();
if (isset($_SESSION['block'])) {
header('Location: page2.php');
}
<强>使page2.php 强>
session_start();
$_SESSION['block'] = true;
另一种选择:
如果用户点击回来,您可以设置所有输入字段的值:
<强> page1.html 强>
var block = localStorage.getItem("block");
window.addEventListener("beforeunload", function() {
if (block === 1) {
const block = true;
}
});
if (block) {
const inputs = document.getElementsByTagName('input');
for (input of inputs) {
input.value = '';
}
}
<强> page2.html 强>
localStorage.setItem("block", 1);
在这种情况下,如果您不希望在数据库中更新值,请使用:
if (!empty($_POST['my_value']) { // Add to database })
答案 1 :(得分:0)
禁用后退按钮,修复多次保存数据的问题。您可以使用将用户传递到带有消息&#34的单独页面;您已成功...&#34;。
然后,如果用户试图返回,则查看$_SERVER['HTTP_REFERER']
,如果是&#34; success.php&#34;然后不保存数据。
禁用后退按钮是我阻止页面的一个重要原因,因此我无法再次访问它。
我真的很讨厌当他们这样做或添加几个页面,你必须点击回来离开页面。
答案 2 :(得分:0)
您可以让您的帖子方法打开一个新标签,以便没有后退导航转到:
<!DOCTYPE HTML>
<html>
<body>
<form action="www.google.com" method="post" target="_blank">
<input type="submit">
</form>
</body>
</html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$('#theSubmit').on('click', function () {
setTimeout(function(){
window.close();
}, 500);
})
</script>
目标生成新窗口 如果要关闭旧窗口,请在打开新选项卡后添加两个关闭前一个选项卡500ms的脚本。
答案 3 :(得分:0)
每当您发布数据时,您应该检查您的帖子数据是否为空
[AllowAnonymous]
[Route("create")]
public async Task<IHttpActionResult> CreateUser(CreateUserBindingModel createUserModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = new ApplicationUser()
{
UserName = createUserModel.Username,
Email = createUserModel.Email,
FirstName = createUserModel.FirstName,
LastName = createUserModel.LastName,
Level = 3,
JoinDate = DateTime.Now.Date,
EmailConfirmed = true,
ReferansKodu = createUserModel.ReferansKodu,
PhoneNumber = createUserModel.PhoneNumber
};
IdentityResult addUserResult = new IdentityResult();
try
{
addUserResult = await this.AppUserManager.CreateAsync(user, createUserModel.Password);
}
catch (Exception e)
{
throw e;
}
if (!addUserResult.Succeeded)
{
return GetErrorResult(addUserResult);
}
else
{
AppUserManager.AddToRole(user.Id, "AltCari");
}
Uri locationHeader = new Uri(Url.Link("GetUserById", new { id = user.Id }));
return Created(locationHeader, TheModelFactory.Create(user));
}