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

假设我有一个关于example.com/contact该流程的表格example.com/submitted。理论上,目前任何人都可以example.com/submitted直接访问,但由于显示的消息,这并不理想。

从理论上讲,只要发布了表单页面的内容就无关紧要。我不想在提交页面的内容完成时回显它。我只需要一些简单的东西,比如如果 referrer 不是example.com/formPOST方法。

我只需要在example.com/submitted用户实际提交内容时才允许访问。我已经尝试过 PHP 和 htaccess 方法(首选 PHP),但我发现没有任何效果。在同一页面上处理会消除此问题,但提交的页面包含完全不同的内容。

任何建议将不胜感激,因为我在任何地方都找不到有效的答案。


喵喵时光机
浏览 95回答 4
4回答

慕无忌1623718

将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}

森林海

试试这个: contact.phpsession_start();...$_SESSION['form-submitted'] = 0;if(isset($_POST['submit'])){//use your button value   //do your stuff   $_SESSION['form-submitted'] = 1;   //redirect to submitted file}提交.phpif(isset($_SESSION['form-submitted']) && $_SESSION['form-submitted'] == 1){   //show content} else {   //redirect to contact page}这将允许您捕获获取请求并检查表单是否未提交。

婷婷同学_

你试过这个了吗?if (!isset($_POST)) {    header("Location: http://example.com/contact");}

摇曳的蔷薇

您可以通过这样做来完成对 refferer 和请求方法的检查:if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_SERVER['HTTP_REFERER'] == "http://example.com/form") {    // Your code}
打开App,查看更多内容
随时随地看视频慕课网APP