Sorry, war gestern nicht mehr online und konnte das nicht weiter ausführen.
Die Tabelle enthält Textbausteine für meine Web-CGI, quasi ein Mini-CMS für Arme.
Sobald aus dem Webrequest ersichtlich ist, welche neue Web-Seite angefordert wurde, wird die
Query geöffnet, die da lautet:
SQL-Code:
Select * From
Webtexte
Where
Seite='*'
or Seite='Name der angeforderten Seite'
or Kategorie='Menuitem'
Das einzige was an dem Statement variabel ist ist der Name der angeforderten Seite. In Delphi sieht die Stelle so as:
Code:
Webtexte.SQL.Add('or Seite = ');
Webtexte.SQL.Add(QuotedStr(GetPagename(RequestedPage)));
Die GetPagename-Funktion liefert nur definierte Namen zurück, so dass ich mich nicht um
SQL-Injektion o.ä. sorgen musste und
keine Parameter benutze!
Wie man sieht enthält auch die Where-Klausel keinen Vergleich mit einem Text der einen Doppelpunkt enthält.
Es gibt dann eine Funktion, die aus der bereits ohne Fehler geöffneten Datenmenge einen Textbaustein anhand der ID sucht und in dieser tritt mMn der Fehler auf. Sinngemäß (hab Delphi noch nicht auf):
Delphi-Quellcode:
function GetContentFromID(ID:String):String;
begin
if Webtexte.Active then
begin
Webtexte.Locate('ID',ID,[]);
Result:=Webtexte.FieldByName('DE').AsString;
end;
end;
Es werden während der Laufzeit der CGI mehrere Textbausteine mit verschiedenen ID's aus der Datenmenge geladen, daher weiß ich, dass diese sich auf jeden Fall öffnet. Nur halt der eine Datensatz, der einen Doppelpunkt enthält, macht halt Probleme. Der Text in dem Datensatz ist:
"Gehen Sie dabei wie folgt vor:"
Laß ich den Doppelpunkt weg, funzt halt alles.
Ich hoffe so wird klarer warum ich das nicht nachvollziehen kann.