Vinzenz Mai: Datenbank updaten

Beitrag lesen

Hallo Alex,

Danke, dass du dich trotzdem damit beschäftigt hast. Es ist wohl in der Tat das Beste, wenn ich aus dem ganzen Script 4 Dateien mache für jeden Status.

nein, das ist nicht erforderlich. Es erhöht die Gesantkomplexität.

Statt if - elseif - elseif ... solltest Du switch ... case verwenden.

Muss ich mir wohl mal angucken, welche Vorteile ich davon hätte. Mein Problem löst das aber nicht, oder?

Sauberer strukturierten Code - und nein, Dein Problem wird dadurch nicht gelöst.

if ($status == "Vorschau") {
echo "<h3>", $datum, "</h3><h4>Eintrag:</h4><p>", format($eintrag), "</p><h4>Kurzeintrag:</h4><p>", format($kurzeintrag), "</p>";

ach so, das hatte ich völlig vergessen:
Trenne Datenverarbeitung von Ausgabe.
Du könntest hier hübsche kleine Funktiönchen verwenden :-)

Nein, kein addslashes, sondern mysql_real_escape_string. Oder prepared Statements.
Jo. Weiß nicht, warum ich "addslashes" dadrin habe. Werde ich ändern.

Ein guter Anfang.

elseif ($status == "Bearbeiten") {
$query = "UPDATE blog SET

Aua, $id kommt ebenfalls über $_POST. Hier ohne jegliche Behandlung :-(
Auf das Script kann ja nur ich zugreifen (.htaccess-Schutz) von daher ok, oder?

Nein, ist es nicht. Bitte escape _alle_ Eingaben, selbst wenn sie von geschützten Admin-Skripten kommen. Es ist viel einfacher, _immer_ die angemessene Behandlung zu verwenden. Es spart Überlegung - und Du bist immer auf der sicheren Seite.

eintrag = '$eintrag', kurzeintrag = '$kurzeintrag' WHERE id = $id";
$sql = mysql_query($query);

Wo ist die Überprüfung, ob der Vorgang erfolgreich war?
Wie willst Du hier einen Fehler bei "Bearbeiten" finden?

Das Problem tritt nun auf, wenn ich die Blogeinträge/-kurzeinträge bearbeiten will. Das klappt ab und an, aber meist nicht. Wann dieser "ab und an"-Fall eintrifft, kann ich mir/euch nicht erklären.

Hmm, das ist kein Wunder, wenn Du es nicht überprüfst :-)

Ich hab das mehrfach überprüft. Dachte erst, das geht nur, wenn ich zunächst über Vorschau gehe, aber auch da klappt es nicht immer. Aber mit "überprüfen" meinst du warscheinlich nicht dieses "testen", aber was meinst du?

Ich sehe keine Überprüfung des Rückgabewertes von mysql_query. Diese Überprüfung sollte übrigens mit dem Vergleichsoperator auf Identität vorgenommen werden, da die Rückgabe 0 eine legale Rückgabe eines erfolgreichen Statements sein kann. Es wurde in diesem Fall kein Datensatz geändert.

Freundliche Grüße

Vinzenz