2016-03-24 9 views
1

Ich versuche, mehrere Zeilen in meiner Datenbank mit Daten aus einem HTML-Formular Daten über AJAX zu aktualisieren. Ich habe kein Problem mit der Aktualisierung der Datenbank, aber ich habe mehrere Abfragen verwendet, um jede Zeile zu aktualisieren. Was ist der richtige Weg, um mehrere Zeilen aus einem großen Formular mit AJAX zu aktualisieren? Eine foreach Schleife?Aktualisieren mehrerer Zeilen in MySQL-Datenbank mit serialisierten Formulardaten

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

} 

Meine Datenbank

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  |    | 

Meine Form wie das aussieht:

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

Mein Skript:

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

Antwort

1

Okay, also statt

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

verwenden

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

So können Sie eine foreach in php

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)); 
} 

Ich denke, das ist der einfachste Weg.

+0

Ich denke, das ist das, was ich brauche! Ich werde Ihre Antwort markieren, aber mit Ihrer Aktualisierungsabfrage stimmt etwas nicht. Array ($ title, $ content, $ id) muss Array ($ title, $ content) sein und Sie sollten hinzufügen: content_id = '". $ id." zur Abfrage. Vielen Dank! – Dejavu

+0

Da HTML vom Client bearbeitet werden kann und die ID der Schlüssel des Feldes ist, ist es sicherer, die Zeichenfolge zumindest zu umgehen. – Nergal

0

Ein richtiger Weg wäre, ein Array-Typ Eingangsnamen zu verwenden:

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

Und dann können Sie diesen Array foreach:

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); 
    } 
} 
+0

Vielen Dank! Was passiert, wenn in meinem Formular nicht existiert? Es gibt mir undefined Fehler, wenn ich es dem Formular nicht hinzufüge. Ich meine einige Zeilen brauchen keinen Titel oder einige brauchen keinen content_text – Dejavu

+0

@Dejavu Siehe mein Update für ein Beispiel. – rybo111

Verwandte Themen