3

I want to add multiple row in a table by a form.

I know how to a make only one data array but in case of all name array, all detail array, all contact array I can't do this.

I also read here and google many article but I failed to make any result.

So please help me to create it?

So my from is:

<form action="" method="POST">
Name:    <input type="text" name="name[]" value="">
Detail:  <input type="text" name="detail[]" value="">
Address: <input type="text" name="add[]" value="">
<br />
Name:    <input type="text" name="name[]" value="">
Detail:  <input type="text" name="detail[]" value="">
Address: <input type="text" name="add[]" value="">
<br />
Name:    <input type="text" name="name[]" value="">
Detail:  <input type="text" name="detail[]" value="">
Address: <input type="text" name="add[]" value="">
<input type="submit" name="submit" id="submit" value="Submit">

And my php for insert at sql

include("../db.php");
global $dbh;
if(isset($_POST['submit'])){
$data = array(); // now how to do all single post array?
$name = mysqli_real_escape_string($_POST['name']);
$detail = mysqli_real_escape_string($_POST['detail']);
$add = mysqli_real_escape_string($_POST['add']);

$result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','$name','$detail','$add')");

4 Answers 4

0

Of course first off you need to loop them, you can use foreach. Then you can use the key inside the foreach to access the other lined up indices on the form:

Rough example:

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

    foreach($_POST['name'] as $k => $name) {
        $name = mysqli_real_escape_string($dbh, $name);
        $detail = mysqli_real_escape_string($dbh, $_POST['detail'][$k]);
        $add = mysqli_real_escape_string($dbh, $_POST['add'][$k]);

        // continue insertion
    }
}

Or with using prepared statements:

if(isset($_POST['submit'])) {
    foreach($_POST['name'] as $k => $name) {
        $insert = $db->prepare('INSERT INTO varify (id, name, detail, add) VALUES('', ?, ?, ?)');
        $insert->bind_value('sss', $name, $_POST['detail'][$k], $_POST['add'][$k]);
        $insert->execute();
    }
}

Another alternative would be to create the grouping structure inside your html markup form.

Use the keys inside the name grouping to group them. So the markup would look something like this:

<form action="" method="POST">
Name:    <input type="text" name="input[0][name]" value="">
Detail:  <input type="text" name="input[0][detail]" value="">
Address: <input type="text" name="input[0][add]" value="">
<br />
Name:    <input type="text" name="input[1][name]" value="">
Detail:  <input type="text" name="input[1][detail]" value="">
Address: <input type="text" name="input[1][add]" value="">
<br />
Name:    <input type="text" name="input[2][name]" value="">
Detail:  <input type="text" name="input[2][detail]" value="">
Address: <input type="text" name="input[2][add]" value="">
<br />
<input type="submit" name="submit" id="submit" value="Submit">

When you handle it in PHP, now they are grouped by row and can be accessed like this:

<?php

if(isset($_POST['submit'])) {
    $input = $_POST['input'];

    foreach($input as $values) {
        if(!empty($values['name']) && !empty($values['detail']) && !empty($values['add'])) {
            $insert = $db->prepare('INSERT INTO varify (id, name, detail, add) VALUES('', ?, ?, ?)');
            $insert->bind_value('sss', $values['name'], $values['detail'], $values['add']);
            $insert->execute();
        }   
    }
}
Sign up to request clarification or add additional context in comments.

4 Comments

Ok sir, If I fill 2 field like (name, detail, add) added first 2 inputs and remain last one's blank, It's also add a blank row in sql. How to prevent it?
@koc which PHP code snippet inside this answer are you referring to? so that i could also add that inside this answer
Sorry, This is my additional question. Can u give me a reference to solved it. Thank u sir.
@koc i revised it a little bit, the last snippet which uses the grouped row input, so that it'll have to deal with an empty set
0

use like this

   <?
if(isset($_POST['submit'])){
        $1=0;
        foreach($_POST['name'] as $key=>$inp)
        {
        $name = mysqli_real_escape_string($_POST['name'][$i]);
        $detail = mysqli_real_escape_string($_POST['detail'][$i]);
        $add = mysqli_real_escape_string($_POST['add'][$i]);
        $result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','".$name."','".$detail."','".$add."')");

        }
        $1++;
}
        ?>

Comments

0

Replace your code with this:

include("../db.php");
global $dbh;
if(isset($_POST['submit'])){
   $data = array(); // now how to do all single post array?
   $names = $_POST['name'];
   $details = $_POST['detail'];
   $adds    = $_POST['add'];

   for($i = 0; $i < count($names); $i++)

      $curr_name = mysqli_real_escape_string($names[$i]);
      $curr_detail = mysqli_real_escape_string($details[$i]);
      $curr_add = mysqli_real_escape_string($adds[$i]);

      $result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','$curr_name','$curr_detail','$curr_add')");
   }

}

If your id field is an auto-increment field, I suggest you don't manually insert the id, especially as you are passing an empty string. Instead, replace the insert code with this:

$result=mysqli_query($dbh,"INSERT INTO varify (name,detail,add) VALUES('$curr_name','$curr_detail','$curr_add')");

Comments

0

make an array using foreach loop

$data = '(';
foreach($_POST['name'] as $key => $name){ //here use a mandatory field as foreach paremeter
   $data .= "'".mysqli_real_escape_string($name)."'", "'".mysqli_real_escape_string($_POST['detail'][$key])."'", "'".mysqli_real_escape_string($_POST['add'][$key])."'";
   $data .= '),';
}
$data = rtirm($data, ',');
$result=mysqli_query($dbh,"INSERT INTO varify (name, detail, add) VALUES". $data);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.