如何防止php页面从浏览器返回按钮?

时间:2018-06-06 05:03:10

标签: javascript php

我有一个包含许多下拉菜单和数字滑动条的表单。

我正在使用post方法将所选变量传递给另一个页面。我通过$ _POST()方法在下一页中获取变量的位置。

我正在更新传递到数据库中的变量,更新后将javascript弹出为“您已成功保存”。

所以我的问题是当我点击浏览器后退按钮时,值会一次又一次地在数据库中更新。如何通过禁用浏览器后退按钮来阻止此操作。

4 个答案:

答案 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));
    }