2012-02-08 74 views
1

我想遍歷提交表​​單中的所有元素,爲每個元素分配自己的變量,然後檢查它們是否是必需的。如果他們需要,他們將被檢查,如果他們是空的。到目前爲止,我的形式如下:通過表單元素循環並檢查是否需要

<form id="newitem" action="addnew.php" method="POST"> 
     <label for="title">Title: </label> 
     <input type="text" name="title" id="title" required="required" /><br /> 
     <label for="description">Description: </label> 
     <textarea name="description" id="website" cols="40" rows="5" ></textarea><br /> 
     <input type="hidden" name="formsubmit" value="true" /><!-- Option to know we've sumbited the form --> 
     <input type="submit" value="Submit" id="submit" /> 
</form> 

我那麼有它驗證使用此:

if (isset($_POST['formsubmit'])) { 
    // form has been submitted 
    $errors = Array(); 
    foreach($_POST as $key => $value) { 
     $$key = $value; 
     if (!$value) { 
      array_push($errors, 'Please enter a value for ' . $key); 
     } 
    } 
    if (count($errors) == 0) { 
     echo 'Form validated'; 
    } else { 
     showErrors($errors); 
    } 
} 

如果元素有一個值這個目前檢查。但是,我希望使用HTML required="required"來檢查該字段是否必需。
此外,雖然我覺得我明白這是如何工作的,但我不知道我是否確實如此。我認爲$$key = $value基本上意味着創建一個值爲$key的變量並將其值設爲$value。所以,$key是元素的名稱,而$value是它的值。但是,我真的沒有得到foreach($_POST as $key => $value) {。我知道它會循環所有的$_POST,但除此之外我不知道。
感謝您的幫助!

+1

PHP不知道'required'屬性。它只接收表單輸入'name'和相應的'value'。您可以將整個HTML標記保存在一個字符串中,並使用解析庫解析出它們以獲取這些屬性,但這似乎是不必要的複雜。 – 2012-02-08 12:02:51

回答

2

如果認爲你正在尋找類似

$errors = Array(); 
foreach($_POST as $key => $value) { 
    if (empty($value)) { 
     $errors[] = 'Please enter a value for ' . $key; 
    } 
} 

foreach循環在一個關聯數組,併爲您的陣列中的每個「元素」的關鍵和價值。在這種情況下,它會爲您提供$ key中的字段名稱和$ value中的字段值。

查看http://php.net/manual/en/control-structures.foreach.php瞭解更多信息。然而,如果一個字段根本沒有被提交(即不是從客戶端發送到後端),$ _FORM將不包含該字段在所有的。因此,要檢查是否填寫了一些必填字段,您還需要在服務器側也有該列表。然後,該代碼會是這樣的:

$errors = Array(); 
$requiredfields = Array("somefield" => "...", "secondfield" => "..."); 
foreach($_POST as $key => $value) { 
    unset($requiredfields[$key]); // The encountered field $key is present 
    if (empty($value)) { 
     $errors[] = 'Please enter a value for ' . $key; 
    } 
} 
// Loop over all the required fields that are not found 
foreach($requiredfields as $key => $val) { 
    $errors[] = 'Please enter a value for ' . $key; 
} 
0

我想你在這裏做一個小的混亂......該服務器只接收名稱和<input>領域的價值。 PHP根據<form>方法自動創建關聯數組($ _POST和$ _GET)。所以,你可以不知道哪個領域有required屬性,除非你插入一些業務邏輯

if (isset($_POST['formsubmit'])) { 
    // form has been submitted 
    $errors = Array(); 
    foreach($_POST as $key => $value) { 
     $$key = $value; 
     //check that title has a value 
     if ($key === "title" && !$value) { 
      array_push($errors, 'Please enter a value for ' . $key); 
     } 
    } 
    if (count($errors) == 0) { 
     echo 'Form validated'; 
    } else { 
     showErrors($errors); 
    } 
} 
0

常見的方式做,這是實現雙重驗證:客戶端和服務器端。客戶端驗證將使用JS來驗證更基礎級別的字段,並且因爲它可能被愚弄(或JS禁用),您還需要實現服務器端驗證。

使用jQuery很容易檢查是否需要字段。 Willem Mulder指出了一些基本但有效的檢查空值的有效方法。

相關問題