2013-10-03 28 views
0

有沒有更好的方式來使用發佈數據,而不是手動定義變量?

我目前的方法

<form method="POST" action="form.php"> 

    <input type="text" name="name" id="name" /> 

    <input type="submit" value="Submit"> 

</form> 

<?php 

    $name = $_POST['name']; 

    function echoname ($name) { 

     echo $name; 

    }; 

    echo "This is my new" . echoname ($name); 

?> 

現在我知道你可以去像這樣我的例子不過是只是一個例子

<?php 

    $name = $_POST['name'] 

     echo "This is my new" . $name; 

?> 

有沒有更好的辦法使用$_POST['value']而不必每次都將發佈數據定義爲變量?

作爲一個說明,我已經在這裏看了:PHP Manual $_POST已經

謝謝!

+0

有一個函數調用提取物(),可以把所有$ _ POST命名的指標到各個變量,具有可選的前綴,以避免命名衝突。 http://php.net/manual/en/function.extract.php –

+0

@FreemanLambda該頁面有一個警告,不可用於不受信任的數據... – AaronHatton

+1

@AaronHatton如果您不覆蓋變量,則不會發生任何事情。如果你想使用'$ _POST [任何東西]',那麼你顯然會冒這個風險呢? – h2ooooooo

回答

3

如果你不想使用extract()出於安全目的(儘管你可以直接跳過已經存在的變量),那麼你可以簡單地遍歷數組 - 檢查$_POST值存在,如果確實如此,創建密鑰的變量:

<?php 
    $postVariablesToExtract = array("name", "password", "email"); 

    foreach ($postVariablesToExtract as $postVariableToExtract) { 
     if (isset($_POST[$postVariableToExtract])) { 
      $$postVariableToExtract = $_POST[$postVariableToExtract]; 
     } else { 
      $$postVariableToExtract = null; 
     } 
    } 

    var_dump($name); //null - as we don't have any POST values 
    var_dump($password); //null - as we don't have any POST values 
    var_dump($email); //null - as we don't have any POST values 
?> 
+0

這種方式看起來很複雜,但我想通過過濾數組可以更快地進行注入檢查? – AaronHatton

+0

@AaronHatton'extract'基本上就是這樣一個函數,它基於鍵創建變量。這裏唯一的區別是我們只設置了我們已經決定的變量(所以我不能通過發佈'username = MyOwnUsernameVariable'來改變我的用戶名)。 – h2ooooooo

+0

是否可以發佈一些PHP手冊鏈接以供參考? – AaronHatton

0

是的,你可以使用

echo "This is my new" . $_POST['name']; 

,但更好的方法是

if(isset($_POST['name'])) // check if this data is exsit 
    echo "This is my new" . $_POST['name']; 
0

當然,你可以使用變量直接即:

echo "This is my new " . $_POST['name']; 

但是這是一個檢查空虛(或一般性驗證)的好主意。例如,在下面的情況下,如果變量是空的我指定一個默認值:

$name = empty($_POST['name']) ? 'John' : $_POST['name']; 
echo "This is my new $name"; 
+0

改爲使用'isset'。如果這個值是''「''或'0',那麼'empty'就會選擇默認值,這很可能不是OP想要的。 – h2ooooooo

0

$_POST['value']已經所以它不是一個必須的變量爲您將其存儲在一個變量。然後,再次,它的常見做法是將其存儲在變量中,然後再對其進行操作。

另外,$_POST是一個數組。這就是爲什麼你需要指定密鑰,在你的情況下['value']是你的關鍵。現在,如果您想查看其中的其他值,則您也可以回顯整個$_POST,但回聲對陣列無效,因此您需要使用print_r($_POST);

0

我不確定您需要的方式,但是$ _POST是正常的數組可能很重要,所以你可以使用foreach函數。

foreach ($_POST as $item) { 
    print_r($item); 
} 
0

獲取發佈數據的方法很多,但在某些情況下取決於需求。

  • foreach($ _POST as $ key => $ value)$ body。= $ key。 ' - >'。 $ value。 '
    ';

  • 如果發佈的數據沒有密鑰,但只值,使用原始數據後:

    $ POSTDATA =的file_get_contents( 「PHP://輸入」);

  • 您可以使用$ _REQUEST以及$ _POST來實現Post,Get和Cookie等所有數據。

  • 你也可以簡單地使用$ input_data = $ _POST extract()可能是 對你有用。

相關問題