我有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...">
答案 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"]))