Hallo an alle.
Folgendes generelles PHP-MySQL-Problem beschäftigt mich schon seit längerem:
Angenommen, ich habe eine Tabelle, die aus, sagen wir mal, 30 Spalten besteht und diese Tabelle fülle ich jetzt mit Daten aus einem Formular (logischerweise auch 30 Eingabefelder). Verständlich, dass es ein sehr langer "INSERT"-Befehl wird:
Dies ist aber eine sehr fehleranfällige Zeile (Spaltenname falsch geschrieben oder vergessen etc.). Elegant wäre es jetzt, wenn man eine Funktion hätte, die die Spaltennamen ausliest, in die "INSERT"-Anweisung schreibt (vor VALUES) und dann, weil die Eingabefelder genauso heißen wie die Spaltennamen sollen, dasselbe noch einmal hinter VALUES. Es soll einfach nicht nötig sein, 30 Spaltennamen und 30 Eingabefeldernamen tippen zu müssen.
Ich weiß, dass ich mit den folgenden Zeilen die Spaltennamen auslesen und in ein Array schreiben kann.
Wie aber jetzt die Spaltennamen in die "INSERT"-Anweisung bekommen?
Würde es funktionieren, wenn ich die "INSERT"-Anweisung, die ja eine Zeichenkette ist, als eben diese Zeichenkette zusammensetze? Folgende Code-Idee ist sicher mehr als fehleranfällig, soll aber nur die Idee verdeutlichen (Spaltenname und Eingabefeldername sind gleich):
Ist soetwas überhaupt möglich? Und wenn ja, wie könnte man es lösen? Ich hoffe, mein Problem war verständlich ausgedrückt. Und bitte kein "Probiere es doch einfach mal aus". Ich werde es erst ausprobieren, wenn ich weiß, dass meine Idee richtig ist.
Danke im Voraus.
Innuendo
Folgendes generelles PHP-MySQL-Problem beschäftigt mich schon seit längerem:
Angenommen, ich habe eine Tabelle, die aus, sagen wir mal, 30 Spalten besteht und diese Tabelle fülle ich jetzt mit Daten aus einem Formular (logischerweise auch 30 Eingabefelder). Verständlich, dass es ein sehr langer "INSERT"-Befehl wird:
PHP-Code:
$dbErg = $db->sql("INSERT INTO tabelle (spalte1 ... spalte30) VALUES ('$argFeld1', ... '$argFeld30')");
Ich weiß, dass ich mit den folgenden Zeilen die Spaltennamen auslesen und in ein Array schreiben kann.
PHP-Code:
$q = mysql_query ('show fields from '.$table);
$fields = array();
while ($x = mysql_fetch_array($q))
$fields[] = $x['Field'];
mysql_free_result ($q);
Würde es funktionieren, wenn ich die "INSERT"-Anweisung, die ja eine Zeichenkette ist, als eben diese Zeichenkette zusammensetze? Folgende Code-Idee ist sicher mehr als fehleranfällig, soll aber nur die Idee verdeutlichen (Spaltenname und Eingabefeldername sind gleich):
PHP-Code:
# Anfang INSERT-Anweisung
$sqlInsert = "INSERT INTO tabelle (";
# Spaltennamen auslesen und $sql zusammensetzen
for ($i=0;$i<=count($fields);$i++) // $fields kommt vom obigen Beispiel
{
if ($i<count($fields)
$sqlInsert .= $fields[$i].", ";
// solange nicht letzter Wert erreicht, Komma schreiben wegen Trennung der Spaltennamen
else
$sqlInsert .= $fields[$i];
}
$sqlInsert .= ") VALUES (";
# Eingabefeldername auslesen und $sql zusammensetzen
for ($i=0;$i<=count($fields);$i++) // $fields kommt vom obigen Beispiel
{
if ($i<count($fields)
$sqlInsert .= "'$".$fields[$i]."', ";
// solange nicht letzter Wert erreicht, Komma schreiben wegen Trennung der Eingabefeldernamen
else
$sqlInsert .= "'$".$fields[$i]."'";
}
# Ende INSERT-Anweisung
$sqlInsert .= ")";
# Jetzt SQL-Befehl ausführen (hier wird eine Klasse benutzt)
$dbErg = $db->sql($sqlInsert);
Danke im Voraus.
Innuendo
Kommentar