Newsupdatefunktion (php und html)
Turgar
- html
Hallo,
ich habe auf meiner Homepage ein Newssystem, welches mir alle News in eine Datenbank einträgt;
Da sich News jedoch zeitweise ändern können, benötige ich noch eine Updatefunktion dafür;
Hierfür habe ich ein Formular erstellt, das mit dem alten Newswert vorbelegt werden soll, sodass der Beitrag bequem editiert und zurück in die Datenbank geschrieben werden kann;
Soweit so gut;
Problem ist jetzt nur, dass jedesmal wenn ich auf den Abschickenknopf des Formulars drücke, die News leer in die Datenbank geschrieben wird;
Hier der Quelltext dazu:
[CODE]
<form action="editNews.php" method="post">
<textarea name="feldZumNewsEditieren" cols="90" rows="10">");
//neueste News in die Textarea schreiben
getLatestNews();
echo ("</textarea>
<br>
<input type="hidden" name="verstecktesEditierenDerNews" value="ok">
<input type=submit value=abschicken>
</form>");
//die News anhand der passenden id mit veraenderten "News"-Wert in die Datenbank schreiben
updateNews(getLatestNewsId(), $feldZumNewsEditieren);
[/CODE]
Wo liegt mein Fehler?
Dank!!
noch was:
vor dem Formular steht natürlich ein 'echo ("' da es sich um html in einer php-Datei handelt;
Mahlzeit,
<textarea name="feldZumNewsEditieren" cols="90" rows="10">");
//neueste News in die Textarea schreiben
getLatestNews();echo ("</textarea>
[...]
updateNews(getLatestNewsId(), $feldZumNewsEditieren);
Was steht in der Variablen $feldZumNewsEditieren drin? Bzw. wo wird diese gefüllt?
MfG,
EKKi
$feldZumNewsEditieren wird bisher nirgends explizit gefüllt;
ich dachte, dass ich den Namen der Textarea als Variable für deren Inhalt verwenden kann;
Mahlzeit,
$feldZumNewsEditieren wird bisher nirgends explizit gefüllt;
Eben deswegen wird auch nichts in die Datenbank eingetragen. :-)
ich dachte, dass ich den Namen der Textarea als Variable für deren Inhalt verwenden kann;
Klar kannst du. Nur solltest du dann auch den per Formular übergebenen Wert in diese Variable schreiben ... mach dich mal über $_GET und $_POST schlau.
MfG,
EKKi
hm, ich hatte schon vorher mit
"$feldZumNewsEditieren = $_POST['feldZumNewsEditieren'];" NACH dem Formular experimentiert;
Leider ohne Erfolg...
Muss es Bestandteil von <form></form> sein??
mfg,
Turgar
Mahlzeit,
hm, ich hatte schon vorher mit
"$feldZumNewsEditieren = $_POST['feldZumNewsEditieren'];" NACH dem Formular experimentiert;
Leider ohne Erfolg...
Kein Wunder. Ein Skript (auch PHP) wird immer von OBEN nach UNTEN abgearbeitet. Wenn du also ERST HTML-Output erzeugst (und dabei die - zu dem Zeitpunkt noch nicht gefüllte - Variable $feldZumNewsEditieren benutzt) und DANACH die Variable mit einem Wert aus $_POST füllst ... was sollte deiner Meinung nach im HTML-Output stehen? :-)
Muss es Bestandteil von <form></form> sein??
Nein. Du musst halt sinnvollerweise ERST alle im Skript benutzern Variablen, die Werte aus $_GET oder $_POST enthalten sollen, mit diesen Werten füllen, bevor du mit ihnen arbeiten kannst. HTML-Output erzeugt man sinnvollerweise erst, NACHDEM man irgendwelche Daten verarbeitet hat.
Ich würde generell zum EVA-Prinzip raten.
MfG,
EKKi
sorry, falls ich nerve, aber ich kapier nicht ganz was mir das sagen soll;
mein Quelltext sieht mittlerweile so aus:
echo ("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>News editieren</title>
</head>
<body>
News editieren:
<form action="editNews.php" method="post">
<textarea name="feldZumNewsEditieren" cols="90" rows="10">");
//neueste News in die Textarea schreiben
getLatestNews();
echo ("</textarea>
<br>
<input type="hidden" name="verstecktesEditierenDerNews" value="ok">
<input type=submit value=abschicken>
</form>");
$feldZumNewsEditieren = $_POST['feldZumNewsEditieren'];
//die News anhand der passenden id mit veraenderten "News"-Wert in die Datenbank schreiben
updateNews(getLatestNewsId(), $feldZumNewsEditieren);
echo ("</body>
</html>");
dank der Funktion getLatestNews() wird mir die letzte News auch wirklich in der Textarea angezeigt;
wenn ich nun also das Formular unverändert abschicke, sollte die News genau das gleiche enthalten wie vorher - zumindest nach meiner Theorie;
dass diese nicht stimmt ist mir bewusst;
offen gesagt:
Könnten Sie so nett sein und mir die Lösung hierfür zeigen?
mfg,
Turgar
Mahlzeit,
echo ("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>News editieren</title>
</head>
<body>
News editieren:
<form action="editNews.php" method="post">
<textarea name="feldZumNewsEditieren" cols="90" rows="10">");//neueste News in die Textarea schreiben
getLatestNews();
Hier liest du den aktuell in der Datenbank vorhandenen Wert aus und gibst ihn (anscheinend? Was macht die Funktion eigentlich genau?) als Wert der Textarea aus. Das ist der Wert, wie er VOR der Änderung im gerade abgeschickten HTML-Formular aussieht.
echo ("</textarea>
<br>
<input type="hidden" name="verstecktesEditierenDerNews" value="ok">
<input type=submit value=abschicken>
</form>");$feldZumNewsEditieren = $_POST['feldZumNewsEditieren'];
Hier holst du dir den Wert des gerade abgeschickten HTML-Formulars und füllst ihn in die Variable $feldZumNewsEditieren. Das ist der Wert, wie er nach eventuellen Benutzereingaben/-änderungen aussieht.
//die News anhand der passenden id mit veraenderten "News"-Wert in die Datenbank schreiben
updateNews(getLatestNewsId(), $feldZumNewsEditieren);
Hier schreibt du den geänderten Wert in die Datenbank.
echo ("</body>
</html>");dank der Funktion getLatestNews() wird mir die letzte News auch wirklich in der Textarea angezeigt;
wenn ich nun also das Formular unverändert abschicke, sollte die News genau das gleiche enthalten wie vorher - zumindest nach meiner Theorie;
Kann sie doch gar nicht! Das, was du in den HTML-Output schreibst, ist der Wert, wie er VOR Verarbeitung der Benutzereingaben in der Datenbank steht. Ich wiederhole gerne nochmal: mach dich mit dem EVA-Prinzip vertraut ... alles andere ist nur unübersichtlicher Frickelkram. :-)
-----8<-----8<-----8<-----
<?php
// EINGABE
$feldZumNewsEditieren = $_POST['feldZumNewsEditieren'];
// VERARBEITUNG
updateNews(getLatestNewsId(), $feldZumNewsEditieren);
// AUSGABE
?>
<html>
[...]
<form>
<textarea><?php getLatestNews(); ?></textarea>
[...]
</form>
[...]
</html>
----->8----->8----->8-----
Mal im Ernst: ist das nicht wesentlich übersichtlicher?
MfG,
EKKi
echo $begrüßung;
Problem ist jetzt nur, dass jedesmal wenn ich auf den Abschickenknopf des Formulars drücke, die News leer in die Datenbank geschrieben wird;
Betreibe Debugging, um der Ursache auf den Grund zu kommen!
Zum einen ist es immer hilfreich, beim Entwickeln das error_reporting auf E_ALL zu stellen, damit man Zugriffe auf nicht initialisierte Variablen angezeigt bekommt. Somit kann man Tippfehler bei Variablennamen finden, und wird auch über falsche Annahmen aufgeklärt.
Zum anderen ist es wichtig, sich die Werte der verwendeten Variablen ausgeben zu lassen, um zu überprüfen, dass ihr Inhalt nicht von den eigenen Erwartungen abweicht. Geeignete Mittel dafür sind echo (für einfache Variablen, var_dump() (präzisere Ausgabe für jegliche Art von Variablen) und print_r() (für Arrays).
Oben erwähnte falsche Annahme kann auf einem alten Feature PHPs beruhen, das schon seit Jahren nicht mehr verwendet werden soll: register_globals.
Hier der Quelltext dazu:
Darin kann man als Außenstehender die Ursache nicht genau erkennen, da zu viele Unbekannte drin sind, z.B. Variableninhalte und selbst geschriebene Funktionen.
echo "$verabschiedung $name";