我有这个生成动态字段的示例代码。
我的问题是我不知道如何将数据插入数据库。
我尝试了内爆,但结果不是我想要的格式。
implode (',', $name);
implode (',', $sweets);
implode (',', $fruits);
implode (',', $drinks);
这是我的专栏(id,name,sweet,fruits,drinks)
所以,如果我生成3行,则应该像这样插入
ID | NAME | SWEETS | FRUITS | DRINKS
1 | mark | cake | apple | 1
2 | jenny |candy | mango | 2
3 | randy | choco | ORANGE | 3
其实我不知道这是否可行。 谢谢
FIDDLE
答案 0 :(得分:1)
这段代码应该让你滚动
在测试代码之前需要注意几点:
的 1 即可。我注意到您的代码中存在一些复杂的不一致,这些不一致可能会或可能不会针对表单字段名称和数据库列名称进行调整。希望我猜对了,你可以复制粘贴我的代码让它工作
的 2 即可。另请注意,我的代码期望表单数据被POST。如果您将表单数据作为查询字符串提交,则可能会或可能不会因各种浏览器中query string limits而导致切断,具体取决于用户一次提交的数据量。
<强> 3 即可。此外,我的代码假设您的数据库的主要字段自动增加,并且您正在使用MySQL或基于SQL的数据库,因此插入时无需指定ID
。
的 4 即可。我也希望你能为代码添加某种安全性,比如洪水控制,验证码或invisible captcha等,以防止任何一个用户充斥你的数据库,直到它达到极限。
这是一个PDO解决方案:
<?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));
}
}