Post-Daten werden normalerweise dafür genutzt, Daten aus
HTML-Formularen an bearbeitende PHP- oder CGI-Sckripte zu senden. Mit den
Indy-Komponenten lassen sich solche Formulare imitieren. Dadurch lässt sich ein solches Formular direkt in die Anwendung integrieren. Aber auch zum Datenaustausch mit einem solchen Skript kann die Funktion genutzt werden.
Die benötigte Funktionalität wird von der Komponente TidHTTP zur Verfügung gestellt.
Folgende Komponenten werden auf dem Test-Formular benötigt:
(Das Test-Formular soll ein einfaches Konakt-Formular darstellen)
- Eine Edit-Komponente EMailEdit (für die E-Mail-Adresse)
- Eine Memo-Komponente TextMemo (für den Text)
- Noch eine Memo-Komponente ResponseMemo (für den zurückgegebenen Text)
- Eine TidHTTP-Komponente IdHTTP
- Und eine Button Komponente SendButton (zum Senden)
Außer den Namen können alle Standardeigenschaften der Elemente so belassen werdne
In die Ereignisbehandlung OnClick des Buttons muss jetzt geschrieben werden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
PostStrings: TStringList;
//Zusammengesetze Post-Daten
ResponseStream:TStringStream;
//Ausgabe der Aufgerufenen Seite
ausgabe:
String;
//Ausgabe der aufgerufenen Seite als String
zeile:
String;
//Zum zeilenweisen Ausgeben der Rückgabe der Aufgerufenen Seite benutzte Zwischenvariable
i:Integer;
//Zähler für die For-Schleife
begin
Stream:=TStringStream.Create('
');
//Rückgabe-Stream erstellen
Strings := TStringList.Create;
//Post-Daten-StringList erstellen
try
Strings.Add('
EMail='+EMailEdit.Text);
//Post-Daten in die StringList eintragen
Strings.Add('
Text='+TextMemo.Lines.Text);
try
idHTTP.Post('
http://deineSeite.de/DeineDatei.php', Strings,stream);
//Datei abrufen
ausgabe:=Stream.DataString;
//Ausbage-Sring die zurückgegebenen Daten zuweisen
zeile:='
';
//Zwischenvariable leeren
for i:=1
to Length(ausgabe)
do begin //For-Schleife zum formatieren der Ausgabe (Zeilenumbrüche korrekt darstellen)
if (ausgabe[i]=#13)
and (ausgabe[i+1]=#10)
then begin //Bei Zeilenumbruch
ResponseMemo.Lines.Add(zeile);
zeile:='
';
end else if s[i]<>#10
Then zeile:=zeile+ausgabe[i];
end;
ResponseMemo.Lines.Add(steil);
except //Fehlerbehandlung
on E:
Exception do
showmessage('
Error encountered during POST: ' + E.
Message);
end;
finally
Strings.Free;
Stream.Free;
end;
end;
Zum Abschluss noch ein Beispiel für eine bearbeitende PHP-Seite: (die Anfrage würde normalerweise noch irgendwo abgespeichert werden, darauf habe ich hier verzichtet, die Post-Daten werden lediglich formatiert zurückgegeben)
Code:
<?php
echo 'E-Mail: '.$_POST["EMail"]; //Ausgeben der E-Mail-Adresse
echo Chr(13).Chr(10); //Zeilenumbruch
echo 'Text: '.$_POST["Text"];
?>
Bitte beachten: Php-Seiten müssen immer über einen (lokalen) Web-Server aufgerufen werden, damit sie interpretiert werden.