Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   idhttp.get funktioniert nicht (https://www.delphipraxis.net/162379-idhttp-get-funktioniert-nicht.html)

Tobinator 19. Aug 2011 18:44

Datenbank: mysql • Version: 5.0.91 • Zugriff über: php/Indy

idhttp.get funktioniert nicht
 
Hi,


ich habe mir folgendes zusammengebastelt:

Delphi-Quellcode:
        sql:=ReplaceStr(sql,'=','%3D');
        sql:=ReplaceStr(sql,' ','%20');
        f:=TStringStream.Create;
        s:='http://www.meine-url.de/Post.php?SQL='+sql;
        try
          idhttp.Get(s,f);
        except
          on E:Exception do
            showmessage(E.Message);
        end;
        f.SaveToFile('result.txt');
        f.Free;
in sql steht ein UPDATE-Statement (in diesem Beispiel, später auch Insert und Delete). Das ganze wird an eine PHP-Datei (Post.php) gesendet und soll von dort aus in eine mysql-Datenbank gespeichert werden.

leider funktioniert das nicht wie gewünscht:
Delphi-Quellcode:
idhttp.Get(s,f);
wirft eine Exception (eidconnclosedgracefully), wenn ich aber den Wert von s speichere und direkt in Firefox eingebe, dann wird alles korrekt ausgeführt. Das Update-Statement wird korrekt zurück-übersetzt ('%20' ->' '; '%3D'->'=') und auch korrekt eingefügt.

Der Fehler muss dann also an dem
Delphi-Quellcode:
idhttp.Get(s,f);
liegen, oder?

PS: Ich muss gestehen, das ich von Indy noch nicht so viel ahnung habe und mir da nur provisorisch was zusammengebastelt habe. Vllt. ist der Fehler für euch ja offensichtlich...

Danke schonmal und viele Grüße

Tobi.

Daniela.S 19. Aug 2011 18:51

AW: idhttp.get funktioniert nicht
 
Achtung: Aus Sicherheitsgründen ist das Selbstmord! SQL Injektion ist eine der einfachsten Möglichkeiten einen WebServer samt Datenbank in die ewigen Jagdgründe zu schicken. Ein Angreifer kann dir so ganz leicht Befehle unterjubeln.

Du solltest dir überlegen nur Parameter zu übergeben, diese auch auf Gültigkeit prüfen und den SQL Befehl erst im php script erstellen. Eventuell verschlüsselt oder per https.

Tobinator 19. Aug 2011 19:38

AW: idhttp.get funktioniert nicht
 
Ja, das habe ich mir auch gedacht, das soll auch nur eine Übergangslösung sein. Das Problem ist nur, das das Programm bis nächtes Woche so einigermaßen funktionieren soll (ist nur für mich privat, nichts für einen Kunden oder so). Und da ich das Wochenende über kaum Zeit haben werde und unter der Woche kein Internet zu probieren habe, kann ich es erstmal nur so lösen.
Das ganze wird natürlich so schnell wie möglich geändert. Ich fange auch gerade erst an mit Netzwerk-/Internetprogrammierung.

Aber bis ich es dann richtig machen kann, müsste diese version erstmal funktionieren. Kann mir da jemand helfen?

Tobinator 19. Aug 2011 21:51

AW: idhttp.get funktioniert nicht
 
Ok, ich habs jetzt vorerst über idhttp.post gelöst.

Jetzt macht er nur aus Straße Stra?e. Wie kann ich das ändern?

Delphi-Quellcode:
myheader.AddFormField('SQL',sql);
Id.Post('http://www.meine-url.de/Post.php',myheader);

geskill 19. Aug 2011 22:39

AW: idhttp.get funktioniert nicht
 
Hi,
probiers mal so:
Delphi-Quellcode:
myheader.AddObject('SQL', '', '', TStringStream.Create(sql, TEncoding.UTF8));
Id.Post('http://www.meine-url.de/Post.php',myheader);
Dadurch wird der SQL Wert in UTF-8 an den Server gesendet.

Grüße

Tobinator 19. Aug 2011 23:03

AW: idhttp.get funktioniert nicht
 
Danke, Danke, Danke!!!

Es funktioniert!

ich musste nur zwei parameter tauschen:

statt
Delphi-Quellcode:
myheader.AddObject('SQL', '', '', TStringStream.Create(sql, TEncoding.UTF8));
musste ich
Delphi-Quellcode:
myheader.AddObject('SQL', '', TStringStream.Create(sql, TEncoding.UTF8), '');
machen.

Aber es funktioniert!!
nochmal Danke :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz