2014-01-20 44 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希望这有助于。

相关问题