Thema: Delphi Post-Daten

Einzelnen Beitrag anzeigen

Benutzerbild von jakobwenzel
jakobwenzel

Registriert seit: 31. Aug 2005
Ort: Ingelheim am Rhein
141 Beiträge
 
FreePascal / Lazarus
 
#1

Post-Daten

  Alt 3. Sep 2005, 15:45
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.
Jakob Wenzel
"My store now sells Ninja Weapons!"
Comicverkäufer bei den Simpsons
  Mit Zitat antworten Zitat