我会尽量保持清醒。
我正在为我的工作开发一个项目,使用动态表单,其中表单输入在数据库中,并动态创建。每个输入行看起来像:
Question? Radiogroup Textinput
当用户在这些行的3-5个部分中按提交时,表单将被序列化并使用AJAX进行管理。所以这里出现了我遇到麻烦的部分,截至目前,在我的AJAX文件中,有一个foreach循环遍历所有$ _POST值,将它们添加到数组中,然后在数组完成后插入所有数据到SQL数据库。我不知道这是不是一个问题,因为我不是一个专业的DBA,但是有很多行被插入到数据库中,因为每个无线电组和每个文本输入都有自己的行。而且我在想,如果我至少可以将它减少到每个问题来获取自己的行,但是我如何将无线电组值与文本输入值合并,以便它们在同一行但不同的列上。
我希望我在这里足够清楚。 今天的数据库布局
|ID|RowID|Type|User|Value
Type是Radio或Text。我希望通过这种方式获得一半的行是:
|ID|RowID|Type|User|Radio|Text
问题是当我的foreach循环为每个表单填充一个包含很多行的数组时,如何实现这一点,正如我所说,它包含可能包含无线电组和文本输入的3-5行。我今天就是这样做的:
foreach($_POST as $key => $value) {
$values[] = "'{$id}', '{$user}', '{$type}', '{$value}'";
}
$mysqli->query('INSERT INTO data (rowid, user, type, value) VALUES ('.implode('),(', $values).')');
希望有人可以帮助我。
最诚挚的问候 思科
答案 0 :(得分:0)
通过执行以下操作解决了这个问题:
//Only define for testing.
$_POST['rad_1'] = "yes";
$_POST['rad_2'] = "no";
$_POST['rad_3'] = "yes";
$_POST['txt_1'] = "Test";
$_POST['txt_2'] = "Test2";
$_POST['txt_3'] = "Test3";
$array = array();
foreach($_POST as $key => $value) {
$keyarr = explode('_', $key);
$type = $keyarr[0];
$id = $keyarr[1];
$value = $value;
$array[$id][$type] = $value;
}
$values = array();
foreach($array as $key => $value)
{
$values[] = implode(', ', $value);
}
$query = "INSERT INTO table_name test VALUES (" . implode ("),(", $values) . ")";