【问题标题】:AJAX foreach $_POST merge valuesAJAX foreach $_POST 合并值
【发布时间】:2017-02-06 15:19:22
【问题描述】:

我会尽量说清楚。

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

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

希望有人能帮帮我。

最好的问候 思科

【问题讨论】:

  • No no no。在处理不受信任的数据时使用prepared statements
  • 我总是这样做,但是当这与手头的问题无关时,我为什么要在上面包含它..

标签: php ajax


【解决方案1】:

通过以下方式解决:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多