2016-04-25 6 views
0

Ich mache ein kleines Ajax-Frage-Ergebnis-System. Wenn Benutzer etwas in das Textfeld eingeben, wird das Ergebnis automatisch gesucht und ausgegeben.Backslash vor Anführungszeichen hinzufügen, wenn String sie enthält - PHP

Problem ist, dass jedes Mal Benutzer die Frage eingibt, die "" oder "" enthält - die Suche ist nicht erfolgreich. Gibt es eine Möglichkeit, wie ich Backslash zu "" oder "" innerhalb der Zeichenfolge hinzufügen kann, so würde es ignoriert werden?

Oder gibt es einen Filter, der das "" oder "" ignoriert?

Ich brauche die Frage mit Anführungszeichen durchsucht werden, weil Fragen in der Datenbank sie enthält.

Hier ist der Code:

$q = $_POST['q']; 
// for every " or ' in $q add \ before it 
$results = array(); 
$result = array(); 
$count = 0; 
$stmt = $dbh->prepare("SELECT result FROM quest WHERE quest LIKE '".$q."%'"); 
if($stmt->execute()){ 
    $result = $stmt->fetchAll(PDO::FETCH_OBJ); 
    $count= $stmt->rowCount(); 
} 
if($result != NULL){ 
    foreach($result as $part){ 
     foreach($part as $item){ 
      $results[] = $item; 
     } 
    } 
    echo htmlentities($results[0], ENT_QUOTES, "UTF-8"); 
} 
+0

Sie müssen eine vorbereitete Aussage verwenden, deshalb. MySQL beschwert sich darüber, aber Sie geben es nicht die Chance ;-) –

+0

Ich bin nicht damit einverstanden, dass dies ein Duplikat @Fred -ii- ist. Ich weiß, dass Ihre Absichten die besten sind, aber vielleicht würde jemand nicht erkennen, dass es fast das selbe wie SQL Injection ist (und ich würde nach dieser Art von Frage suchen) :) –

+0

* "Jetzt sehe ich. Danke für Hilfe. Ich werde als korrekt in 6 Minuten markieren. - Dawid Zbiński vor 5 Minuten "* - und das Duplikat ist was, Affen aus dem Regenwald bringen? Wie nennen Sie das http://php.net/manual/en/pdo.prepared-statements.php aus der Antwort, die Sie angenommen haben? und http://stackoverflow.com/a/60496/ von der Täterin. –

Antwort

0

Sie sind nicht bereit, Aussagen richtig verwendet wird, und das ist, warum Sie dieses Problem haben. Wenn Sie vorbereitete Anweisungen richtig verwenden, lösen sie dieses Problem für Sie. Die Dokumente dafür sind eigentlich ziemlich gut.

http://php.net/manual/en/pdo.prepared-statements.php

EDIT: Bitte nehmen Sie die Zeit zu lernen, wie man sie richtig verwenden. Wenn nicht, ist Ihr Code anfällig für SQL-Injection.

+0

Jetzt sehe ich. Danke für die Hilfe. Ich werde in 6 Minuten als korrekt markieren. –