Frage

Ich bin ziemlich frustriert. Ich möchte in der Lage sein, in meine Datenbanknamen einfügen mit einfachen Anführungszeichen -. B. O'Connor

Also, wenn es in die DB Einfügen, das tue ich:

 $lname = mysql_real_escape_string($_POST['lname']);

Und ich $ lname in die DB dann einfügen.

Wenn es in der DB ist, scheint es, als O \ 'Connor.

Also, wenn ich in meiner Web-Anwendung, die Nachnamen erinnern ist, werde ich verwenden:

 $lname = stripslashes($r["lname"]);

Das alles scheint gut zu funktionieren. Allerdings habe ich eine Suchfunktion, die nach Nachnamen suchen und die Ergebnisse anzuzeigen. Als ich suche, ich habe für O \ 'Connor suchen, um alle Ergebnisse zu erhalten.

Sie sehen, nachdem ich zu suchen, die Textbox automatisch den Wert speichert, was für gerade gesucht (mit Sitzungen). Also mein Code ist dies:

 $search = mysql_real_escape_string($_GET['search']);
 $_SESSION['search'] = $search;

Wie ich schon sagte, wenn ich suche, ich habe „O \ verwenden‚Connor“, und dann, nachdem ich zu suchen, wird der Wert in der Textbox„O \\\\‘Connor“

Es ist schon frustrierend versucht, dies herauszufinden. Weiß jemand, was ich falsch mache? Dank!

EDIT:

Hier ist meine php5.ini Datei, in Bezug auf Magie Zitate:

 ; Magic quotes
 ;

 ; Magic quotes for incoming GET/POST/Cookie data.
 magic_quotes_gpc = On

 ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
 magic_quotes_runtime = Off

 ; Use Sybase-style magic quotes (escape ' with '' instead of \').
 magic_quotes_sybase = Off

Allerdings meine Website auf GoDaddy gehostet, und ich habe keine Berechtigung, die Datei zu bearbeiten: (

War es hilfreich?

Lösung

Es klingt wie Magic Quotes in der PHP-Konfiguration aktiviert werden.

Um zu überprüfen, ob es tatsächlich aktiviert ist:

echo get_magic_quotes_gpc();

deaktivieren, bearbeiten Sie Ihre Datei php.ini:

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

oder fügen Sie diese Zeile in der .htaccess:

php_flag magic_quotes_gpc Off

Andere Tipps

Magie Zitate sind aktiviert. Das bedeutet, dass alles, was in der Post gegeben oder erhalten oder andere ähnliche Orte automatisch entkam damit beginnen Programmierer müssen so viel darüber keine Sorge. Es ist in der aktuellen Version von PHP als veraltet, wenn ich mich richtig erinnere.

Was Sie tun möchten, um damit umzugehen, und haben das Skript das gleiche von jeder Konfiguration ausgeführt ist folgende:

function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    return mysql_real_escape_string($value);
}

Sie möchten weiter modifizieren diese nicht-numerische Daten in Anführungszeichen zu setzen, das eine gemeinsame Variante ist, aber ich finde es besser ist, diese Zitate manuell zu setzen.

Little Bearbeitung auf die fixinput Funktion zu überprüfen, ob Ihre Installation von PHP in die Tat echte Escape-Zeichenfolge hat (ältere Versionen nicht):

  function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    if (function_exists('mysql_real_escape_string')) {
      return mysql_real_escape_string($value);
    }
    else {
      return mysql_escape_string($value);
    }
  }
  

Wenn es in der DB ist, scheint es, als O \ 'Connor.

     

Also, wenn ich in meiner Web-Anwendung, die Nachnamen erinnern ist, werde ich verwenden:

 $lname = stripslashes($r["lname"]);

Falsch! Wenn Sie Strings mit mysql_real_escape_string entkommen, werden sie nur in der Abfrage entkommen. Die Datenbank interpretiert die Abfrage, so dass die Daten enden in der Datenbank ohne Escape-Zeichen. Sie nicht hat stripslashes zu verwenden, wenn Daten aus der Datenbank ziehen. Wenn Sie denken, Sie tun, dann bedeutet dies, dass die Daten in Ihrer Datenbank verstümmelt ist. Wahrscheinlich, weil Sie auf Magic Quotes gemacht haben.

Sie sollten:

  • magic quotes deaktivieren oder umkehren ihre Wirkung global. Siehe das Handbuch .
  • Verwenden Sie entweder gebundenen Parametern (Die beste Lösung) oder alle Variablen mit mysql_real_escape_string entkommen. Sie sollten dies tun, wo Sie die Abfrage bauen.
  • Sie nichts auf dem Material, das Sie aus der Datenbank herausziehen.

Insbesondere dürfen keine Funktion a la die fixinput und Varianten machen, die hier in einigen der Antworten aufgeführt ist. Es ist der falsche Weg, um das Problem zu lösen, denn es werden alle Daten vermasseln, die nicht von einer http-Anfrage kommt.

Ich prüfe nicht für get_magic_quotes_gpc ist ein / aus.

ich $lname = mysql_real_escape_string(stripslashes($_POST['lname'])); nur so, wenn es keine zitierte Text ist es gewohnt Streifen schlitzt .. wenn es zitiert wird, es wird sie abzustreifen.

und es wirkt Wunder für mich!

Alles, was Sie tun müssen, um die Suchabfrage nehmen, mysql_real_escape_string es, und es sollte völlig in Ordnung sein. Der beste Weg, dies aber zu tun ist, nie speichert sie entkommen und stattdessen nur zu entkommen es ist alles in die Datenbank geht.

Stattdessen dies tun:

 $_SESSION['search'] = $_GET['search'];
 $search = mysql_real_escape_string($_GET['search']);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top