The Naga Tanker
The Naga Tanker

Reputation: 441

Php multiple forms, iteration on a specific form

I have page a with 2 forms

the first part of the form

<form id="A" role="form" enctype="multipart/form-data" method="post">
<input class="form-control" placeholder="Name of the Company" name="ven_name" type="text" autofocus >
<input class="form-control" placeholder="Address" name="address" type="text" autofocus >
<input class="form-control" placeholder="City" name="city" type="text" autofocus >
</form>


<form id="B" role="form" enctype="multipart/form-data" method="post">
<input type="text" name="usr_f_name[]" placeholder="First Name" />
<input type="text" name="usr_l_name[]" placeholder="Last Name" />
<input type="text" name="usr_mobile[]" placeholder="Mobile Number" />
<input type="text" name="usr_email[]" placeholder="Email" />
<input type="password" name="usr_password_1[]" placeholder="Password"/>    
</form>

both of them will be saved on a Database. Form A will be saved on Table A and Form B will be save on Table B. For Form B i'm using a Jquery so User can add multiple Users at a time ( maximum 3 user in one go )

here is the Php for Form B

    $usr_array = array_keys($_POST['']);
    foreach ($id_array as $id) {
        $usr_f_name =  mysqli_real_escape_string ($_POST['usr_f_name'][$id]);
        $usr_l_name =  mysqli_real_escape_string ($_POST['usr_l_name'][$id]);
        $usr_mobile =  mysqli_real_escape_string ($_POST['usr_mobile'][$id]);
        $usr_email =  mysqli_real_escape_string ($_POST['usr_email'][$id]);
        $usr_password_1 =  md5 ($_POST['usr_password_1'][$id]);



$sql = "INSERT INTO table_b SET f_name = '$usr_f_name', l_name = '$usr_l_name', mobile  ='$usr_mobile',username='$usr_email', email='$usr_email', password='$usr_password_1'";
        }
        if(mysqli_query($databaseLink, $sql)){
            echo "Records added successfully.";
        } else{
            echo "ERROR: Could not able to execute $sql. " . mysqli_error($databaseLink);
        }
    }

how do I tell php which form to iterate on?

Upvotes: 0

Views: 140

Answers (2)

Justinas
Justinas

Reputation: 43441

Change naming of your fields:

<div class="form-B"
  <input class="form-control" placeholder="Name of the Company" name="formA[ven_name]" type="text" autofocus >
  <input class="form-control" placeholder="Address" name="formA[address]" type="text" autofocus >
  <input class="form-control" placeholder="City" name="formA[city]" type="text" autofocus >
</div>


<div class="form-B">
  <input type="text" name="formB[0][usr_f_name]" placeholder="First Name" />
  <input type="text" name="formB[0][usr_l_name]" placeholder="Last Name" />
  <input type="text" name="formB[0][usr_mobile]" placeholder="Mobile Number" />
  <input type="text" name="formB[0][usr_email]" placeholder="Email" />
  <input type="password" name="formB[0][usr_password_1]" placeholder="Password"/>    
</div>

That way your $_POST will look like this:

[
    'formA' => [
        'ven_name' => '',
        'address' => '',
        'city' => '',
    ],
    'formB' => [
        [
            'usr_f_name' => '',
            /* ... */
        ],
        [
            'usr_f_name' => '',
            /* ... */
        ]
        /*...*/
    ]
]

And you can do:

$query = 'INSERT INTO formB (usr_f_name, ...) VALUES ';
$inserts = [];
$params = [];

foreach ($formData['formB'] as $fields) {
    /* ... */
}

Upvotes: 1

user8034901
user8034901

Reputation:

Add a hidden input field to both forms.

<form role="form" enctype="multipart/form-data" method="post">
<input type="hidden" name="form" value="A" />
...
</form>
<form role="form" enctype="multipart/form-data" method="post">
<input type="hidden" name="form" value="B" />
...
</form>

In your script you can check the field's value:

<?php
// ... sanitize ...
if ( $_POST['form'] == 'A' ) {
  // Form A has been submitted
} else if ( $_POST['form'] == 'B' ) {
  // Form B has been submitted
}

Upvotes: 2

Related Questions