Hallo Ulf,
Hui, vielen Dank schon mal für die viele Arbeit!! Also ehrlich gesagt habe ich noch nichts von JOIN gehört bzw genutzt.
ändere dies, ändere es jetzt! Arbeite zunächst einmal Rouvens Einführung durch, meinen Artikel kannst Du Dir noch etwas aufheben :-)
Und ich kenne vielleicht nur einen geringen Bruchteil von PHP Funktionen, da ich bisher nie mit PHP gearbeitet habe!
Hier lege ich Dir das PHP-Handbuch ans Herz, falls Englisch kein Problem ist, solltest Du die englischsprachige Version bevorzugen. Ein weiterer Tipp für Deine Lesezeichen: http://www.php-faq.de/
Eine andere Fehlerbehandlung kenne ich leider nicht! So stand es im quakenet:#php Tutorial.
Tutorials sind gut für den Einstieg in eine Materie, weiterführende Techniken können sie in vielen Fällen nicht vermitteln, da es viel zu viele Möglichkeiten gibt.
Welche Fehlerbehandlung angemessen ist, das hängt von der Anwendung ab, von der Zielgruppe der Anwendung. Ein Administratorentool kann eine andere Fehlerbehandlung erhalten als eine Anwendung für "Endkunden".
// Hast Du hier die Probleme?
// Ich verstehe jedenfalls nicht, was Du hier vorhastJA genau dort liegt das Problem!
Meine Glaskugel war gut informiert. *bg*
Ich sende per Post von der ersten Seite zu dieser! Dort gab es die Felder z.B. $Feldgroßabnehmer und $Bemgroßabnehmer! Diese Namen kommen auch aus einer Tabelle param! ( $Feld + Variabel aus Param )
Hmm, zum einen kommen die Namen bereits aus Tabelleninhalten, zum anderen werden sie bereits einen Schritt vorher umgewandelt. Warum? Ist dies wirklich erforderlich? Um was für Formularfelder handelt es sich? Kann man bereits irgendwo etwas online sehen?
Klar kannst Du es so lösen, wie ich es Dir bereits gepostet habe - jedoch würde ich variable Variablen vermeiden, so gut es geht. In Deinem Fall habe ich das Gefühl, dass es ganz einfach sein müsste, wenn der Ansatz richtig gewählt ist.
Genau den gleichen Vergleich (die Werte der Felder 'akt_art' in Tabelle aktion_bew und 'par_wert1' in Tabelle param gleich ) nutze ich um die Tabelle mit den Werten zu füllen. Und genau diese müssen geupdatet werden!
Um Deinen Vorgehen verstehen und beurteilen zu können, müsste man die Gesamtaufgabe kennen, nicht das, was Du in einem Einzelschritt vorhast.
$querybetrag= "$Feld" . $row['par_wert4'];
$querybem = "$Bem" . $row['par_wert4'];
$queryart =$row['par_wert1'];$queryup[$upx]= "UPDATE aktion_bew
SET akt_betrag = '$querybetrag',
akt_bem = '$querybem'
WHERE akt_art = '$queryart'
AND kd_id = '$kunde_id' ;";Also was dies bedeuten sollte:
$queryup[$upx]= 'UPDATE aktion_bew
SET akt_betrag = '$Feld$row['par_wert4']',
Nochmals die Funktionsweise von variablen Variablen:
$Feldgroßabnehmer = "irgendwas";
$querybetrag = '$Feldgroßabnehmer'; // Beachte die einfachen Hochkomma
// $querybetrag = "\$Feldgroßabnehmer"; // hätte den gleichen Effekt
echo $$querybetrag; // Ausgabe: irgendwas
echo ${$querybetrag}; // gleiche Ausgabe
Vielleicht erläuterst Du uns den Gesamtzusammenhang, so dass wir Dir auch Tipps für einen Lösungsansatz ohne variable Variablen geben können.
Doch aufgrund der vielen Klammern gibt es dauert Fehler! Deswegen hab ich es aufgeteilt!
Könntest Du dies näher erläutern?
Foreach und array_reverse() kenn ich bisher auch nicht!
Mit foreach durchläufst Du alle Elemente eines Arrays. Du willst das Array von hinten nach vorne durchlaufen, also nutze zunächst array_reverse, um die Reihenfolge der Elemente im Array umzukehren.
Natürlich könntest Du das auch eleganter lösen:
Statt einen numerischen Index hochzuzählen, könntest Du die Update-Statements mit array_unshift() jeweils am Anfang Deines Arrays einfügen. Somit steht am Ende Deiner Schleife das zuletzt hinzugefügte Statement am Anfang des Arrays und das zuerst hinzugefügte am Ende. Einfaches Durchlaufen mit foreach sollte nun die Statements in der von Dir gewünschten Reihenfolge liefern.
foreach ($queryup as $query) {
$resultup = mysql_query($query) OR die(mysql_error());
}
statt
while ( $upx != 0 ) {
$resultup = mysql_query($queryup[$upx]) OR die(mysql_error());
$upx = $upx - 1;
}
sieht nicht nur eleganter aus, es entfällt die Gefahr, versehentlich Index-Fehler zu erzeugen oder gar eine Endlosschleife zu produzieren.
Genau bei dieser Schleife solltest Du jedoch auch die Fehlerbehandlungsproblematik erkennen:
Was machst Du, wenn von 20 Updates bereits 10 erfolgreich durchgeführt wurden, das 11. fehlschlägt? Eine Möglichkeit wäre z.B. eine Schreibsperre auf den Datensatz, der Sekundenbruchteile später nicht mehr besteht. Ein erneuter Versuch könnte erfolgreich sein; Dein Skript könnte möglicherweise erfolgreich durchlaufen.
Du brichst jedoch die Ausführung einfach ab. Was weißt Du nun über den Zustand Deiner Datenbank? Ist das schlimm? Wenn ja, welche Strategie fällt Dir dazu ein? Wenn entweder _alle_ oder _gar keine_ Updates durchgeführt werden sollen, so wäre dies ein Fall für Transaktionen. Bei MySQL sind diese an bestimmte Voraussetzungen gebunden.
Verstehst Du nun etwas besser, warum die Fehlerbehandlung bei DB-Fehlern individuell an die Aufgabe angepasst sein sollte?
Freundliche Grüße
Vinzenz