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)
mysql_real_escape_string [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
mysql_real_escape_string


 
Magic11
03-12-2009, 20:39 
 
Hallo alle zusammen,

ich habe folgendes proglem und zwar möchte ich es verhindern dass sql-injection bei meinen scripten möglich ist.

habe eine form in der ich eben z.b. den namen einer firma in einem textfeld eingeben kann.
dieser wert wirt dann per "post" übergeben und ich nehme die post variable und möchte die sonderzeichen eben per mysql_real_escape_string($_POST['firma']
in die variable "$firma" schreiben und diese dann in der db speichern.

soweit so gut.

allerdings habe ich das problem dass wenn ich nun den wert ausgebe bevor er in die db geschrieben wird dann bekomme ich als ausgabe \\\"Mustermann\\\"
schreibe ich die variable in die datenbank steht in der db \"Mustermann\" drin.

ich kann mir das ganz überhaupt nicht erklären.es sollte ja eigentlich nur ganz normal der der Name Mustermann in die db geschrieben werden oder?

könnt ihr mir bitte vielleicht helfen?

 
h3ll
03-12-2009, 21:04 
 
Du sollst mysql_real_escape_string() nur dann verwenden, wenn du Werte in die Datenbank schreibst.

Falsch:
// Datenbankabfrage
$result = mysql_query("SELECT * FROM tabelle WHERE firma = '" . mysql_real_escape_string($_POST['firma']) . "'");

// HTML-Ausgabe
echo "Gesuchte Firma: " . mysql_real_escape_string($_POST['firma']);

Richtig:
// Datenbankabfrage
$result = mysql_query("SELECT * FROM tabelle WHERE firma = '" . mysql_real_escape_string($_POST['firma']) . "'");

// HTML-Ausgabe
echo "Gesuchte Firma: " . htmlspecialchars($_POST['firma']);

 
Magic11
03-12-2009, 21:25 
 
Danke @h3ll scohn mal für die Info.

Genau das habe ich vor, ich will die per POST übergebenen Werte in die Datenbank schreiben.

Mein String für die DB sieht so aus:

$dateneintragen = "Insert Into kunde (anrede,firma,nachname,vorname,strasse,plz,ort,wbeginn,wende,aktiv,gs,notiz)
values('".mysql_real_escape_string($anrede)."', '".mysql_real_escape_string($firma)."',
'".mysql_real_escape_string($nname)."','".mysql_real_escape_string($vname)."',
'".mysql_real_escape_string($strasse)."', '".mysql_real_escape_string($plz)."',
'".mysql_real_escape_string($ort)."', '".mysql_real_escape_string($wbeginn)."',
'".mysql_real_escape_string($wende)."',
'".mysql_real_escape_string($aktiv)."','".mysql_real_escape_string($gs)."',
'".mysql_real_escape_string($notiz)."') ";

Leider bekomme ich hier wie beschrieben das Problem dass wenn in der Variable $Firma der Wert 'Firma' steht dass dort dann in die Datebank der Wert \'Firma\' geschrieben wird.

Kapiere ich hier was nicht oder mache ich was falsch?

 
AmicaNoctis
03-12-2009, 21:30 
 
Ich denke auch, dass es an magic_quotes (http://www.php.net/manual/de/security.magicquotes.disabling.php) liegt.

@h3ll: So oft geändert und dann war die erste Idee doch richtig? ;)

 
Magic11
03-12-2009, 21:41 
 
@AmicaNoctis: den eintrag von h3ll hab ich zuerst eh auch noch gelesen gehabt mit den magic_quotes ;-)


d.h. ich soll die magic_quotes auf "off" stellen und dann funktioniert mein code wie es sein soll???

 
AmicaNoctis
03-12-2009, 21:46 
 
d.h. ich soll die magic_quotes auf "off" stellen und dann funktioniert mein code wie es sein soll???

Ja, ob's dann funktioniert sehen wir ja dann. Vergiss nicht, den Apache neu zu starten, wenn du es in der php.ini änderst (empfohlen).

Wenn du es nur zur Laufzeit änderst, musst du das in jedem Skript tun, was zum Testen ob es daran liegt ja aber erstmal ausreichen würde.

 
Magic11
03-12-2009, 22:01 
 
also ich muss echt sagen "RESPEKT" !!

das problem lag wirklich an den magic_quotes wobei ich
natürlich zugeben muss dass ich da wohl nie wirklich darauf gekommen
wäre.

ich sag danke für eure hilfe.

Hab die magic_quotes auf off gestellt und schon gings nachdem der apache
neu gestartet wurde.

danke nochmal.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:33 Uhr.