Autor Beitrag
NOS1971
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Do 06.03.14 21:11 
Hallo,

ich würde gern in ein Textfeld einen String speichern in dem es auch " gibt ... wie behandle ich das ? Es sollen html tags in einem textfeld gespeichert werden die auch src="iuhiuhikuh" style="lkdshfgjdhljh" beinhalten können ...

aber das INSERT INTO kommt ja so damit nicht klar ... was tun ?
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Do 06.03.14 22:38 
Wie machst Du es denn? Ich kenne weder SQLite noch Deine Zugriffskomponenten, aber wenn diese SQL-Parameter unterstützen sollten, empfehle ich dringend die Verwendung derselben.
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Do 06.03.14 22:44 
Hier ist ein Beispiel .. ich nutze nur einen sql wrapper ... die url in die db eintragen ist kein thema aber wie handle ich anführungszeichen in einem text

ausblenden Delphi-Quelltext
1:
SQLExecString := 'INSERT INTO ResultURLTable(URL, URLLINK, STATUS, PAGERANK, HTTPSTATUS) VALUES ("' + tempurlstring + '","' + linktagsource + '",-1,-1,-1' + ');';					


tempurlstring enthält eine URL und linktagsource den Source des links also etwas in der art <a href="http://test.de" style="color:#000000;" >Linktext</a>

wenn ich das zusammenführe sieht es so aus

ausblenden Delphi-Quelltext
1:
SQLExecString := 'INSERT INTO ResultURLTable(URL, URLLINK, STATUS, PAGERANK, HTTPSTATUS) VALUES ("http://test.de","<a href="http://test.de" style="color:#000000;" >Linktext</a>",-1,-1,-1' + ');';					


und genau da kommt er halt nicht mit klar
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Do 06.03.14 23:07 
Prinzipiell kannst du deine Anführungszeichen escapen, indem du ein Anführungszeichen durch zwei ersetzt (z.B: stackoverflow.com/qu...to-escape-in-sqlite).

So oder so solltest du vorsichtig sein, was du SQL übergibst. Sonst hat schnell ein Angreifer die Kontrolle über die gesamte Datenbank (SQL Injection).

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)

Für diesen Beitrag haben gedankt: NOS1971
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Do 06.03.14 23:09 
Also es ist so das die DB für eine Webseitenanalyse lokal auf dem Rechner läuft .. also unproblematisch :-) ... ich schaue mal ob ich das so hinbekomme indem ich ein " durch "" ersetze ... :-)
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Do 06.03.14 23:12 
Erstklassig ... das war es :-) nun ist alles da wo es hin soll :-) ...

Vielen lieben Dank und eine gute Nacht
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 07.03.14 09:08 
Generell ist es besser, parametrisierte Abfragen zu verwenden. Das hast Du solche Probleme nicht.

Das sieht dann ungefähr so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
myQuery.Sql.Text := 'INSERT INTO TABELLE (Wert1, Wert2, Wert3) VALUES (:Wert1, :Wert2, Wert3)';
myQuery.ParamByName('Wert1').asInteger := 4711;
myQuery.ParamByName('Wert2').asFloat := 4711.123;
myQuery.ParamByName('Wert3').asString := 'Hallo, "NOS"';
myQuery.ExecSql;


Je nach Zugriffskomponenten kann das ein wenig abweichen. Aber auf diese Art musst Du Dich gar nicht darum kümmern, irgendwas zu escapen. Das ist deutlich sicherer.
Sonst legt vielleicht jemand eine präparierte Seite auf seinen Server, die Deinen Spider abstürzen lässt.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: NOS1971