【问题标题】:Retrieve data from dynamic form in php从php中的动态表单中检索数据
【发布时间】:2018-05-23 09:30:32
【问题描述】:

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

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

我的问题是如何检索数据并将其处理到数据库中,因为“名称”总是不同的,数字也会不同。

【问题讨论】:

  • 您有什么具体问题吗?目前尚不清楚您的问题是什么。
  • 如果您在提交后询问如何处理 $_POST 变量,您将需要遍历 $_POST 数组中的每个键/值(验证所有内容),然后根据您的需要。
  • 我的问题是如何检索数据并将其处理到数据库,因为“名称”总是不同的,数字也会不同。
  • 如果parameterid 有无限的可能性/出现,您需要将它们存储在单独的表中并将每一行与用户ID 和tankid 相关联。这是为了遵守第一范式 (1NF) 而不是尝试使用分隔符将所有键值粉碎到原始表上的单个字段中。

标签: php forms dynamic radio-button


【解决方案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));
    }
}

【讨论】:

    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多