Eugene Petrus
Eugene Petrus

Reputation: 31

Retrieve data from dynamic form in php

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

Answers (1)

BizzyBob
BizzyBob

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

Related Questions