AJAX foreach $ _POST合并值

时间:2017-02-06 15:19:22

标签: php ajax

我会尽量保持清醒。

我正在为我的工作开发一个项目,使用动态表单,其中表单输入在数据库中,并动态创建。每个输入行看起来像:

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).')');

希望有人可以帮助我。

最诚挚的问候 思科

1 个答案:

答案 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) . ")";