Reputation: 823
I have this sample code that generates dynamic fields.
My problem is I don't know how to insert the data to the database.
I tried implode but the result is not the format I want.
implode (',', $name);
implode (',', $sweets);
implode (',', $fruits);
implode (',', $drinks);
This is my columns (id, name, sweet, fruits, drinks)
so if I generate 3 rows it should be inserted like this
ID | NAME | SWEETS | FRUITS | DRINKS
1 | mark | cake | apple | 1
2 | jenny |candy | mango | 2
3 | randy | choco | ORANGE | 3
Actually I don't know if this is possible. Thanks
FIDDLE
https://jsfiddle.net/jqj1h4vb/2/
Upvotes: 0
Views: 73
Reputation: 4738
This code should get you rolling.
A few things to note before testing out the code:
1. I noticed some plural inconsistencies in your code which may or may not have to adjusted in regard to the form field names and the database column names. Hopefully I guessed correctly and you can just copy-paste my code to get it to work.
2. Also take note that my code expects the form data to be POSTed. If you're submitting the form data as a query string, it may or may not get chopped off due to query string limits in various browsers and depending on how much data the user submits at once.
3. Also my code assumes your database's primary field auto increases, and that you're using MySQL or a SQL-based database, thus there's no need to specify an ID
when inserting.
4. I also hope that you'll add some sort of security to the code, such as flood control, or a captcha or invisible captcha etc to prevent any one user from flooding your database until it hits its limit.
Here's a PDO solution:
<?php
function getPostArray($v)
{
if(!isset($_POST[$v]))return [];
if(!is_array($_POST[$v]))return [$_POST[$v]];
return $_POST[$v];
}
$n = getPostArray('name');
$s = getPostArray('sweet');
$f = getPostArray('fruit');
$d = getPostArray('drinks');
$insertQuery = [];
$insertData = [];
foreach($n as $k=>$v)
{
$insertData[] = array_key_exists($k, $n) ? $n[$k] : '';
$insertData[] = array_key_exists($k, $s) ? $s[$k] : '';
$insertData[] = array_key_exists($k, $f) ? $f[$k] : '';
$insertData[] = array_key_exists($k, $d) ? $d[$k] : '';
$insertQuery[] = '(?, ?, ?, ?)';
}
// assuming your table is named `MyTable`
$sql = 'INSERT INTO `MyTable` (name, sweets, fruits, drinks) VALUES ';
if(!empty($insertQuery))
{
$sql .= implode(', ', $insertQuery);
// assuming you have a valid PDO $db connection open
if(isset($db))
{
$stmt = $db->prepare($sql);
$stmt->execute($insertData);
// otherwise you just wanna see the query
} else {
printf("<pre>$sql\n%s</pre>",print_r($insertData,true));
}
}
Upvotes: 1