在php中从动态表单中检索数据

时间:2017-02-22 01:08:04

标签: php forms dynamic radio-button

我如何处理动态表单。选项数量因数据库中的选项数量而异。基于是/否的值将在数据库中更新,用户希望测试该参数。这是我的代码

<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>

我的问题是如何检索数据并将其处理到数据库,因为&#34; name&#34;将永远不同,数量将不同。

1 个答案:

答案 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));
    }
}
相关问题