使用序列化表单数据更新mysql数据库中的多行

时间:2016-03-24 14:08:20

标签: php mysql

我正在尝试使用来自通过AJAX的html表单数据来更新数据库中的多行。我没有更新数据库的任何问题,但我使用了几个查询来更新每一行。使用AJAX更新来自大表单的多行的正确方法是什么?一个foreach循环?

if ( isset($_POST['updateData']) ) {
    parse_str($_POST['fields']);

    $update1 = $db->execute("UPDATE content SET content_text=? WHERE page_id = '".$page_id."' AND lang_code = '".$lang_code."' AND content_id =1", array($field1));
    $update2 = $db->execute("UPDATE content SET title=?, content_text=? WHERE page_id = '".$page_id."' AND lang_code = '".$lang_code."' AND content_id =2", array($field2_title, $field2));
    $update3 = $db->execute("UPDATE content SET title=? WHERE page_id = '".$page_id."' AND lang_code = '".$lang_code."' AND content_id =3", array($field3_title));

}

我的数据库

ID | content_id | page_id | lang_code | title      | content_text |
---------------------------------------------------------------------
1  | 1          | 2       | en        |            | text1        |
2  | 2          | 2       | en        | title2     | text2        |
3  | 3          | 2       | en        | title3     |              |

我的表单看起来像这样:

<input name="field1">
<input name="field2_title">
<input name="field2">
<input name="field3_title">

我的剧本:

var form_data = $(this).serialize();
$.ajax({
    type : 'POST',
    url  : '#',
    data : {
        updateData : 1,
        fields : form_data
    }
});

2 个答案:

答案 0 :(得分:1)

好的,所以

<input name="field1">
<input name="field2_title">
<input name="field2">

使用此

<input name="field[1][content]">
<input name="field[2][title]">
<input name="field[2][content]">

所以你可以在php中使用foreach

foreach($_POST['field'] AS $id => $elem){
    $content = (isset($elem['content'])) ? $elem['content'] : '';
    $title = (isset($elem['title'])) ? $elem['title'] : '';

    $update = $db->execute("UPDATE content SET title=?, content_text=? WHERE page_id = '".$page_id."' AND lang_code = '".$lang_code."' AND content_id =?", array($title, $content, $id));
}

我认为这是最简单的方法。

答案 1 :(得分:0)

正确的方法是使用数组类型输入名称:

<input name="contents[1][title]">
<input name="contents[1][content_text]">
<input name="contents[2][title]">
<input name="contents[2][content_text]">

然后你可以预先知道这个数组:

foreach($_POST['contents'] as $key => $content){
  $sets = array();
  $exec = array();
  if(!empty($content['title'])){
    $sets[] = "title = ?";
    $exec[] = $content['title'];
  }
  if(!empty($content['content_text'])){
    $sets[] = "content_text = ?";
    $exec[] = $content['content_text'];
  }
  if(!empty($sets)){
    $exec[] = $key;
    $set = implode(',', $sets);
    $smt = $db->prepare("UPDATE content SET $set WHERE page_id = ?");
    $smt->execute($exec);
  }
}