Datenbank mehrere Datensätze gleichzeitig updaten??
Kermit
- php
0 nimble0 Kermit0 nimble0 Kermit0 Superlemming
0 Alexander Brock
Hallo,
ich weiß das Thema ist etwas kryptisch - sorry - hoffe ihr könnt und wollt mir trotzdem helfen.
Arbeite mit PHP und MySql 4.0
Lese aus meiner Datenbank aus einer Tabelle mehrere Datensätze gleichzeitig aus, um sie innerhalb eines Formulares zu bearbeiten und dann wieder in die Datenbank einzuspielen. Jetzt stehe ich ein wenig auf dem Schlauch, da ich nicht weiß wie ich mehrere Datensätze gleichzeitig wieder in die Datenbank einspielen kann. Habe versucht das über Durchnummerierung der Variablen zu machen (mit $i - $i++)aber da komme ich nicht weiter. Könnt Ihr mir da eine einfache Lösung nennen?
Zum leichteren Verständnis:
$query=db_query("select * from TABLE");
while($aus=db_fetch_array($query))
{
$feld=$query["feld"];
$antwort=$query["antwort"];
$reihe=$query["reihe"];
$ID=$query["id"];
echo "<p><input type='Text' name='feld' value='$feld' size='10'> - <input type='Text' name='antwort' value='$antwort' size='10'><input type='Text' name='reihe' value='$reihe' size='3'> - <input type='hidden' name='ID' value='$ID'></p>";
Habe hier dann zwischen 10 und 50 Datensätze. Wenn ich das Formular abschicke habe ich dann zum eintragen folgenden Code:
$sql = "update TABLE set
feld=$feld,
antwort='$antwort',
reihe='$reihe'
where ID=$ID";
if (!mysql_query($sql))
{
echo "<p>Eintrag geht leider nicht</p>";
}
Natürlich wird in diesem Fall nur der letzte Datensatz eingespielt und das ist mir auch vollkommen klar.
des wegen hatte ich ja versucht sowas wie
$fe=fe;
$fe.=$i;
<input type='Text' name='$fe' value='$feld' size='10'>
um die Datensätze durchzunummerieren, aber wie muß ich das dann beim Eintragen schreiben.
Danke für jede Hilfe,
Kermit
Hi
Also deine Problemstellung ist schon irgendwie verwirrend...
wenn ich dich richtig verstehe, willst du alle formulardaten nacheinander verarbeiten und in die DB abfüllen?
Da gibts einen Trick in HTML:
<input type='Text' name='feld[]' value='$feld' size='10'>
dank der Klamer hinter feld hast du dann alle felder in einem Array, das du einfach mit ner Forschleiffe durchrattern und verarbeiten kannst.
ich hoffe ich hab dein Problem richtig erfasst ;-)
Hi,
und schon mal vielen Dank für die Hilfe. Ich weiß meine Ausdrucksweise ist manchmal recht verwirrend - aber Du hast das Problem genau erfasst.
Was mir nur noch immer nicht klar ist wie schreibe ich die update Anweisung? Ich weiß ja nicht wieviele Datensätze es insgesamt sind (können mal 10, mal 20, mal n sein)...
Habe also
<input type='Text' name='feld[]' value='$feld' size='10'>
<input type='Text' name='antwort[]' value='$antwort' size='10'>
<input type='Text' name='ID[]' value='$ID' size='10'>
etc.
Stehe hier wirklich auf dem Schlauch und weiß nicht wie ich die For-Schleife schreiben muß....
Wäre echt dankbar wenn Du mir noch ein bisschen weiter helfen könntest...
Grüße,
Kermit
Hi,
und schon mal vielen Dank für die Hilfe. Ich weiß meine Ausdrucksweise ist manchmal recht verwirrend - aber Du hast das Problem genau erfasst.Was mir nur noch immer nicht klar ist wie schreibe ich die update Anweisung? Ich weiß ja nicht wieviele Datensätze es insgesamt sind (können mal 10, mal 20, mal n sein)...
PHP bietet da eine praktische Funktion namens forech:
------------------------------
lieber ein Pinguin der läuft
als ein Fenster das hängt
------------------------------
Hi
PHP bietet da eine praktische Funktion namens forech:
ja soweit so schön, aber muß ich da nicht explizit erstmal ein Array angeben?
Oder wird das automtisch erstellt und wenn ja, wie greife ich darauf zu?
es genügt ja nicht
foreach($feld)
{
mach was
}
da doch mehrere Tabellenfelder enthalten sind oder kapiere ich das jetzt komplett falsch?
Ich kann die Daten ja auch nicth einfach aus der Datenbank in das Array einlesen, da diese ja im Formular durchaus geändert werden können - sonst könnte ich mir das Formular ja sparen....
Du merkst - keinen blassen Schimmer bei mir....
Grüße,
Kermit
foreach($feld)
{
mach was
}
$i = 0;
foreach($id as $aktid)
{
mysql_query("UPDATE table SET feld=$feld[$i], antwort=$antwort[$i], reihe=$reihe[$i] WHERE ID=aktid");
i++;
}
ein feld wird in die neue Variable aktid umgewandelt, alle anderen werden mit dem hilfszäler $i direkt ausgelesen...
gruss nimble
SUPER!!!! TAUSEND DANK!!!
Funktioniert wunderbar
Grüße,
Kermit
Hi,
Was mir nur noch immer nicht klar ist wie schreibe ich die update Anweisung? Ich weiß ja nicht wieviele Datensätze es insgesamt sind (können mal 10, mal 20, mal n sein)...
PHP bietet da eine praktische Funktion namens forech:
alternativ koennte man auch ein "grosses" UPDATE-Statement basteln, dessen WHERE-Klausel die zu aktualisierende Datensatzmenge einschraenkt.
Superlemming
Hallo
Was mir nur noch immer nicht klar ist wie schreibe ich die update Anweisung? Ich weiß ja nicht wieviele Datensätze es insgesamt sind (können mal 10, mal 20, mal n sein)...
PHP bietet da eine praktische Funktion namens forech:
alternativ koennte man auch ein "grosses" UPDATE-Statement basteln, dessen WHERE-Klausel die zu aktualisierende Datensatzmenge einschraenkt.
Da die Wahrscheinlichkeit eher gering[1] ist, dass die verschiedenen Datensätze in den gleichen Spalten stets allesamt die gleichen Werte annehmen, erscheint mir dieser Vorschlag praxisuntauglich. Siehe dazu im MySQL-Handbuch, Abschnitt UPDATE-Syntax.
Freundliche Grüße
Vinzenz
[1] freundlich formuliert ;-)
Hallo Forum,
echo "<p><input type='Text' name='feld' value='$feld' size='10'> - <input type='Text' name='antwort' value='$antwort' size='10'><input type='Text' name='reihe' value='$reihe' size='3'> - <input type='hidden' name='ID' value='$ID'></p>";
Da fehlt überall htmlspecialchars, du willst dir schließlich nicht das komplette Formular zerschießen, nur weil in einem der Datensätze > steht.
$sql = "update TABLE set
feld=$feld,
antwort='$antwort',
reihe='$reihe'
where ID=$ID";
Überlege dir einmal, was passiert wenn ich all reihe folgendes eingebe:
'/*
und dann wende mysql_real_escape_string auf _alle_ Benutzereingaben an, wenn du das SQL-Statement zusammenbaust (und setze die Werte in Kommatas).
Gruß
Alexander Brock