2015-04-06 52 views
2

我有2個頁面(a.php,b.php)會將獲取變量(變量名稱爲狀態)發送到c.php。

而且我得到的GET變量c.php

<?php 
$status=$_GET['status'] 
?> 

而且我想我能爲$狀態不同的動作,這意味着如果$狀態來形式a.php只會,我可以做一些事情,如果$ status來自b.php,我可以做不同的勝利。

if($status is come form a.php){ 
    // some action 

} 
elseif($status is come form b.php){ 
    // some action 

} 

現在的問題是如何識別到$狀態是從哪裏來的? 我知道$_SERVER在php中的變量可以幫助我識別,但是哪個變量是最好的解決方案?

+0

添加另一個'$ _GET'值來標記它來自哪裏或者爲每個頁面傳遞不同的'status'值... – cmorrissey

回答

3

只需在兩頁上添加另一個變量$_GET['sender'];(A & B)以驗證哪一個正在發送數據。

然後執行:

if($_GET['sender'] == "A"){ 

} 
elseif($_GET['sender'] == "B"){ 

} 
+0

like a.php?status ='something'&sender = A? – paul0080

+0

是的!但它在'c.php?status ='something'&sender = A' –

+0

這是工作,謝謝你的回答。 – paul0080

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

     } 

兩種用法都有各自的好處,如果你在一個文件中有大塊,如果否則,如果可能會中將優先選擇,你可以很容易地找到每個部分,但如果你的代碼是一個小的塊,然後交換機將它更易於閱讀。

+1

只是一個註釋:引用者可以被僞造,並且不應該被信任以進行安全檢查 – DarkBee

+0

感謝您評論darkbee,是的,它不應該用於驗證頁面作爲獨立提交的位置。 – Chris