Formularfelder dyn. in eine mySQL Datenbank
Kevin*
- php
Hallo,
guten Morgen, liebe SEFLHTMLer ...
Ich bin mir nicht sicher ob ich im Augenblick nur eine Denkblockade habe, oder ob ich mich da in etwas hingedacht habe, was möglicherweise funktionieren sollte ... aber eigentlich nie funktionieren wird.
Folgendes Problem:
Es werden nach einer Datenbankabfrage Inhalte auf einer Seite ausgegben, die dort entweder als Informationsquelle dienen, oder aber bei eventuellen Falscheingaben bearbeitet werden können. Das bearbeiten ist so gestaltet, das ich den Modus 'Bearbeiten' via Funktion aktiviere und mir so die Formularfelder inkl. aller anderen notwendigen Informationen dyn. generieren lassen.
Das sieht so aus:
...
function Buchung ($typ,$id,$db,$active){
if ($active == 'on'){
echo "<input name="".$typ."_".$id."" type="text"
id="".$typ."_".$id."" value="".$db."" size="10">";
}
else{
echo $db;
}
}
...
Ich bekomme dann die Inputfelder mit den Werten aus der DB in die html Seite angezeigt. Mal sind es 5 dann mal wieder 10 oder auch keines. Dyn. also.
...
<input name="buchungsdatum_5" type="text" id="buchungsdatum_5" value="01.01.2006" size="10">
<input name="buchungsdatum_6" type="text" id="buchungsdatum_6" value="01.01.2006" size="10">
...
Dabei bedeutet die Zahl im namen des input Tags die ID des Buchungssatzes, welche in der DB autoincrement ist. Wenn es sich um einen Buchungsatz handelt, der bearbeitet und aktualisiert werden soll, ist alles ok. Bei aber mehr wie einem, und dem Versuch diese in die DB zu schreiben, bekomme ich das Problem mit den $_POST['buchungsdatum_?????????'] Variablen. Es sollen ja alle Formularfelderinhalte in die DB geschrieben werden, ob sie dann geändert wurden oder nicht, ist mir im Moment noch egal. Nur genau das passiert nicht. Ich bekomme das UPDATE hin, wenn es sich lediglich um ein Formularfeld handelt, aber bei mehr funktioniert es nicht mehr.
So sieht übrigens die Anweisung aus für die DB.
...
$sql = mysql_query ("UPDATE buchungen SET betrag = '".$_POST['betrag_9']."', buchungsdatum = '".$_POST['buchungsdatum_9']."' WHERE id = '".$_GET['id']."' ") or die (mysql_error());
...
Die 9 in der Anweisung resultiert noch aus einem Test von mir. Genau diese $_POST[''] Variablen, der Name also muß irgendwie dyn. werden.
Die Inhalte kommen ja über das Formular.
Oder verrenne ich mich hier in eine unlösbare Aufgabe?
LG
vielen Dank für Hinweise, Tips, Kommentare ...
Kevin*
P.S. Ich hoffe ich habe mich verständlich ausgedrückt .... :p
Hi,
Die 9 in der Anweisung resultiert noch aus einem Test von mir. Genau diese $_POST[''] Variablen, der Name also muß irgendwie dyn. werden.
Du wirst alle Namen kennen, nachdem Du den dynamischen Part ebenfalls als Parameter mitliefern lässt. Übrigens hindert Dich niemand daran, "dynamisch" auszuschreiben.
P.S. Ich hoffe ich habe mich verständlich ausgedrückt .... :p
Ver- und ein wenig umständlich.
Cheatah
Vielen Dank ich habe es hinbekommen.
Zum einen habe ich bei bei der UPDATE ANweisung keine Schleife programmiert, zum anderen die Beschriftung des bzw. der Forularfelder geändert. Jetzt kommt an den Namen nicht mehr die ID ...
also
... name = "betrag_9" ....
sondern bei der Abfrage der DB frag ich wieviele Datensätze betroffen sind, und nummerier sie nur durch ...
... name = name = "betrag_1" ....
... name = name = "betrag_2" ....
Die ID hab ich ja so oder so. Somit ist es eindeutig welcher Datensatz. Die UPDATE Anweisung steht nun in einer for Schleife, und generiert die korrekte POST[] Variable.
... $_POST['betrag_'.$x] ...
Vielen Dank an Euch beide ... :P
Andere Möglichkeit:
Jede Spalte hat ja bei dir eine eigene Tabellenzeile.
Die andere Möglichkeit wäre es, jeweils eine Zeile in einer andere <form> anzuzeigen und die ID als hidden field speichern.
Tachen!
Die 9 in der Anweisung resultiert noch aus einem Test von mir. Genau diese $_POST[''] Variablen, der Name also muß irgendwie dyn. werden.
Die Inhalte kommen ja über das Formular.
Eigentlich müsste dein Script ja wissen, welche Datensätze dynamisch als Felder generiert wurden. Du hast ja sicherlich eine Schleife, die Funktion Buchung($typ,$id,$db,$active) mehrfach aufruft. Diese Schleife, bzw. deren Bedingung, kannst du verwenden um die Datensätze noch einmal zu durchlaufen.
Alternativ kannst du auch die Daten der $_POST Variable mittels foreach($_POST as $key => $value) { ... } durchlaufen...
Schönen Gruß,
David