PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abschneiden eines $POST[feld] - Wertes...



Jor
02-06-2008, 11:00
Hallo zusammen,

folgendes Prob beschäfftigt mich seit einiger Zeit: Wenn ich Werte aus POST lese, und diese haben ein Hochkomma inne ('), wird ab der Position der Eintrag abgeschnitten.
Im I-Net habe ich schon gesucht, aber nichts Passendes gefunden, ausser zum Abspeichern in Datenbanken. Das kann ich aber für o. g. Punkt nicht anwenden.
Was kann ich ändern, damit der ganze Eintrag, wie z. B. "Volker's bla bla" übernommen wird?

BLUESCREEN3D
02-06-2008, 11:10
Das kann nicht sein. Es muss an deiner Weiterverarbeitung liegen. Versuch doch erstmal, den Wert simpel per echo auszugeben, dann solltest du sehen, dass da nichts fehlt.

Jor
02-06-2008, 11:31
Hi BLUESCREEN3D,

yep, das hatte ich gemacht, aber auch da war der Wert schon abgeschnitten.

zenobic
02-06-2008, 14:21
Wenn der value in der Form gesetzt wird?
Dann kann man auch mit http://de.php.net/htmlspecialchars arbeiten anstelle Quotes zu escapen ( http://de.php.net/addslashes ).
Ab PHP 6 sind magic Qoutes sowieso deprecated.

Wenn es ein ganz normales Text- feld oder area ist,
Was gibt dann Var Dump aus?



if (isset($_POST)) {
echo "<pre>";
var_dump($_POST);
echo "</pre>";
exit;
}

Jor
02-06-2008, 15:39
Hi zenobic,

ich bin der Sache etwas weiter auf die Schliche gekommen, bei normalen Feldern wird dem " ' " ein Backslash vorangestellt, wie folgt:
["title"]=> string(27) "Test\'s sind etwas Bessr\'s"
Aber bei Optionsfeldern wird immernoch abgeschnitten, dort fülle ich die
Felder wie folgt:
echo "<select name='$object'>";
echo "<option value='$_POST[$object]' selected>$_POST[$object]
</option>";
while($row=@mysql_fetch_array($result)) {
echo "<option value='".$row[$column]."'>".$row[$column]."</option>";
}
echo "</select>";

Nach dem Füllen stehen die Werte auch korrekt in der Auswahlbox, führe ich dann das POST durch, erhalte ich z. B.: ["Feldname"]=>string(7) "Adamo D".
Der Name wäre korrekt: "Adamo D'Agostino". Der abgeschnittene steht nach dem POST ebenfalls im Feld...

elrond
02-06-2008, 15:52
hallo,

wenn du schon als value im optionfeld den richtigen wert benutzen musst, könntest du ihn zb mit urlencode behandeln.

aber eigentlich muss ich, wenn ich so etwas sehe noch etwas anderes loswerden: Alles, was in $_POST/$_GET steht muss inhaltlich unbedingt geprüft werden, und gehört niemals nie einfach so in den code!

könnte so aussehen:


$obj=paramcheck($_POST[$object],'string');
echo '<option value="'.$obj.'" selected>'.$obj.'
</option>';


in der funktion paramcheck kannst du dich dann mit dem übergebenen wert auseinandersetzten und auf böse dinge prüfen.

Normalerweise benutze ich in select-feldern usw. im value numerische werte, id's etc. damit gibts kein problem. Wenn du tatsächlich den og. wert mit dem Hochkomma nutzen willst, kannst du den mittels urlencode() websicher codieren und auf der nächsten seite mit urldecode wieder in die richtige form bringen.

Achja, schon die verwendung der Hochkomma (einzeln oder doppelt) in deinem code ist nicht wirklich schön. Das ist in deinem falle der eigentliche grund für das verhalten, da du das attribut value mit einfachen hk einleitest und jeder parser alles hinter den zweiten hk verwirft, würde ich auch so machen, wenn ich parser wär :D

Jor
03-06-2008, 07:42
Hi elrond,

die aus dem POST erhaltenen Werte überprüfen ich nach dem diese in eine temporäre Variable kopiert wurden, quasi habe ich für den gleichen Ansatz also zwei Schritte bzw. Codezeilen wie du, werde aber, nach dem das Projekt läuft und es an die Verbesserung durch Vereinfachung und Verschlankung geht, deinen Ansatz mit "$obj=paramcheck($_POST[$object],'string');" übernehmen.
Bezüglich der Werte im Option-Feld werde ich das Ganze nochmals überdenken, da du und die anderen Antwortenden mir nun einige Anhaltspunkte gegeben haben. :) :)
Sicherlich hast du recht mit dem Verhalten des Parsers, ich würde mich da auch anschliessen ;).
Ich habe aber auch gelesen, dass die $_SESSION Varaiblen so minimal wie möglich gehalten werden sollen, und zudem bin ich dabei eine "reine" PHP Anwendung schreiben, also ohne JAVA-Script, was schon einige sachen abfangen und vereinfachen könnte. Ich bin mir noch nicht ganz sicher wie, einen Ansatz habe ich schon in Gedanken, aber vielleicht kann du/ihr mir ja schreiben, wie ihr mit Optionsfeldern/Werten um geht. Das Prob ist, dass ja nach einem POST bis zum Abspeichern der Wert ausgeschrieben angezeigt werden soll, abgespeichert, und für den User nicht sichtbar, soll aber der Referenzwert.

Ich danke euch allen für eure Hilfe!

elrond
03-06-2008, 08:02
Hey Volker,

die sache mit den Refenzwerten ist eigentlich einfach.

Bsp: select-box "anrede"


$anrede=array(
1=>"Herr",
2=>"Frau",
3=>"Onkel"
};

$selbox='<select name="anredeid">';
foreach($anrede as $anrkey=>$anrval) {
$selbox.='<option value="'.$anrkey.'">'.$anrval.'</option>';
}
$selbox.='</select>';

echo $selbox;


Nach dem submit erhälst du auf der nächsten seite dann den entsprechenden key (1..3) und musst den nur wieder rückwärts übersetzen (Referenz auflösen). Übergeben wird nur das was im option-tag in value steht.

An Stelle des Arrays "anrede" könnte das eben auch eine db-Tabelle sein oder die daten in einem xlm-file stehen oä.

Jor
03-06-2008, 10:26
Hi elrond,

ja genau, die "Rückwärtsreferenz" wollte ich erst auflösen, wenn der Datensatz, und somit die Seite, korrekt gefüllt wurde und die Plausibilitäten der einzelnen Werte gegeben sind. Daher wird auf meiner Seite das Submit erst ausgeführt (Weitergabe der Werte), wenn alles ok ist. Den Wert aus dem POST habe ich dann einfach wieder zurück geschrieben und alles passte, bis auf das Abschneiden des Wertes bei einem " ' " im Value.
Ich werde aber versuchen den Key-Value abzugreifen, und wenn keine erfolgreiches Submit möglich ist, werde ich den Key auflösen und als aktuelle Auswahl ins Option-Feld zurück schreiben.
Danke :) :)