如果有人回答,但是我无法找到我的问题的明确答案。
假设我有2个页面,名为fruit.php
和salad.php
当用户在fruit.php
的字段中输入数据时,他将被定向到salad.php但是没有什么能阻止用户在他的浏览器中输入salad.php
,这将打开第二页并给出错误的结果,因为他的第1页数据fruit.php
尚未输入。
知道如何在fruit.php完成之前阻止用户访问salad.php
吗?
答案 0 :(得分:1)
让我们说fruit.php会像get
一样发送数据
salad.php&donut=yummy
您想要的是,当您加载salad.php时,验证是否已发送甜甜圈。您需要使用isset()
来实现此目的。 (请注意,这也适用于$_POST
,但为了示例,我将坚持使用$_GET
)
if (isset($_GET['donut'))
//Good, your script has been called from fruit.php
else
//Nope ! He tried to type the adress in the browser ! Let's serve him an empty page here.
首先,这应该可以解决问题,之后我建议先查看$_POST
而不是$_GET
,然后再查看$_session
。
你有它。
答案 1 :(得分:1)
在这种情况下你可以这样做: 由于用户需要在第一页输入一些值,所以(表格)将在那里出现,让我们说出这一个:
fruit.php
<form name="fruit" id="fruit" action="salad.php" method="POST">
First component: <input type="text" name="component1">
Second component: <input type="text" name="component2">
<input type="submit" value="check">
</form>
现在是第二页:
salad.php
<?php
//first thing first, we're going to check whether the user
//is being redirected by the form by doing something like
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//do something
} else {
//this thing will redirect the user to the former page in case no form was applied
header('Location: fruit.php') or die('Unexpected error');
}
?>
我希望这会对你有所帮助,有很多方法,你总是建议在处理任何数据之前检查(空(字段))以避免不愉快的结果
答案 2 :(得分:0)
你应该写一个salad.php,它只接受POST请求,如果有GET请求,将它重定向到fruit.php
答案 3 :(得分:0)
位于salad.php的顶部:
if(($_SESSION['HTTP_REFERER'] !="http://domain.ext/dir/fruit.php") || (!isset($_POST['essentialFormVar1From_fruit.php'])) || ...){
header('location: http://domain.ext/dir/fruit.php');
};
else{
...
//render page
...
}
答案 4 :(得分:0)
如果您通过POST传递值,您可以在“salad.php”页面中验证:
if(!isset($_POST['myVariable'])) {
header('Location: fruit.php');
exit;
}
... continue my salad page ...
如果您正在使用GET,只需将$ _POST更改为$ _GET。
答案 5 :(得分:0)
您可以在salad.php中添加检查请求中是否发送了正确的数据:
if($_POST['fieldname'] == ''){
echo 'you enterd the page wrong. Please go back to the <a href="...">Form</a> and enter the data needed';
}else{
// normal page content here.
}
因此,观众只有在提交了拟合请求时才能获得该页面。