2016-09-29 3 views
0

Ich verwende ein HTML-Eingabeelement, um Daten von einem Benutzer zu akzeptieren und in einer MySQL-Datenbank zu speichern. Dazu benutze ich PHP und mysqli, um eine vorbereitete Anweisung zu erstellen.PHP/SQL vorbereitete Anweisung mit doppelten Anführungszeichen

Das funktioniert sehr gut, bis ich versuche, eine Eingabezeichenfolge zu akzeptieren, ein doppeltes Anführungszeichen (") enthält. Wenn die Eingabezeichenfolge ein Anführungszeichen enthält, gespeichert wird die Daten bis zu den doppelten Anführungszeichen die Zeichenfolge sein.

Zum Beispiel:

Ich sah eine 7'9 "Person.

ich mir 7'9

sah mich hoch und niedrig gesucht, aber keine Lösung finden kann:

Wird als gespeichert werden. Ich habe versucht, mysqli_real_escape_string, aber das Hinzufügen von Backslashes nur um aussagekräftige Zeichen zu entkommen. Wenn die umgekehrten Schrägstriche mit der vorbereiteten Anweisung verknüpft werden, werden sie wörtlich interpretiert und das doppelte Anführungszeichen unterbricht die Zeichenfolge weiterhin. So würde mein Beispiel sein:

ich eine 7 \ 'sah 9

Ich dachte, vielleicht sogar die PHP wurde nicht die gesamte Zeichenfolge aus dem Eingangselement bekommen, aber wenn ich des Elements Wert Echo, ich tun Sieh dir die ganze Zeichenfolge an.

Hier ist ein Beispielcode. Ich habe einige geschäftliche Details entfernt, aber das versuche ich im Allgemeinen.

$sqlSave = $objConnection->prepare('update tbl set Answer=? where ID=?;'); 
$sqlSave->bind_param("si", $sqlAnswer, $sqlID); 

$sqlSave->execute(); 

Ich fühle mich wie ich etwas offensichtlich fehlen, so bitte vergib meine Unwissenheit. Jede Hilfe oder zusätzliche Information wird geschätzt.

+0

Was ist die Länge der Spalte? Doppelte Anführungszeichen nicht ein Problem haben sollte, mit der Code, den du zeigst – chris85

+0

Die Spalte ist VARCHAR (200). – Josh

+1

Die Datenbank hat es abgeschnitten, oder es in einem Browser hat es abgeschnitten? Wenn Sie in einem Element wie "Eingabe" ausgeben Das doppelte Zitat schließt das Attribut "value". – chris85

Antwort

1

Ja, in der Tat ist es etwas sehr offensichtlich. Sehen Sie sich einfach den generierten HTML-Code an und Sie erhalten sofort einen Hinweis.

Und dann auswendig lernen, dass HTML-Attribut immer sein muß codierte htmlspecialchars()

+0

Vielen Dank! Es wurde in SQL korrekt gespeichert, aber wurde abgeschnitten im Eingabeelement, wenn ich den Wert zugewiesen habe. htmlspecialchars() funktioniert fabelhaft! – Josh

0

ich mich geirrt. Das PHP speicherte die Daten korrekt. Die Daten wurden abgeschnitten, als sie im HTML-Eingabeelement angezeigt wurden.

Mit htmlspecialchars() umgewandelt, die "" und angezeigt alles.

für das Helfen Sie mir diese fangen an alle danken.

Verwandte Themen