2016-11-25 9 views
0

Ich habe ein Problem mit dem Hinzufügen von etwas Text von meiner Website, wenn dieser Text einige Symbole wie (",?, Skript oder einige SQL-Tags) enthalten ..Kann nicht Symbole beim Einfügen in Tabelle verwenden (php/sql)

hier

ist ein wenig Code, hoffen, dass dies genug ist :)

if(isset($_POST['submit_achievement'])){ 
    $title = $_POST['title_field']; 
    $description = $_POST['description_field']; 
    $sql2 = 'INSERT INTO achievements (title,description) VALUES (' . '"' .$title . '"'. "," . '"' . $description . '"' . ')'; 
    $records2 = mysqli_query($conn,$sql2); 
} 

Wenn Sie mehr Linie von meinem Code müssen nur schreiben, vielen dank! :)

+1

Jetzt ist eine perfekte Zeit, um zu lesen [Wie kann ich SQL-Injektion in PHP verhindern?] (Http://StackOverflow.com/a/60496/689579). Die Verwendung von vorbereiteten Anweisungen und parametrisierten Abfragen (siehe Beispiel 2 in der ausgewählten Antwort) hilft Ihnen, Ihren Fehler zu beheben. – Sean

+0

Offen für SQL-Injection-Angriffe –

+1

Mögliches Duplikat von [Wie kann ich SQL-Injection in PHP verhindern?] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – chris85

Antwort

1

Das Problem hier ist, Sie verwenden keine vorbereiteten Anweisungen, und Sie können die Dinge nicht ordnungsgemäß umgehen, sodass einige Symbole mit SQL in Konflikt stehen sind anfällig für SQL injection bugs.

Schalter parameterized queries und bind_param zu verwenden um dieses Problem zu beheben:

$stmt = mysqli_prepare($conn, "INSERT INTO achievements (title, description) VALUES (?,?)"); 

$stmt->bind_param("ss", $_POST['title_field'], $_POST['description_field']); 

Als Hinweis, versuchen redundante Dinge in Namen wie _field zu vermeiden, dass. Es wird angenommen, dass es ein Feld ist, wenn es in einem Formular eingereicht wird.

Verwandte Themen