Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy und PHP-Post (https://www.delphipraxis.net/95570-indy-und-php-post.html)

halinchen 9. Jul 2007 17:27


Indy und PHP-Post
 
Hi!

Ich möchte eine Highscore mit PHP machen. Das Script soll die Daten empfangen. Im Moment hänge ich die Daten an die Url dran. (test.php?name=xxx&punkte=xxx&schlüssel=xxx) Ich möchte das aber über die POST-Methode machen, da bei der Get-Methode der Platz begrenzt ist.

Wenn ich Indy 10 nutze gibt es kein Methode, die irgentwie auf Post schließen lässt. Mit der Forumsuche habe ich immer nur idHTTP.Post(...) gefunden. Was muss ich in der 10er Version nehmen?

Wenn ich folgenden Code habe, was muss ich dann Indy übergeben? Ich schätze mal einen StringStream, aber wie genau muss der Inhalt dann sein? So etwa?

param1=xxx
param2=xxx
...
paramn=xxx


Code:
<?php
  echo "$_POST['param1']";
  echo "$_POST['param2']";
  echo "$_POST['paramn']";
?>

alcaeus 9. Jul 2007 18:17

Re: Indy und PHP-Post
 
Der Param-String ist genauso aufgebaut wie der Query-String:
Code:
foo=bar&bar=foo&zyx=1
Das Ganze muesste als Parameter fuer die Post-Methode reinkommen, hab aber grad keine Indys zur Hand.

Greetz
alcaeus

m.wollert 9. Jul 2007 19:27

Re: Indy und PHP-Post
 
Hallo halinchen,

ich habe dies so gelöst - aber achtung, ich lade in meinem Fall eine Datei hoch.
Du möchtest vermutlich nur einzelne Felder hinzufügen.

Einfach ein wenig reinarbeiten und anpassen. (ja... es wäre auch mit nicht so viel drum herum gegangen ;)

War eine quick and dirty-Implementierung

Ich hoffe geholfen zu haben.

Delphi-Quellcode:
var
  FormDataStream : TIdMultiPartFormDataStream;
  StringStream: TStringStream;
  PostVars: TStringList;
  FileStream: TFileStream;
  cUrl : string;
  cFilename : string;
  nIdx : integer;
  cOperation,
  cValue : string;
  IdHTTP : TIdHTTP;
begin
  IdHTTP := CreateIdHTTP;
  cFilename := FFilename;
  PostVars := TStringList.Create;
  StringStream := TStringStream.Create('');
  FileStream := TFileStream.Create(cFilename, fmOpenRead or fmShareDenyWrite);
  FormDataStream := TIdMultiPartFormDataStream.Create;
  try
    StringStream.CopyFrom(FileStream, FileStream.Size);
    // cUrl := 'http://ltwollert/plannerCentralOl/upload_test.php';
    cUrl := FUploadURL;
    FormDataStream.AddFile('file', cFilename, 'multipart/form-data');
    //FormDataStream.AddFormField('description', Filename);
    cOperation := 'operation';
    cValue    := 'appts';
    FormDataStream.AddFormField(cOperation, cValue);
    //FormDataStream.AddFormField('operation', 'appts');
    FHttpResult := IdHTTP.Post(cUrl, FormDataStream);;
  finally
    StringStream.Free;
    PostVars.Free;
    FileStream.Free;
    FormDataStream.Free;
  end;
end;
Grüße
Michael

SirThornberry 9. Jul 2007 19:43

Re: Indy und PHP-Post
 
Je nach indy-version ist es ganz einfach
Delphi-Quellcode:
var
  lparams: TStringList;
begin
  lparams := TStringList.Create();
  try
    lparams.Add('param1=wert1');
    lparams.Add('param2=wert2');
    lparams.Add('param3=wert3');
    Ausgabe := Http1.Post(YourUrl, lparams);
  finally
    lParams.Free;
  end;
end;

halinchen 10. Jul 2007 10:24

Re: Indy und PHP-Post
 
Also er kennt den Befehl Post doch. Aber er wird nicht angezeigt wenn ich idHTTP1. eingebe. (Ich meine in dieser Liste die dann erscheint.)

Danke für eure Hilfe! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.

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