Reputation: 31
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.
Upvotes: 0
Views: 71
Reputation: 14740
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));
}
}
Upvotes: 1