Anführungszeichen in Webformularen
Martin
- perl
Hallo Mitstreiter,
warum streikt mein CGI, wenn in einem der Formularfelder Anführungszeichen eingegeben werden? Es handelt sich um ein HTML-Formular, das von Perl eingelesen wird und per DBI in MySQL geschrieben werden soll. Sind da Anführungszeichen drin, wird das Formular nicht einmal abgeschickt.
Kann ich da die Methode quote() einsetzen?
Vielen Dank, Martin.
Halihallo Martin
warum streikt mein CGI, wenn in einem der Formularfelder Anführungszeichen eingegeben werden?
Weil der SQL-Query-Parser ja nicht wissen kann, was vom Formular als Daten kommt und was Bestandteil des Query-Befehls ist.
Es handelt sich um ein HTML-Formular, das von Perl eingelesen wird und per DBI in MySQL geschrieben werden soll. Sind da Anführungszeichen drin, wird das Formular nicht einmal abgeschickt.
Das glaube ich nicht. Warum soll es nicht abgeschickt werden? - Das liegt höchstens am Browser, sicher nicht am Script.
Kann ich da die Methode quote() einsetzen?
Ja. Oder:
$data_for_sql_query =~ s/"/\"/g;
$data_for_sql_query =~ s/'/\'/g;
je nach dem, was du als Quotingzeichen für den Query benutzt.
wenn du z. B. als Name (Hello "' World") senden willst und folgendes Statement hast:
UPDATE user SET Name="Hello "' World"
hat der SQL-Query-Parser keine Chance, aber bei
UPDATE user SET Name="Hello "' World"
sehr wohl, da er weiss, dass (") und (') Bestandteil der _Daten_ sind und nicht der _Executive_ (sprich Bestandteil des Befehls)
Viele Grüsse
Philipp
Hallo Philipp,
das hat geklappt, danke!
Grüsse, Martin.
Halihallo Martin
warum streikt mein CGI, wenn in einem der Formularfelder Anführungszeichen eingegeben werden?
Weil der SQL-Query-Parser ja nicht wissen kann, was vom Formular als Daten kommt und was Bestandteil des Query-Befehls ist.
Es handelt sich um ein HTML-Formular, das von Perl eingelesen wird und per DBI in MySQL geschrieben werden soll. Sind da Anführungszeichen drin, wird das Formular nicht einmal abgeschickt.
Das glaube ich nicht. Warum soll es nicht abgeschickt werden? - Das liegt höchstens am Browser, sicher nicht am Script.
Kann ich da die Methode quote() einsetzen?
Ja. Oder:
$data_for_sql_query =~ s/"/\"/g;
$data_for_sql_query =~ s/'/\'/g;je nach dem, was du als Quotingzeichen für den Query benutzt.
wenn du z. B. als Name (Hello "' World") senden willst und folgendes Statement hast:
UPDATE user SET Name="Hello "' World"
hat der SQL-Query-Parser keine Chance, aber bei
UPDATE user SET Name="Hello "' World"
sehr wohl, da er weiss, dass (") und (') Bestandteil der _Daten_ sind und nicht der _Executive_ (sprich Bestandteil des Befehls)
Viele Grüsse
Philipp