2013-08-25 72 views
0

我有具有由如下的函数生成20下拉字段一个html形式....验证在PHP为下拉菜单

<?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的值,则打印在带有名称subject_1的html输出上的下拉字段。如果不是,它将不会打印。

相同的代码我有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"]; 

我不希望用户提交空的下拉列表,所以我wrinting审定

if(empty(subject_1)) 
{ 
say error 
} 

if(empty(subject_2)) 
{ 
say error 
} 

我wrting这所有科目20次。

问题出在用户在论坛中只有三个主题,如subject_1和subject_2和subject_3。它会给所有剩余的17个主题带来错误。

我该如何阅读只验证表单上可用的主题?

请让我知道,如果它不明确。

+2

请张贴什么样的HTML表单看起来像PHP使得它后(从页面源)为例。这是在表单元素'name ='属性中使用PHP的'[]'数组语法重新构建的。 –

+0

我已经发布了表单代码。请让我知道你想要什么?我怎么才能得到它.. – user2642907

+0

您需要检查表单元素是否已发布,但值为空 - 'isset($ _ POST [“subject _#”])''''subject_1 =='''。所以你的'if'可以是 - 'if(isset($ _ POST [“subject_1”] && empty($ subject_1)){error message}' – Sean

回答

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";} 
} 
+0

这将再次给予20个值..我想验证只是从形式 – user2642907

+0

张贴的值是直接我也验证,但没有结果 – user2642907

+0

你的意思是你需要找到只有空白的值吗?像subject_1被张贴但是空白 - >报告,subject_2不是从表单中过帐,所以忽略? – bansi

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验证的加...