2013-08-25 5 views
0

У меня есть форма HTML, который имеет 20 раскрывающееся поле, генерируемое функцией, как показано ниже ....проверки в 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 то выпадающее поле, напечатанное на выходе 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"]; 

Я не хочу пользователю представить пустой выпадающий список, так что я 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 делает это (из исходного кода страницы) , Это крик для рефакторинга с использованием синтаксиса '' [] 'массива PHP в атрибутах' name = 'элемента формы. –

+0

Я правильно разместил код формы. Пожалуйста, дайте мне знать, что вы хотите ??? как я могу это получить .. – user2642907

+0

Вам нужно проверить, был ли элемент формы опубликован, но значение пустое - 'isset ($ _ POST [" subject _ # "])'/'$ subject_1 == '''. Таким образом, ваш 'if' может быть -' if (isset ($ _ POST ["subject_1"] && empty ($ subject_1)) {сообщение об ошибке} ' – 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 как плюс ...

Смежные вопросы