检查$ _GET变量来自php中的哪个页面

时间:2015-04-06 15:10:45

标签: php

我有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变量可以帮助我识别,但哪个变量是最好的解决方案?

2 个答案:

答案 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;
         }

      }

两种用途都有它们的好处,如果你在一个文件中有大块,如果你可能更喜欢,因为你可以很容易找到每个部分,但如果你的代码是一个小块,那么一个开关将使它更容易阅读