How I can process a dynamic form. Number of options will vary by the number of options from the database. Based on yes/no value will be updated in the database is user want to test that parameter. Here is my code
<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>
My question will be how to retrieve the data and processes it to the databse since the "name" will be always different and the number will be different.
If you are having problems distinguishing between your radio buttons and other form fields, you could modify the names of your radio buttons slightly to get them all into a single array:
'<label>Yes</label><input type="radio" name=params[' . $row['parameterid'] . '] ' . $checked_yes . ' value="1">';
using the following dummy data:
$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)
);
Your resulting html would look like this:
<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>
your $_POST
data would look like this:
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"
}
So you have the data in the form param[parameterid] = active
. So it's a simple matter to update your database accordingly:
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));
}
}