2014-01-20 93 views
0

我的問題是,我有我在其中包含5個字段,其總是需要(姓名,城市,ADRES,門牌號碼和電話號碼)只有1個輸入字段是必須在我的形式

HTML製作表單然後我有11個字段,只需要1個字段。

我的問題只針對那11個字段。

所以基本上當用戶提交表單時(前5個填寫正確)需要給出某種錯誤。

但是,當這11個輸入字段中的一個或多個輸入字段被填充時,它需要經過。

我試過無數不同的東西。我只是讀了一些關於將這11個輸入字段放在class =「」中,並且創建了某種自定義驗證器。 我不知道這是否是正確的解決方案(如果它是一個自定義驗證程序的樣子)

我沒有經驗的PHP或JQ或JS,這就是爲什麼這對我來說這是一個很大的問題。

我希望我的問題是正確的,如果不讓我知道!

+0

「所以基本上當用戶提交表單時(前5個填寫**正確**),它需要給出某種**錯誤**。」 - 爲什麼? –

+0

@AmalMurali他說,當前5個填寫正確,但其餘11個填補不足時,錯誤需要發生。 – sjagr

+0

嚴格的前5個字段,然後啓動計數器的11個字段的驗證,如果計數> = 1,則允許... :) – user1844933

回答

4

如果我正確理解你,你有11個字段和至少有一個必須填寫。

這將需要一些自定義驗證,是的。

首先,我建議有類似這樣的領域:

<input type="text" name="options[]" /> 

名稱可以是任何你想要的,但重要的是這些方括號。他們將輸入定義爲一個數組,所以在11個輸入中你將有11個項目。如果你需要區分它們,請嘗試:

<input type="text" name="options[something]" /> 

現在,服務器端驗證。這是最重要的部分 - JS驗證是次要的。

在PHP中驗證這一領域,這樣做:

$completedFields = array_filter($_POST['options']); 
if(!$completedFields) die("You did not fill in any of the 11 inputs!"); 

簡單!

最後,一些JS驗證。想必你有某種提交處理程序,但如果沒有你的形式是這樣的:

<form action="..." method="post" onSubmit="return validationFunction(this);"> 

現在你可以JS是這樣的:

function validationFunction(form) { 
    // if you're using name="options[]": 
    var options = form['options[]']; 

    // if you're using named options like options[something] 
    var options = (function() { 
     var elms = form.elements, l = elms.length, i, ret = []; 
     for(i=0; i<l; i++) { 
      if(elms[i].name.match(/^options\[.*\]$/)) ret.push(elms[i]); 
     } 
     return elms; 
    })(); 

    // then do this: 
    var l = options.length, i; 
    for(i=0; i<l; i++) { 
     if(options[i].value != "") return true; 
    } 
    alert("Please fill out at least one of the options."); 
    return false; 
} 

希望這有助於!

+0

爲什麼我們將輸入用作數組? –

+2

@CodeLover因爲這使得它更容易驗證,並將它們更穩定地定義爲一組輸入 –

+0

我完全按照你所說的做了,但是現在每當我加載我的頁面時,它給我2個錯誤,說'未定義的索引:選項'和'array_filter()期望參數1是數組,在C:\ ....中給出'null'。' –

1

對於服務器端驗證,使用快速計數檢查

$completedFields = 0; 
if (!empty($_POST['fieldName1'])) $completedFields++; 
if (!empty($_POST['fieldName2'])) $completedFields++; 
// and so on... 

if ($completedFields > 0) { 
    // validated 
} else { 
    // error 
} 

你也可以用類似的方式使用POST陣列取決於字段如何常規命名,然後foreach通過每個檢查

0

HTML:

Field 1 <input type="text" name="extra_field[]" value="" /><br /> 
Field 2 <input type="text" name="extra_field[]" value="" /><br /> 
Field 3 <input type="text" name="extra_field[]" value="" /><br /> 
... 
Field 11 <input type="text" name="extra_field[]" value="" /><br /> 

然後在PHP中:

<?php 

$valid = FALSE; 
$extra_fields = isset($_POST['extra_field']) ? $_POST['extra_field'] : array(); 
foreach ($extra_fields as $field) { 
    if (!empty($field)) { 
     $valid = TRUE; 
     break; 
    } 
} 

if ($valid == FALSE) { 
    echo 'Ooops, you must complete at least one of the 11 fields'; 
} 

?> 
+0

看起來你有和我一樣的想法,但看到我的答案爲了更有效的PHP驗證;) –

+0

對不起,沒有看到你的答案,是的你使用array_filter更好 – MrCarrot

0
if (!empty($_POST['field1'])OR !empty($_POST['field2']) OR !empty($_POST['field3'])) 
    { 
    // SUBMIT FORM 
    } else { 
    // display error message 
    } 

這是3場,你可以把它擴展到11希望這有助於。

相關問題