insert multiple fields using foreach loop

61,656

Solution 1

You are doing a foreach on $_POST rather than on the name/age arrays. You should be doing foreach on name or age array like this:

if (
   !empty($_POST['name']) && !empty($_POST['age']) &&
   is_array($_POST['name']) && is_array($_POST['age']) &&
   count($_POST['name']) === count($_POST['age'])
) {
    $name_array = $_POST['name'];
    $age_array = $_POST['age'];
    for ($i = 0; $i < count($name_array); $i++) {

        $name = mysql_real_escape_string($name_array[$i]);
        $age = mysql_real_escape_string($age_array[$i]);

        mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
    } 
}

I would also note that you are currently susceptible to SQL injection so I added the step of escaping your strings for name/age.

I would also highly suggest simply making a single bulk insert into the DB instead of an insert of each record individually (I will leave that up to you to implement). This approach is almost always preferable from a performance standpoint.

Finally, you REALLY should not be using mysql_* functions as they are deprecated. Consider changing to mysqli or PDO.

Solution 2

if (isset($_POST['submit'])) {

$i = 0;
foreach ($_POST as $val) {
    $name = $_POST['name'][$i];
    $age = $_POST['age'][$i];

    mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
    $i++;
  } 
}

This will solve your problem !

Solution 3

foreach($_POST['firstname'] as $key=>$value) {
    $firstname = $_POST['firstname'][$key];
    $lastname = $_POST['tipo'][$key];
    echo "Parte: $lastname";
    echo "<br>"; 
    echo "Tipo: $firstname";
    echo "<br>";
}
Share:
61,656
Kim Andersson
Author by

Kim Andersson

Updated on January 23, 2020

Comments

  • Kim Andersson
    Kim Andersson over 4 years

    I have a problem when I want to insert multiple fields into one table.

    Here's my form:

    <h1>Add user</h1>
     <form method="post" action="index.php">
    
     <table>
        <thead>
            <th>Name</th>
            <th>Age</th>
        </thead>
    
        <tr>
            <td><input name="name[]" type="text" /></td>
            <td><input name="age[]" type="text" /></td>
        </tr>
    
        <tr>
            <td><input name="name[]" type="text" /></td>
            <td><input name="age[]" type="text" /></td>
        </tr>
    
        <tr>
            <td><input name="name[]" type="text" /></td>
            <td><input name="age[]" type="text" /></td>
        </tr>
    </table>
    
     <input type="submit" name="submit" value="Submit" />
     </form>
    

    And here's the submit code:

    if (isset($_POST['submit'])) {
    
        foreach ($_POST as $val) {
            $name = $val['name'];
            $age = $val['age'];
    
            mysql_query("INSERT INTO users (name, age) VALUES ('$name', '$age')");
        } 
    }
    

    The query inserts into the database, but not the values that I've entered.

    Can someone please help me?

  • yaqoob
    yaqoob about 9 years
    Thanks. but i'm having issues with the solution.
  • Goose
    Goose over 6 years
    You should add explanation for your answer to help OP and other readers understand this solution. Code only answers are discouraged.