我有2页(a.php,b.php)会将get变量(变量名称为status)发送给c.php。
我在c.php中得到了get变量
<?php
$status=$_GET['status']
?>
我希望我可以为$ status做不同的动作,这意味着如果$ status来自a.php,我可以做一些事情,如果$ status来自b.php,我可以做不同的事情。
if($status is come form a.php){
// some action
}
elseif($status is come form b.php){
// some action
}
现在问题是如何识别$ status来自哪里?
我知道php中的$_SERVER
变量可以帮助我识别,但哪个变量是最好的解决方案?
答案 0 :(得分:3)
只需在两个页面(A&amp; B)上添加另一个变量$_GET['sender'];
即可验证哪个变量正在发送数据。
然后做:
if($_GET['sender'] == "A"){
}
elseif($_GET['sender'] == "B"){
}
答案 1 :(得分:1)
我最近遇到了这个问题,并且可以通过几种方式解决。事实上不止一对。
选项1 您可以使用 $ _ SERVER ['HTTP_REFERRER'] ,但根据文档,它是客户端相关的,而不是调用客户端发送请求,因此它应被视为不可靠。正如Darkbee在评论中指出的那样,它也存在安全漏洞。
现在我的情况。
选项2 - 隐藏字段或图像上的唯一名称
<form action="somepage.php">
<input type="hidden" name="option1_name1" value="Arbitary value" />
<input type="image" name="option1_name1" value="Arbitary value" />
</form>
选项3 - 所有表单中的相同名称,但设置了不同的值。
<form action="somepage.php">
<input type="hidden" name="input_name1" value="unique value" />
<input type="image" name="input_name2" value="unique value" />
</form>
<?php
$test = $_POST;
// just for test here. you need to process the post var
// to ensure its safe for your code.
// Used with option 2
// NOTE: unique names per form on both input or submit will
// lead to this unwieldy if else if setup.
if (!empty($test['option1_name1'])) {
// do this
} else if (!empty($test['option1_name2'])) {
// do that
} else {
// do the other
}
// Used with option 3
// By setting all the form input names the same and setting
// unique values instead you just check the value.
// choose the input name you want to check the value of.
if (!empty($test['input_name1'])) {
switch ($test['input_name1']) {
case 'some value':
// do your thing
break;
case 'some other':
// do this thing
break;
default:
//do the other
break;
}
}
两种用途都有它们的好处,如果你在一个文件中有大块,如果你可能更喜欢,因为你可以很容易找到每个部分,但如果你的代码是一个小块,那么一个开关将使它更容易阅读