Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
umwandlung beim schreiben in datenbank [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
umwandlung beim schreiben in datenbank


 
pooky
07-03-2004, 22:02 
 
Hallo, seit langem mal wieder on Board.

Möchte jetzt seit längerem mal wieder was basteln und stehe mal wieder vor der Frage, worauf ich achten muß wenn ich, vom User eingegebene Texte, in die Datenbank schreibe. Es soll sicher sein (HTML, JS etc. rausziehen), Umlaute und Sonderzeichen ersetzt werden ... und wie ist das mit den Slashes? Wenn magic_quotes_gpc = On braucht man sich da ja um nichts kümmern, oder?
Welche Funktionen am besten beim Speichern und welche beim Auslesen? So dass man den Text möglicherweise in einem HTML-Textfeld auch nochmal korrigieren kann ...

Danke für eure Antworten.
Pooky

 
wahsaga
07-03-2004, 22:05 
 
benutze mal die forensuche - gerade zu dem lästigen "magic_quotes schützt meine datenbank- weil genau dafür is' das da"-newbee-aberglauben haben wir uns schon des öfteren in epischer breite ausgelassen.

 
pooky
09-03-2004, 18:08 
 
Ok, nach umfangreicher Suche habe ich versucht es so zu machen, wie von Abraxas irgendwo beschrieben. Dabei ist das rausgekommen:

Mit dieser Funktion werden die Strings formatiert, die wieder in die Edit-Felder geschrieben werden (als value) wenn es Fehler bei der Eingabe gab, so dass man dann korrigieren kann:
function edit_format($text) {
if (get_magic_quotes_gpc()) $text = stripslashes($text);
return htmlentities(trim($text));
}

Diese Funktion wird auf die Variablen angewandt, wenn es keine Fehler gab und die Daten in der Datenbank gespeichert werden:
function save_format($text) {
$text = mysql_escape_string(trim($text));
return $text;
}

Diese Funktion wird auf die Strings aus der Datenbank angewendet, bevor sie auf einer HTML-Seite ausgegeben werden:
function ausgabe_format($text) {
if (get_magic_quotes_runtime()) $text = stripslashes($text);
$text = nl2br(htmlentities($text));
return $text;
}

Das ganze soll unabhängig von allem magic_quotes-Gedöns laufen ... klappt aber irgendwie nicht, da der ausgegebene Text dann doch noch Slashes vor den Quotes hat ... guckt euch das bitte einmal an und helft mir auf die Sprünge, ich steh grad vor ner Mauer ;)

Noch eine andere Sache: Kann mir jemand verraten, warum folgendes nicht funktioniert (BBCode):
$sarr = "/\{b}(.*)\{\/b}/siU";
$rarr = "<b>\\1</b>";
$sarr = "/\{i}(.*)\{\/i}/siU";
$rarr = "<i>\\1</i>";
$sarr = "/\{u}(.*)\{\/u}/siU";
$rarr = "<u>\\1</u>";
$text = preg_replace($sarr, $rarr, $text);
... steht hinterher als Text da ... (man beachte: { = [ im Code)

Vielen Dank,
Pooky

 
wahsaga
09-03-2004, 18:38 
 
Original geschrieben von pooky
Diese Funktion wird auf die Variablen angewandt, wenn es keine Fehler gab und die Daten in der Datenbank gespeichert werden:
function save_format($text) {
$text = mysql_escape_string(trim($text));
return $text;
}
in diese funktion gehört die überprüfung
if (get_magic_quotes_runtime()) $text = stripslashes($text);
rein - damit die überflüssigen slashes erst gar nicht in der Db landen.
Diese Funktion wird auf die Strings aus der Datenbank angewendet, bevor sie auf einer HTML-Seite ausgegeben werden: [...]
hier ist diese überprüfung jetzt aber überflüssig, da die daten, die von der DB kommen, ja gar keine überflüssigen slashes mehr beinhalten sollten.
(falls wider erwarten doch, dann wäre magic_quotes_runtime die zu überprüfende konfigurationseinstellung.)

 
pooky
09-03-2004, 23:47 
 
Wieder einige Threads gewälzt und zu der Erkenntnis gekommen, dass alles funktioniert egal ob MQ_runtime oder MQ_gpc an oder aus, wenn ich es so mache:
function save_format($text) {
if (get_magic_quotes_gpc()) $text = stripslashes($text); //da Daten bei mir aus $_POST kommen
if (get_magic_quotes_runtime()) $text = stripslashes($text);
$text = mysql_escape_string(trim($text));
return $text;
}
function ausgabe_format($text) {
if (get_magic_quotes_runtime()) $text = stripslashes($text);
...
}
Ist daran jetzt noch irgendetwas auszusetzen? :-) Klappt jetzt zumindest mit allen möglichen MQ-On-Off-Kombinationen ...

 
wahsaga
10-03-2004, 00:00 
 
Original geschrieben von pooky
Ist daran jetzt noch irgendetwas auszusetzen? :-)
ja - und zwar der get_magic_quotes_runtime-teil in deiner speicher-funktion.

magic_quotes_runtime wirkt sich nur auf daten aus, die aus externen datenquellen wie z.b. von deiner DB kommen - wenn das also aktiviert ist, und du an dieser stelle stripslashes verwendest, werden dir jetzt die einfachen backslashes, die gar nicht zur maskierung gedacht waren, sondern vom user als wirkliche backslashes im text gedacht waren, rausgelöscht.

 
pooky
10-03-2004, 15:25 
 
Danke, habe es jetzt endlich geblickt ;)

Eine andere Frage noch: weiß jemand wie es kommt, dass trotz nl2br() auf die Ausgabe hinter jedem <br /> im Quelltext ein Zeilenumbruch ist?
Bei Ausgabe meiner Query zum schreiben in die Datenbank steht auch \r\n und nicht bloß \n ... kann man das irgendwo umstellen?

 
wahsaga
10-03-2004, 15:50 
 
Original geschrieben von pooky
weiß jemand wie es kommt, dass trotz nl2br() auf die Ausgabe hinter jedem <br /> im Quelltext ein Zeilenumbruch ist?
nl2br() ersetzt die zeilenumbrüche nicht, sondern es fügt lediglich <br /> hinzu.

Bei Ausgabe meiner Query zum schreiben in die Datenbank steht auch \r\n und nicht bloß \n ... kann man das irgendwo umstellen?
ob beim übertragen von formulardaten die zeilenumbrüche als \n, \r\n oder auch \r übergeben werden, hängt vom verwendeten system ab.

 
pooky
10-03-2004, 15:57 
 
Ok, danke. Wenn man nur den Funktionsnamen betrachtet, könnte man halt leicht vermuten, dass ersetzt wird.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:35 Uhr.