2017-02-22 48 views
0

Как я могу обработать динамическую форму. Количество вариантов зависит от количества опций из базы данных. В зависимости от да/нет значение будет обновляться в базе данных, пользователь хочет проверить этот параметр. Вот мой кодИзвлечь данные из динамической формы в php

<form action="?userid=<?php echo $userid;?>&tankid=<?php echo $tankid;?>&action=update" method="POST"> 
    <table width="100%"> 
     <tr> 
      <th >Parameter name:</th> 
      <th >Do you want to test it?</th> 
     </tr> 
     <?php 

     while ($row = $records_param_info->fetch(PDO::FETCH_ASSOC)){ 
      $checked_yes = ""; 
      $checked_no = ""; 
      echo "<tr>"; 
      echo "<td>"; 
      echo $row['paramname']; 
      echo "</td><td>"; 
      if ($row['active'] == 1){ 
       $checked_yes = "checked"; 
       $checked_no = ""; 
      } else { 
       $checked_yes = ""; 
       $checked_no = "checked"; 
      } 
      echo '<label>Yes</label><input type="radio" name='.$row['parameterid'].' '.$checked_yes.' value="1">'; 
      echo '<label>No</label><input type="radio" name='.$row['parameterid'].' '.$checked_no.' value="0">'; 
      echo "<td></tr>"; 
     } 

     ?> 


    </table> 
    <br> 
    <center><input type="submit" name="Update" value ="Update"></center> 
    </form> 

Мой вопрос будет, как извлечь данные и обрабатывает его в Databse, так как «имя» будет всегда разный и число будет отличаться.

+0

У вас есть конкретный вопрос? Неясно, в чем проблема. – BizzyBob

+0

Если вы спрашиваете, как обрабатывать переменные $ _POST после отправки, вам нужно будет перебирать каждый ключ/значение в массиве $ _POST (проверяя ВСЕ), а затем обрабатывать необходимую магию в соответствии с вашими потребностями. – mickmackusa

+0

Мой вопрос будет в том, как получить данные и обработать их в базе данных, поскольку «имя» будет всегда отличаться, и число будет отличаться. –

ответ

1

Если у вас возникли проблемы, отличающих между вашими радиокнопками и другими полей формы, вы можете изменить имена своих радио-кнопки немного, чтобы получить их все в одном массив:

'<label>Yes</label><input type="radio" name=params[' . $row['parameterid'] . '] ' . $checked_yes . ' value="1">'; 

используя следующие фиктивные данные :

$paramsFromDB = Array(
    Array('parameterid' => 101, 'paramname' => 'param one', 'active' => 0), 
    Array('parameterid' => 202, 'paramname' => 'param two', 'active' => 1), 
    Array('parameterid' => 303, 'paramname' => 'param three', 'active' => 0), 
    Array('parameterid' => 404, 'paramname' => 'param four', 'active' => 1) 
); 

Ваш полученный HTML будет выглядеть следующим образом:

<table width="100%"> 
     <tr> 
      <th>Parameter name:</th> 
      <th>Do you want to test it?</th> 
     </tr> 
     <tr> 
      <td>param one</td> 
      <td> 
       <label>Yes</label><input type="radio" name=params[101] value="1"> 
       <label>No</label><input type="radio" name=params[101] checked value="0"> 
      <td> 
     </tr> 
     <tr> 
      <td>param two</td> 
      <td> 
       <label>Yes</label><input type="radio" name=params[202] checked value="1"> 
       <label>No</label><input type="radio" name=params[202] value="0"> 
      <td> 
     </tr> 
     <tr> 
      <td>param three</td> 
      <td> 
       <label>Yes</label><input type="radio" name=params[303] value="1"> 
       <label>No</label><input type="radio" name=params[303] checked value="0"> 
      <td> 
     </tr> 
     <tr> 
      <td>param four</td> 
      <td> 
       <label>Yes</label><input type="radio" name=params[404] checked value="1"> 
       <label>No</label><input type="radio" name=params[404] value="0"> 
      <td> 
     </tr> 
    </table> 

Ваши данные $_POST будет выглядеть следующим образом:

array(2) { 
    ["params"]=> 
    array(4) { 
    [101]=> 
    string(1) "0" 
    [202]=> 
    string(1) "1" 
    [303]=> 
    string(1) "0" 
    [404]=> 
    string(1) "1" 
    } 
    ["Update"]=> 
    string(6) "Update" 
} 

Так у вас есть данные в виде param[parameterid] = active. Поэтому просто обновить свою базу данных соответственно:

if (count($_POST['params']) > 0) { 

    $sql = $db->prepare('UPDATE `table_name` SET `active` = ? WHERE `parameterid` = ?'); 

    foreach ($_POST['params'] as $parameterid => $paramvalue) { 
     $sql->execute(Array($paramvalue, $parameterid)); 
    } 
}