PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Formulare und Mysql!


roze
26.02.2003, 21:57:44
Hallo Leute, habe folgendes Problem:

Ich habe mir ein Formular für längere Textmitteilungen geschrieben.
Diese Textmitteilungen werden in einer Mysql-Datenbank gespeichert. Das funktioniert auch alles einwandfrei.

Nur bei der Verwendung von Anführungszeichen im Textfeld ergibt sich folgendes Problem:

Schicke ich das Formular direkt ab werden die Anführungszeichen von der Bearbeitungsroutine richtig angezeigt.
Lasse ich mir jedoch von der Mitteilung zuerst eine Vorschau anzeigen und schicke es dann ab, wird alles ab dem ersten Anführungszeichen durch einen Backslash ersetzt, z.B.:
im Formular: "TEST"
in der Vorschau: "TEST"
in der Auswertung nach direktem abschicken: "TEST"
in der Auswertung nach abschicken aus der Vorschau:
an was liegt das??

hier ist Codestück des formulars:

echo "<form action="file.php" method="POST">";
echo "<textarea name="message"><textarea>";
echo "<input type="submit" value="Abschicken" name="send">";
echo "</form>";


hier das codestück des vorschau-skripts:

$message = $_POST["message"]; // Übergabe aus dem Formular
echo $message;
echo "<form action="file.php" methos="POST">";
echo "<input type="hidden" name="message" value="$message">";
echo "<input type="submit" value="Abschicken" name="send">";
echo "</form>";


hier das Codestück des Post-Scripts:

$message = $_POST["message"]; // Übergabe aus dem Formular
$db = mysql_connect();
$res = mysql_db_query($db_name, "insert table values ( '$message' )");
mysql_close($db);


und das Codestück des Auswertungs-Scripts:

$db = mysql_connect();
$res = mysql_db_query($db_name, "select * from table");
$anz = mysql_num_rows($res);
for ($i=0; $i < $anz; $i++) {
$text = mysql_result($res, $i);
echo $text;
}
mysql_close($db);

Ben20
26.02.2003, 23:55:44
Diese Anführungszeichen werden automatisch maskiert. Um die wieder zu entfernen kannst Du stripslashes() verwenden (eine Beschreibung findest Du in der Funktionsreferenz!)

roze
27.02.2003, 00:03:10
der Befehl stripslashes() ist mir bekannt, den verwende ich auch im Vorschau-Script.
Mein Problem ist, dass wenn ich aus dem Verschau-Script poste,
die gesamte Nachricht ab dem ersten vorkommen eines Anführungszeichen durch einen einzigen Backslash ersetzt wird
und ich einfach nicht dahinter komme, warum das so ist.

roze
27.02.2003, 00:15:13
hallo ben!

habe den fehler gefunden, er liegt im Vorschau-Script:

wenn ich nämlich anstelle dieses code-stückes
echo "<input type="hidden" name="message" value="$message">";

dieses hier verwende
echo "<input type="hidden" name="message" value=$message>";

und dann im post-script die daten mit stripslashes() lese funktioniert es.

greetings roze

Yzerman
27.02.2003, 07:24:58
Dein beschriebener Fehler tritt immer dann auf, wenn der eingegebene Text mit einem Anführungszeichen beginnt.
in Deinem Beispiel hätte im Quelltext gestanden:
... value=""TEST" ...

Die beiden Quotes nach dem Gleichheitszeichen wertet der Browser als Leerstring und gibt nichts vor.

Abhilfe hätte auch die Funktion "htmlspecialchars" gebracht. Wenn Du damit ausgegeben hättest, stünde dann
... value="& q u o t ;Test& q u o t ; ...
im Quelltext, und es wäre richtig angezeigt worden.

Bei solchen Fehlern schaust Du Dir am besten als erstes den generierten Quelltext an, dann sieht man meist sofort, woran es liegt.

roze
27.02.2003, 12:31:19
Hey Leute,

Danke für die promte Hilfe, habe das Problem jetzt im Griff.
Ich muss schon sagen, echt super dieses Forum, da wird einem sofort geholfen.