我如何处理动态表单。选项数量因数据库中的选项数量而异。基于是/否的值将在数据库中更新,用户希望测试该参数。这是我的代码
<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;将永远不同,数量将不同。
答案 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));
}
}