Probleme mit POST
riode
- php
Hallo,
ich habe ein Problem mit ein Formular. Auf der Seite a1.php gibt es ein Eingabefeld. In diesem Eingabefeld wird etwas aus einer Datenbank eingelesen. Das klappt auch. Wenn ich jetzt den Inhalt ändere und auf absenden klicke, soll es mit dem Sktipt auf der seite s1.php upgedatet werden. Leider klappt das genau nicht. Ich habe es in der Vergangenheit immer so gemacht, aber jetzt will es nicht klappen. Datenbanknamen und etc. sind vom Fehler ausgeschlossen. Die stimmen.
Hier ein kleiner Ausschnitt:
a1.php:
<form method="post" action="s1.php">
.
.
.
<input type="submit" class="style_4" value="Absenden"/>
</form>
s1.php:
// Verbinfung zur Datenbank
mysql_connect ("xxxx", "xxxx", "xxxx") or die ("Keine Verbindung zur xxxx");
mysql_select_db("xxxx") or die ("Keine Verbindung zur Datenbank");
// Text lesen
$update = nl2br($_POST['text']);
// Update
mysql_query("UPDATE `xxx` SET `xxx` = '$update' WHERE `xxx` = 'xxx'");
Kann einer mir bitte helfen?
Viele Grüße
riode
Hallo,
ich habe ein Problem mit ein Formular.
Du hast unter anderem ein Problem, den Kontext zu erkennen.
Hier ein kleiner Ausschnitt:
s1.php:
// Verbinfung zur Datenbank
mysql_connect ("xxxx", "xxxx", "xxxx") or die ("Keine Verbindung zur xxxx");
mysql_select_db("xxxx") or die ("Keine Verbindung zur Datenbank");// Text lesen
$update = nl2br($_POST['text']);
a) warum speicherst Du keine Rohdaten in Deinem Datenbankfeld ab.
b) Was passiert, wenn der Inhalt von $_POST['text'] so etwas wie
"Drag 'n' Drop"
enthält?
// Update
mysql_query("UPDATExxx
SETxxx
= '$update' WHERExxx
= 'xxx'");
Wie sieht in meinem Beispielfall Dein SQL-Statement aus?
Ach ja: Spalten- und Tabellennamen einfach durch xxx zu ersetzen, erschwert nur die Lesbarkeit, verringert die Verständlichkeit, erhöht aber die Fehlerquote, ist also eine denkbar schlechte Idee. Nimm nächstens die von Dir verwendeten Namen.
Freundliche Grüße
Vinzenz
Vinzenz,
du hast recht das sein Datenbankzugriff so nicht in Ordnung ist, er muss mittels:
$update = mysql_real_escape_string(nl2br($_POST['text']));
abgesichert werden. Allerdings bringt ihm die Kritik alleine nicht viel weiter.
Zum Verständnis:
Tauchen in der Abfrage ( ' ) diese Anführungszeichen auf wird damit der Kontext verlassen und man kann einfach noch was einfügen. Alle Daten die nicht aus absolut sicherer Quelle kommen (und das sind fast keine) sollten mit dieser Funktion "escaped" werden. Dabei werden die ( ' ) durch ( ' ) ersetzt. Für den mySQL-Server ist nun klar das es sich um das Zeichen und nicht um ein Anführungszeichen für den Befehl handelt.
Was das weg-x-en von Tabellennamen und Co angeht muss ich dir allerdings voll kommen rechtgeben. Bringt niemanden was.
Gruß
Frank
$update = mysql_real_escape_string(nl2br($_POST['text']));
nl2br() ist an dieser Stelle unsinnig.
Hallo,
erstmal vielen Dank.
1. Naja escapen brauche ich nicht, da die Seite mit htaccess und htpasswd geschützt ist und somit ich nur als Admin zugriff drauf habe. Da haben wir ein Sicherheitsrisiko weniger. Wäre ja dumm von mir meine Datenbank zu löschen.
2. Mit den "weg-x-en" wie der Frank es meinte, habe ich einfach so gemacht. Aber in der Abfrage ist alles richtig zugeordnet.
3. Ich habe error_reporting(E_ALL) eingestellt und komischerweise wird es mir kein Fehler angezeigt.
4. Außerdem benutze ich ein <textarea>-Tag und kein <input>-Tag. Mein <textarea>-Tag ist auch mit ein Namen vorgesehen. Daran kann es auch nicht liegen.
Für weitere hilfen und Tipps wäre ich sehr dankbar.
Schönen Abend noch
riode
Hi,
- Naja escapen brauche ich nicht, da die Seite mit htaccess und htpasswd geschützt ist und somit ich nur als Admin zugriff drauf habe. Da haben wir ein Sicherheitsrisiko weniger. Wäre ja dumm von mir meine Datenbank zu löschen.
Wäre extrem dumm von dir, so zu denken.
Vinzenz hat dir doch ein Beispiel genannt - glaubst du wirklich ausschliessen zu können, dass du sowas als Bestandteil deiner Daten mal bewusst eingeben willst?
MfG ChrisB
Vinzenz hat dir doch ein Beispiel genannt - glaubst du wirklich ausschliessen zu können, dass du sowas als Bestandteil deiner Daten mal bewusst eingeben willst?
Immer wieder passend zu diesem Thema:
http://xkcd.com/327/
Den fast allerwichtigsten Teil haste weg gelassen:
<input type="text" name="text" value="alter Eintrag aus der Datenbank" />
Wichtig ist das die Textboxden Namen und nicht nur die Id 'text' hat. Wenn das schon der Fall sein sollte kannst du dir mit
print_r($_POST);
in der s.php den Inhalt der Übermittlung angucken. Wenn deine neue Eingabe nicht auftaucht bin ich mir zimlich sicher das deine Textbox keinen NAMEn hat.
Gruß
Frank
Mahlzeit riode,
Leider klappt das genau nicht.
"Klappt nicht" klappt nicht. Eine sinnvolle Problembeschreibung bzw. eventuell ausgegebene Fehlermeldungen wären ziemlich sinnvoll.
s1.php:
// Verbinfung zur Datenbank
mysql_connect ("xxxx", "xxxx", "xxxx") or die ("Keine Verbindung zur xxxx");
mysql_select_db("xxxx") or die ("Keine Verbindung zur Datenbank");
[link:http://community.de.selfhtml.org/zitatesammlung/zitat1282@title=Zitat 1282]
// Text lesen
$update = nl2br($_POST['text']);
Du liest hier aber keinen Text - Du manipulierst Benutzereingaben. Genauer gesagt sorgst Du letztendlich dafür, dass keine Rohdaten, sondern für eine spezielle Ausgabemethode (nämlich HTML) vorbehandelte Daten in der Datenbank gespeichert werden. Das ist normalerweise Unsinn. Informiere Dich zum Thema "Kontextwechsel".
// Update
mysql_query("UPDATExxx
SETxxx
= '$update' WHERExxx
= 'xxx'");
Und wie sieht letztendlich die Abfrage aus, die an die Datenbank geschickt wird (Kontrollausgabe)? Was liefert diese Funktion für einen Rückgabewert? Treten eventuell Datenbankfehler auf? Wie lauten diese?
> Kann einer mir bitte helfen?
Ja: Du selbst. Z.B. indem Du zielgerichtete Fehlersuche und -analyse betreibst. :-)
MfG,
EKKi
--
sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|