我的表单中只需要1个输入字段

时间:2014-01-20 14:52:03

标签: php html forms

我的问题是我有一个用HTML制作的表格,其中包含5个始终需要的字段(姓名,城市,地址,门牌号码和电话号码)

然后我有11个字段,只需要1个字段。

我的问题仅针对这11个领域。

所以基本上当用户提交表单时(前5个正确填写),它需要提供某种错误。

但是当填写11个输入字段中的1个或多个时,需要通过它。

我尝试过无数不同的事情。我刚刚阅读了一些关于将这11个输入字段放在class =“”中并制作某种自定义验证器的内容。 我不知道这是否是正确的解决方案(如果它是自定义验证器的样子)

我对php或JQ或JS没有经验,这就是为什么这对我来说是个大问题。

我希望我的问题能够正确制定,如果不让我知道的话!

4 个答案:

答案 0 :(得分: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;
}

希望这有帮助!

答案 1 :(得分:1)

对于服务器端验证,请使用快速计数检查

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

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

您还可以使用POST数组,具体取决于字段的常规命名方式,然后以类似方式通过每个检查foreach

答案 2 :(得分: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';
}

?>

答案 3 :(得分:0)

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

这是3个字段,你可以将它扩展到11.希望这会有所帮助。