为了账号安全,请及时绑定邮箱和手机立即绑定

阻止用户在未先完成表单的情况下访问提交页面

阻止用户在未先完成表单的情况下访问提交页面

PHP
喵喵时光机 2023-05-26 17:23:18
假设我有一个关于example.com/contact该流程的表格example.com/submitted。理论上,目前任何人都可以example.com/submitted直接访问,但由于显示的消息,这并不理想。从理论上讲,只要发布了表单页面的内容就无关紧要。我不想在提交页面的内容完成时回显它。我只需要一些简单的东西,比如如果 referrer 不是example.com/form或POST方法。我只需要在example.com/submitted用户实际提交内容时才允许访问。我已经尝试过 PHP 和 htaccess 方法(首选 PHP),但我发现没有任何效果。在同一页面上处理会消除此问题,但提交的页面包含完全不同的内容。任何建议将不胜感激,因为我在任何地方都找不到有效的答案。
查看完整描述

4 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

将action您的表单指向example.com/contact,example.org/submitted以便将表单内容发布到您的submitted页面。


然后,在你的submitted页面上,检查方法,并重定向到contacton GET(或者更好的是,所有不是的POST):


if ($_SERVER['REQUEST_METHOD'] !== 'POST')

    header("Location: http://example.com/contact");

else if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST)) {

    // validate input

    // save to your CSV

    // display `submitted` page

}


查看完整回答
反对 回复 2023-05-26
?
森林海

TA贡献2011条经验 获得超2个赞

试试这个: contact.php


session_start();

...

$_SESSION['form-submitted'] = 0;

if(isset($_POST['submit'])){//use your button value

   //do your stuff

   $_SESSION['form-submitted'] = 1;

   //redirect to submitted file

}

提交.php


if(isset($_SESSION['form-submitted']) && $_SESSION['form-submitted'] == 1){

   //show content

} else {

   //redirect to contact page

}

这将允许您捕获获取请求并检查表单是否未提交。


查看完整回答
反对 回复 2023-05-26
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

你试过这个了吗?


if (!isset($_POST)) {

    header("Location: http://example.com/contact");

}


查看完整回答
反对 回复 2023-05-26
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您可以通过这样做来完成对 refferer 和请求方法的检查:


if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_SERVER['HTTP_REFERER'] == "http://example.com/form") {

    // Your code

}


查看完整回答
反对 回复 2023-05-26
  • 4 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信