Nick: Welche Funktion beim eintragen / austragen ?

Hallo,

Beispiel ich habe folgenden Text:

"Hallo

Cool wie ähnlich wir uns sind!
200€"

Und ich möchte das der GENAU so formatiert nacher wieder ausgegeben werden kann, aber das eintragen trotzdem sicher ist vor SQl-Injenktions.

DB: MySQL
Sprache: PHP

Wie mach ich das am besten, welche FUnktionen verwende _wann_ .. ich kenne vom Namen her diese;

mysql_real_escape_string()
htmlentities()
htmlspecialchars()

lg

Der Nick

  1. Guten Tag.

    das eintragen trotzdem sicher ist vor SQl-Injenktions.

    Wie mach ich das am besten, welche FUnktionen verwende _wann_ .. ich kenne vom Namen her diese;

    Na, wenn du die Namen schon kennst, wie wäre es, wenn Du einfach mal in die Bedienungsanleitung schaust? Da steht nämlich lang und breit drin, was sie machen.

    mysql_real_escape_string()
    htmlentities()
    htmlspecialchars()

    Guten Abend.
    Alfred J. Quaak

  2. echo $begrüßung;

    Und ich möchte das der GENAU so formatiert nacher wieder ausgegeben werden kann, aber das eintragen trotzdem sicher ist vor SQl-Injenktions.

    Der Grundsatz lautet: Werte immer (und nur) für den jeweilgen Kontext behandeln. Bringst du einen Wert in einen SQL-Statement-Kontext, behandelst du ihn gemäß dessen Regeln. Bringst du ihn in einen HTML-Kontext behandelst du ihn gemäß den HTML-Regeln. Und so weiter.

    HTML und SQL-Statements sind beides Kontexte, die Anweisungsteile und Daten gemischt übertragen werden. Deshalb muss man bestimmte Vorkehrungen treffen, damit beide Teile auseinandergehalten werden können (Quotierung und Maskierung).

    Gelegentlich kommt es vor, dass beim Transport von Daten selbige beim Empfänger zusammen mit der "Transportsicherung" ankommen. Diese ist dann vor der eigentlichen Verarbeitung der Daten zu entfernen. PHP kennt ein Feature namens Magic Quotes. Das stellt sich so ähnlich wie eine Transportsicherung dar. Ankommende Daten in den Arrays $_GET/$_POST/usw. müssen gegebenenfalls vor einer Weiterverarbeitung erst von den Auswirkungen der Magic Quotes befreit werden.

    Wie mach ich das am besten, welche Funktionen verwende _wann_ .. ich kenne vom Namen her diese;
    mysql_real_escape_string()

    Beim Einfügen der Daten in das SQL-Statement. Aus der Datenbank zurück kommen die Daten so wie sie vor dem mysql_real_escape_string() waren.

    htmlentities()

    Diese Funktion ist in den meisten Fällen zu viel des Guten, weil sie neben den HTML-eigenen Zeichen auch alle Nicht-ASCII-Zeichen behandelt, und das ist nicht zwingend notwendig. Die Fälle, in denen ein bestimmtes Zeichen nicht mit der aktuell verwendeten Kodierung repräsentiert werden kann, will man nicht haben. Stattdessen kann man UTF-8 nehmen, das kennt alle möglichen und unmöglichen Zeichen.

    htmlspecialchars()

    Diese Funktion braucht man, um Daten für den HTML-Kontext aufzubereiten, sprich: die HTML-eigenen Zeichen HTML-gerecht zu behandeln.

    In deinem Fall ist auch noch die Eigenart HTMLs zu beachten, dass alle Whitespace-Zeichen, also auch Zeilenumbrüche, als einfaches Leerzeichen dargestellt werden. Das lässt sich nur umgehen, wenn man den Text als vorformatiert auszeichnet (<pre>) oder die Zeilenumbrüche explizit durch das <br>-Element repräsentiert. Um Zeilenumbrüche in <br>-Elemente umzuwandeln, kennt PHP die Funktion nl2br().

    echo "$verabschiedung $name";