我有一个html表单,它有20个下拉字段,由下面的函数生成....
<?php
$sub_1 = subject_show (subject_1, $scl_unique_id, $cls_sec_bat);
if ($sub_1)
{?>
<tr>
<td><?php echo $sub_1;?></td>
<td><select name="subject_1" id="subject_1" style="min-width:100px">
<?php
if(isset($subject_1)){?>
<option value="<?php echo $subject_1; ?>" selected="selected"><?php echo $subject_1; ?></option>
<?php }else{ ?>
<option value="<?php echo $sub_1;?>" disabled="disabled" selected="selected"><?php echo $sub_1;?></option>
<?php } ?>
<option value="<?php echo MAR_ABS;?>"><?php echo MAR_ABS;?></option>
<option value="<?php echo MAR_NA;?>"><?php echo MAR_NA;?></option>
<?php
for ($i=0; $i<=100; $i++)
{
echo '<option value="'.$i.'">'.$i.'</option>';
}
?>
</select></td>
</tr>
<?php
}
?>
在代码中,如果函数的值为$ sub_1,则下拉字段打印在html输出上,名称为subject_1。如果没有,它将不会打印。
我有20次相同的代码。如果函数在$ sub_2或$ sub_3或$ sub_4中的值为$ sub_20,则该字段的名称为subject_2或subject_3或subject_4,直到subject_20。
可以打印任何下拉字段,具体取决于用户输入和功能输出。
当阅读时间,我正在阅读所有20个名字,如
if (isset($_POST['save_exit']))
{
$roll_number = strtoupper(trim(implode(' ', preg_split('/\s+/', $_POST["roll_number"]))));
$subject_1 = $_POST["subject_1"];
$subject_2 = $_POST["subject_2"];
$subject_3 = $_POST["subject_3"];
$subject_4 = $_POST["subject_4"];
$subject_5 = $_POST["subject_5"];
$subject_6 = $_POST["subject_6"];
$subject_7 = $_POST["subject_7"];
$subject_8 = $_POST["subject_8"];
$subject_9 = $_POST["subject_9"];
$subject_10 = $_POST["subject_10"];
$subject_11 = $_POST["subject_11"];
$subject_12 = $_POST["subject_12"];
$subject_13 = $_POST["subject_13"];
$subject_14 = $_POST["subject_14"];
$subject_15 = $_POST["subject_15"];
$subject_16 = $_POST["subject_16"];
$subject_17 = $_POST["subject_17"];
$subject_18 = $_POST["subject_18"];
$subject_19 = $_POST["subject_19"];
$subject_20 = $_POST["subject_20"];
我不希望用户提交空的下拉列表,因此我将验证视为
if(empty(subject_1))
{
say error
}
if(empty(subject_2))
{
say error
}
我为所有科目做了20次。
问题是当用户在论坛中只有三个名称为subject_1,subject_2和subject_3的主题时。它会给剩下的17个科目带来错误。
我如何阅读只验证表格上可用的主题?
如果不清楚,请告诉我。
答案 0 :(得分:0)
你可以用更少的代码来完成,如下面的
for ($i=1;$i<=20;$i++){
$var = "subject_$i";
if (isset($$var) && empty($$var)){echo "error";}
}
如果您不需要所有$subject_
个变量,则可以直接验证$_POST
for ($i=1;$i<=20;$i++){
if (isset($_POST["subject_$i"]) && empty($_POST["subject_$i"])){echo "error";}
}
答案 1 :(得分:0)
尝试将主题作为数组发布到表单处理程序。
然后,您可以轻松查看:
if (count($subject) < $_POST['numberNeeded']) {
// say error
}
在$subject[0]
中,您会找到第一个主题,$subject[1]
将包含第二个主题,等等。
以您的形式:
<select name="subject[]" id="subject_1" style="min-width:100px">
<!-- Do everything you need -->
</select>
<select name="subject[]" id="subject_2" ...
在下面,添加以下字段(使用php计算)。在这个例子中,我们假设您需要5个科目。
<input type="hidden" name="numberNeeded" value="5" />
作为补充说明:您可能还想将JavaScript验证视为一个加号......