Design mit persönlichem Touch!

Mein Notizblock

Hier schreibe ich alle möglichen Dinge auf, die ich mir im Zusammenhang mit Webdesign und sonstigem Design merken möchte. Falls jemand hier was Brauchbares für sich findet, fein! Falls jemand zu einem Thema weitere Vorschläge oder Verbesserungen weiß, nur her damit!

Back
...und noch mehr php...
August 24th, 2015 9:58 pm
Heute geht's um str_ireplace, stripslashes, und mysql_real_escape_string.

Ich spiele wieder mit Datenbanken rum, und möchte mir heute Folgendes merken.... Um sich (also seine DB) vor SQL-Injections zu schützen, und auch Texte mit Apostrophen in eine Datenbank normal einfügen zu können (über ein Formular), verwendet man am besten: 

- mysql_real_escape_string

Das ist einfacher, als es sich anhört.... Wenn man Daten von einem Formular bekommt mittels "post", schreibt man beispielsweise einfach: 

$titel = mysql_real_escape_string($_POST["titel"]);

anstatt 

$titel = $_POST["titel"];

um die Info in einer Variablen zu speichern. Das ist definitiv sicherer, als einfach zwei Apostrophe in das Formular-Feld zu schreiben... (das funktioniert für eine richtige Eingabe in die DB auch, ist aber eine Sicherheitslücke und bei öffentlichen Formularen nicht zu empfehlen).


 So, nachdem das getan war, stand ich allerdings vor dem Problem, dass ich bei der Text-Ausgabe aus der DB hinterher dann überall die Slashes drin hatte, die mysql_real_escape_string hinzugefügt hat. Die entfernt man am besten mit stripslashes, (bzw stripslashes_deep bei einem Array), wie ich hier gelernt hab:  http://php.net/manual/de/function.stripslashes.php 
 
Das sieht dann beispielsweise so aus: 

function stripslashes_deep($value)
{
    $value = is_array($value) ?
                array_map('stripslashes_deep', $value) :
                stripslashes($value);
 
    return $value;
}
 
$daten = stripslashes_deep(array($titel, $content));

-> $titel und $content enthalten nun die Slashes nicht mehr, die mysql_real_escape_string eingefügt hat.
Das Problem war nun, dass die Datenbank "rn" für jeden Zeilenumbruch eingegeben hatte, daher hatte ich nun bei der Textausgabe überall "rn" stehen, wo vorher ein Zeilenumbruch war. (also ein php Zeilenumbruch, kein html Zeilenumbruch). 

Also - muß man die rn vor "stripslashes" löschen... 

Eine schöne Lösung dafür habe ich hier gefunden: 

http://stackoverflow.com/questions/5449580/replacing-r-n-with-php

Die Lösung sieht einfach so aus: 

$titel=str_ireplace(array("\r","\n",'\r','\n'),'', $titel); 
$content=str_ireplace(array("\r","\n",'\r','\n'),'', $content);

Das hier einfach vor der Funktion stripslashes_deep machen, und schon funktioniert auch die Textausgabe wie gewollt... 


Das war heute wieder mal eine erfolgreiche Suche durch das Internet, und ich bin wieder etwas schlauer. 


Design by Uta Kaemper