Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php html表单提交方法post和限制对post文件的访问_Php_Html_Forms_Redirect - Fatal编程技术网

Php html表单提交方法post和限制对post文件的访问

Php html表单提交方法post和限制对post文件的访问,php,html,forms,redirect,Php,Html,Forms,Redirect,我有两个文件,index.html和code.php 在我的html页面中,我有一个表单,它在提交时发布到code.php,如下所示: <form method="post" action="code.php"> 我试图做的只是当用户单击html表单上的submit时,让公众可以访问code.php。我之所以尝试这样做,是因为当用户在sites.com/code.php中键入时,它会显示一个没有处理表单数据的页面,而且看起来很糟糕,所以我想限制code.php的访问权限 所以

我有两个文件,index.html和code.php

在我的html页面中,我有一个表单,它在提交时发布到code.php,如下所示:

<form method="post" action="code.php"> 

我试图做的只是当用户单击html表单上的submit时,让公众可以访问code.php。我之所以尝试这样做,是因为当用户在sites.com/code.php中键入时,它会显示一个没有处理表单数据的页面,而且看起来很糟糕,所以我想限制code.php的访问权限

所以基本上我想做的是,当用户访问sites.com/code.php时,他们会被重定向到index.html,但是如果他们浏览表单并点击submit,他们将能够访问已处理的code.php

我想到了不同的方法,其中一种方法是用一些php脚本更改code.php的chmod。因此,默认情况下code.php不可读,但如果用户单击submit,code.php wpud的chmod将更改为可读,从而显示页面,但是当用户仅访问code.php时,无法将其重定向到index.php

如果有什么好办法,请告诉我!
谢谢。

只需设置重定向,如:

<?php
if(!isset($_POST['submit'])) //If form has not been submitted to get to this page
{
     header('Location: http://www.domain.com/');  //Redirect
     die; //Make sure script ends processing
}


//Rest of code.php
?>

这样,如果有人在所需的导航结构之外访问code.php,他们只会返回到索引


您还可以将所有内容保存在一个页面上,让表单自行提交,如果表单已提交,则包含通过require()或include()处理表单的代码,如果表单未提交或提交时出错,则显示表单,否则显示提交结果,因此,甚至没有公开存在外部php文件的事实。

只需设置如下重定向:

<?php
if(!isset($_POST['submit'])) //If form has not been submitted to get to this page
{
     header('Location: http://www.domain.com/');  //Redirect
     die; //Make sure script ends processing
}


//Rest of code.php
?>

这样,如果有人在所需的导航结构之外访问code.php,他们只会返回到索引


您还可以将所有内容保存在一个页面上,让表单自行提交,如果表单已提交,则包含通过require()或include()处理表单的代码,如果表单未提交或提交时出错,则显示表单,否则显示提交结果,因此,甚至不暴露存在外部php文件的事实。

您可以做的是在表单未发布时重定向回index.html页面

您可以通过检查REQUEST_METHOD变量来实现这一点

if($_SERVER['REQUEST_METHOD'] !== 'POST')
{
  Header('Location: http://www.mysite.com/index.html');
  exit;
}

您可以做的是在表单未发布时重定向回index.html页面

您可以通过检查REQUEST_METHOD变量来实现这一点

if($_SERVER['REQUEST_METHOD'] !== 'POST')
{
  Header('Location: http://www.mysite.com/index.html');
  exit;
}

另一种选择是检查code.php中的
HTTP\u referer
HTTP\u referer
提供当前用户访问页面的来源。如果
HTTP\u referer
不是
index.html
,您可以将用户重定向到
index.html

<?php
$ref = $_SERVER["HTTP_REFERER"];
if ( $ref !== 'http://www.mydomain.com/index.html' )
{
    header("Location:http://www.mydomain.com/index.html");
    exit;
}
?>

另一种选择是检查code.php中的
HTTP\u referer
HTTP\u referer
提供当前用户访问页面的来源。如果
HTTP\u referer
不是
index.html
,您可以将用户重定向到
index.html

<?php
$ref = $_SERVER["HTTP_REFERER"];
if ( $ref !== 'http://www.mydomain.com/index.html' )
{
    header("Location:http://www.mydomain.com/index.html");
    exit;
}
?>


最好使用IsSet($\u POST['submit'])进行检查,否则将给出未定义的数组索引错误警告。最好使用IsSet($\u POST['submit'])进行检查,否则将给出未定义的数组索引错误警告。这不是一个可靠的解决方案,因为某些浏览器配置为忽略referer标头。是,我也了解到,它不太可靠。依赖REQUEST_方法会更好。这不是一个可靠的解决方案,因为有些浏览器配置为省略referer头。是的,我也知道它不太可靠。依靠REQUEST_方法会更好。