2010-10-30 58 views
0

什麼是通過PHP截取多個字段的最佳方式?目前,我有一個的login.php文件,該文件是非常簡單的:PHP表單處理多個字段

<form method="POST" action="auth.php"> 
    Code:<br /> 
    <input type="text" name="code" /> 
<input type="submit" id="submit" value="Submit" /> 
<br /> 
    Pass:<br /> 
    <input type="text" name="pass" /> 
    <input type="submit" id="submit" value="Submit" /> 
    </form> 

然後在auth.php我通過POST獲取的價值:

 $value = $_POST['code']; 

這樣做的問題是,我會相當數量的字段,每個字段都會有一個提交按鈕。那麼我會需要一個條件,每個字段的名稱avaible,我不想。處理這個問題的最佳方法是什麼?

謝謝

+0

究竟是什麼問題?正如bemace指出的那樣,你不需要很多提交按鈕,而且真的,我無法得到問題所在...... – 2010-10-30 23:14:32

回答

0

有幾種方法可以簡化這個問題。 這裏有一個辦法:

$fields = array('field1','field2','field3','field4','field5'); // Add all your field names to an array 
$data = array(); 
foreach ($fields as $field) { 
    if (isset($_POST[$field])) { 
     $data[$field] = $_POST[$field]; 
     // If you wanted it assigned to a local variable instead, 
     // you could do it like this, although this pattern is 
     // generally frowned upon: 
     ${$field} = $_POST[$field]; 
    } 
} 

爲局部變量分配給它的危險之處在於它可以覆蓋已經存在的變量。它可能會覆蓋對應用程序其餘部分至關重要的事情。但是,由於字段名稱是在數組中明確定義的,因此至少要保持對此的控制權。

你肯定不想遍歷$ _POST數組並將每個數組鍵都分配給一個局部變量 - 這樣做會讓你爲黑客敞開大門。

1

只需使用一個提交按鈕。沒有理由在這裏有一個以上的人。

如果您有多個相關領域,你可以使用數組命名:

Primary email: <input type="text" name="email[]" > 
Additional email: <input type="text" name="email[]"> 

,並從PHP訪問使用

$emails = $_REQUEST['email']; 

但是,你不應該使用數組像這樣無關的參數只是因爲你懶得使用多個字段名稱。如果你這樣做,你只是寫了糟糕的,不可維護的代碼。

+0

這無法解決我的問題。我仍然需要爲每個領域提供不同的名稱。然後,auth.php文件中的每個字段的條件不同。 – phpdude 2010-10-30 23:12:26

+0

@phpdude - 編輯。但是,您可能只需要克服它並使用多個字段名稱。 – 2010-10-30 23:18:51

0

您對HTML有不好的問題。 在HTML中,您不需要多個提交按鈕。

提交不提交字段,但整個表格。 你甚至不需要需要它,因爲如果你在文本框上按回車鍵,大多數用戶代理將提交表單。

無論如何,你的領域將有一個屬性,表格中是唯一的,並應具有ID文檔中特有的屬性。

發送它們時,所有數據都可以作爲數組在PHP中訪問。 超級全球$ _POST您的情況,或$ _GET如果使用該方法提交它。在那裏,你做你的魔力。