dynamische Formularfelder in MySQL speichern

marcus.dietrich

Grünschnabel
Hallo,

ich benötige Eure Hilfe. Ich habe ein Formular, wo ich die dynamischen Formularfelder mit Post übergebe und diese Daten sollen dann in eine MySQL-Datenbank gespeichert werden. Bis zur Übergabe funktioniert alles, aber die Daten werden nicht in MySQL gespeichert.

Es wäre schön, wenn mir jemand helfen kann. Ich habe jetzt schon ewig daran rumexperimentiert, aber stehe langsam auf dem Schlauch.

PHP:
// Formular

[CODE=php]<script>
var feld = 1;
var feldm = 1;
function feld_plus() {
if (feld <= 10) {
  var inhalt = "Feld " + feld;
  document.getElementById('dynamic_input').innerHTML +=
  "<input type='text' name='Autor" + feld + "' placeholder='Autor'><input type='text' name='Bezeichnung" + feld + "' placeholder='Bezeichnung'><input type='text' name='ISBN" + feld + "' placeholder='ISBN'><input type='text' name='Stand" + feld + "' placeholder='Stand'><input type='text' name='Folgebestellung" + feld + "' placeholder='Folgebestellung'><br>";
  feld++;
}
}
function feld_minus() {
if (feld > feldm) {
feld--;
  document.getElementById('dynamic_input').innerHTML = "";
  for (var zaehler = feldm; zaehler < feld; zaehler++) {
    var inhalt = "Feld " + zaehler;
    document.getElementById('dynamic_input').innerHTML +=
  "<input type='text' name='Autor" + feld + "' placeholder='Autor'><input type='text' name='Bezeichnung" + feld + "' placeholder='Bezeichnung'><input type='text' name='ISBN" + feld + "' placeholder='ISBN'><input type='text' name='Stand" + feld + "' placeholder='Stand'><input type='text' name='Folgebestellung" + feld + "' placeholder='Folgebestellung'><br>";
  }
}
}
</script>

Felder hinzufügen <input type="button" value="-" onClick="feld_minus();">
<input type="button" value="+" onClick="feld_plus();"> <br><br>
<div id="dynamic_input"></div>    

<p><input class=button type = "submit" value="Speichern"> <input class=button type = "reset">
</form>


PHP:
 // Speichern

foreach($_POST as $zaehler=>$value)
    echo '"$',$zaehler,'" = "',$value,'"';

$pdo = new PDO('mysql:host=hostname;dbname=datenbankname, 'benutzername', 'passwort');
$sql = "SELECT * FROM tabelle";
$statement = $pdo->prepare("INSERT INTO tabelle (Autor, Bezeichnung, ISBN, Stand, Folgebestellung) VALUES :)Autor, :Bezeichnung, :ISBN, :Stand, :Folgebestellung)");
for(i=0;$i<10; $i++) {
    $eintrag = array('Autor' => $value, 'Bezeichnung' => $value, 'ISBN' => $value, 'Stand' => $value, 'Folgebestellung' => $value);
    $statement->execute($eintrag);
echo $statement->errorInfo()[2];
}
?>
Der Datensatz wurde erfolgreich gespeichert! <meta http-equiv="refresh" content="1; URL=verwaltfortabo.php" />
 
Zuletzt bearbeitet:
Die Fehlermeldung wäre jeweils noch praktisch.

Du hast da ein Schreibfehler im SQL
SQL:
-- Du hast
VALUES :)Autor

-- und du willst
VALUES( :Autor

Ansonsten schau mal das an. Ist zwar etwas älter, funktioniert aber wahrscheinlich noch.
Damit lassen sich Prepared SQLs mit Daten ausgeben und diese kann man dann mit phpmyadmin oder HeidiSQL etc. testen.
http://wiki.yaslaw.info/doku.php/php/libraries/ypdostmt
 
Die Fehlermeldung wäre jeweils noch praktisch.

Du hast da ein Schreibfehler im SQL
SQL:
-- Du hast
VALUES :)Autor

-- und du willst
VALUES( :Autor

Ansonsten schau mal das an. Ist zwar etwas älter, funktioniert aber wahrscheinlich noch.
Damit lassen sich Prepared SQLs mit Daten ausgeben und diese kann man dann mit phpmyadmin oder HeidiSQL etc. testen.
http://wiki.yaslaw.info/doku.php/php/libraries/ypdostmt

Eine Fehlermeldung wird nicht ausgegeben - zumindest nicht im MySQL error.log. Das hätte ich vielleicht erwähnen sollen. In der Tabelle wird der letzte Wert jeweils 10-mal eingetragen. Ich habe mal einen Screenshot der Eintragung und der daraufhin gespeicherten Daten angehängt.

Ich schaue mir mal den von dir mitgeteilt Link an. Vielen Dank erstmal.
 

Anhänge

  • Eingabe.jpg
    Eingabe.jpg
    44 KB · Aufrufe: 4
  • EintragDatenbank.jpg
    EintragDatenbank.jpg
    57,4 KB · Aufrufe: 4
Die Klammer im SQL war trotzdem falsch. Gibt es weiterhin Probleme?

Da hast du Recht. Im Skript auf dem Server war sie korrekt^^ Das Problem besteht weiterhin.

Ich denke mal, dass das Problem irgendwo bei dem $value liegt.

Code:
$eintrag = array('Autor' => $value, 'Bezeichnung' => $value, 'ISBN' => $value, 'Stand' => $value, 'Folgebestellung' => $value);
 
Was ist $value?
Woher kommt das?

Das $value ist die Variable mit den eingetragenem Wert. Aus dem Formular werden die Daten per POST übermittelt - dies erfolgt mit folgendem Befehl:

Code:
foreach($_POST as $zaehler=>$value)
    echo '"$',$zaehler,'" = "',$value,'"';

$zaehler ist jeweils der Feldname des Formulars mit einer fortlaufenden Nummer. So sieht die echo-Ausgabe nach Absenden des Formulars aus:

"$Autor1" = "autor1"
"$Bezeichnung1" = "bez1"
"$ISBN1" = "isbn1"
"$Stand1" = "stand1"
"$Folgebestellung1" = "folgebe1"

"$Autor2" = "autor2"
"$Bezeichnung2" = "bez2"
"$ISBN2" = "isbn2"
"$Stand2" = "stand2"
"$Folgebestellung2" = "folgebe2"

Der erste Name ist die Feldbezeichnung und der zweite Name der Eintrag (=value).
 
1) Ist in deinem Fall dann $value nur der Inhalt des letzen Feldes und das willst du allen Feldern im SQL übergeben. Schlechte Idee.

2) Ist mir noch aufgefallen, dass die Array-Keys ohne : sind. Gemäss PHP-Doku müssten auch diese mit : geschrieben sein

3) Wozu 10 Insert absetzen? 1 sollte reichen

PHP:
$sql = <<<SQL
    INSERT INTO tabelle (Autor, Bezeichnung, ISBN, Stand, Folgebestellung) 
    VALUES (:Autor, :Bezeichnung, :ISBN, :Stand, :Folgebestellung)
SQL;

$statement = $pdo->prepare($sql);
$eintrag = array(
        ':Autor' => $_POST['Autor'], 
        ':Bezeichnung' => $_POST['Bezeichnung'], 
        ':ISBN' => $_POST['ISBN'], 
        ':Stand' => $_POST['Stand'], 
        ':Folgebestellung' => $_POST['Folgebestellung']
);
$statement->execute($eintrag);
 

Neue Beiträge

Zurück