按编号处理输入字段

时间:2014-01-11 21:44:11

标签: javascript php ajax jquery

我有10个输入字段,可供用户填写,并在点击“添加其他字段”时通过jQuery动态添加。它们的名字如下:

<input name="custom_0" type="text" placeholder="Fill this out...">
<input name="custom_1" type="text" placeholder="Fill this out...">
<input name="custom_2" type="text" placeholder="Fill this out...">
...
<input name="custom_9" type="text" placeholder="Fill this out...">

然后我使用jQuery Ajax序列化它们并将其发送到PHP进行验证:

$(document).on("submit", "form", function(event) {
    event.preventDefault();
    $.ajax({
        url: 'php/form_handler.php',
        type: 'POST',
        dataType: 'json',
        data: $(this).serialize(),
        success: function(data) {
            alert(data);
        }
    });
});

这是我现在拥有的PHP。它包含一个循环10次循环,如果没有设置字段则返回错误:

<?php

    $errors = array();

    for ($i = 0; $i < 10; $i++) {
        if(isset($_POST["custom_$i"])) {
            // input is set, continue verification code...
        } else {
            $errors["custom_$i"] = "ERROR!";
        }
    }

    // code to echo back errors

?>

我现在遇到的问题是,如果用户只填写了10个输入中的2个,那么输入3-10仍然会返回错误,即使这些输入从未设置或填写过。

例如,如果用户只填写了这些输入,然后提交了表单,则会将输入custom_2的错误返回给custom_9。为什么以及如何解决这个问题?

<input name="custom_0" type="text" placeholder="Fill this out...">
<input name="custom_1" type="text" placeholder="Fill this out...">

5 个答案:

答案 0 :(得分:4)

实际上,问题在于你将执行custom_ $ i检查的程度...因为输入的维度是动态的,你应该重新考虑代码并将POST数据作为数组发送并使用foreach迭代它

用于生成输入字段的模板应为

<input name="custom[0]" type="text" placeholder="Fill this out...">
<input name="custom[1]" type="text" placeholder="Fill this out...">

然后访问数据只需使用foreach或从0开始到数组的长度......但是foreach更好

foreach($_POST['custom'] as $stuff){}

您可以使用print_r($_POST);测试传入数据以查看基础数据结构

请注意,使用此方法无法获得 $ stuff 所属的索引,因此使用 array_keys($ stuff)可以将元素作为 $ _ POST ['custom'] [$ stuff] 并使用 $ errors [$ stuff]

访问您的错误数组

循环遍历数组的另一种方法是

foreach($_POST['custom'] as $key=>$value) 

并分别访问$ key和$ value,从而处理上述问题

https://stackoverflow.com/questions/183914/how-do-i-get-the-key-values-from-post

的参考资料

答案 1 :(得分:0)

这是因为您正在检查PHP中的所有可能输入(在本例中为10):

for ($i = 0; $i < 10; $i++)
    if(isset($_POST["custom_$i"])) {
...

你应该做的是传递你要检查的数字,而不是总数,然后只验证PHP代码上的数字。

答案 2 :(得分:0)

<?php

    $errors = array();

    for ($i = 0; $i < 10; $i++) {
        if(isset($_POST["custom_".$i])) {
            // input is set, continue verification code...
        } else {
            $errors["custom_".$i] = "ERROR!";
        }
    }

    // code to echo back errors

?>

答案 3 :(得分:0)

您的输入仍然会被设置,尽管它们没有值。

而不是:

if(isset($_POST["custom_$i"]))

这样做

if(isset($_POST["custom_$i"]) && $_POST["custom_$i"] != "")

干杯

答案 4 :(得分:0)

你最好像下面的代码一样编写你的php

<?php

foreach($_POST as $cus){

if(!empty($cus))[

// the input is not empty


} else {

//the input is empty
}



}

并设置您的输入是满还是空。

建议您在自己的代码中使用if(!empty($_POST["custom_$i"]))