我正在尝试使用来自通过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
}
});
答案 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);
}
}