Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Suche Beispiel zur Zusammenarbeit von php und Applikation (https://www.delphipraxis.net/54240-suche-beispiel-zur-zusammenarbeit-von-php-und-applikation.html)

torud 30. Sep 2005 11:52


Suche Beispiel zur Zusammenarbeit von php und Applikation
 
Hallo Leute!

Da ich bisher mit all meinen Versuchen gescheitert bin aus einer eigenen Applikation ein php-Script im Internet anzusprechen, ihm Parameter zu übergeben und eventuell einen Rückgabewert zu erhalten, wollte ich mal freundlich nachfragen, ob mir vielleicht jemand einen kleinen Codefetzen zur Verfügung stellen kann. Sicher würde das auch anderen helfen...

Also die Indy-Komponenten habe ich und auch php-Space ist sichergestellt. MySql würde auch zur Verfügung stehen. Ich würde hier auch den schon zu Verfügung stehenden Source-Code einstellen, damit man sehen kann, das ich nicht bei 0 stehe.

Würde mich auch freuen, wenn sich jemand opfert und mir das ein wenig erklärt. Notfalls reicht mir auch ein Link zu einem Tutorial oder zu einer Page, die es auch nur in Ansätzen erklärt. Man bin ich verzweifelt...

Aenogym 30. Sep 2005 11:58

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
hi torud,

da du ja die indy-kompos hast, ist es ganz einfach.

informationen per GET an das script senden:
Delphi-Quellcode:
TidHTTP.Get('http://www.siete.de/script.php?parameter=wert&param2=wert2');
und POST kannst du auch ausführen. mit welcher indy komponente,w eiß ich jetz aber nicht.
einfach mal die hilfe bemühen ;)

aenogym

torud 30. Sep 2005 18:50

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Hallo aenogym!

So weit war ich auch schon, aber in diesem Fall wüsste ich doch nicht, ob die Werte beim Script angekommen und verarbeitet worden sind, und wenn ja, hätte ich auch gern eine Rückmeldung.

Das muss doch gehen, oder!?

teebee 30. Sep 2005 19:10

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Du bekommst bei Get und Post doch Text zurück. Ich mache das so, dass das php-Script je nachdem eine Fehlermeldung oder ein OK zurück gibt. Das Werte ich im Programm aus.

Gruß, teebee

torud 30. Sep 2005 19:21

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Ok, dann sag mir doch bitte in einem kleinen Beispiel, wie ich das umsetzen kann, denn bei mir kommt einfach nichts zurück.

Nehmen wir einfach mal an, ich mach folgendes:

TidHTTP.Post('http://www.seite.de/script.php?parameter=wert&param2=wert2');

Wie muss das dann im php-Script aussehen. damit das funktioniert. Ich habe bisher nirgends eine zusammenhängende Erklärung zu diesem Thema gefunden.

<? php
If (isset ($parameter))
{
if ($parameter!='testString')
{ echo "Rückgabestring ans Programm"
}
}
?>

Danke für helfende Eingriffe und Hinweise!

teebee 30. Sep 2005 19:38

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Zitat:

Zitat von torud
<? php
If (isset ($parameter))
{
if ($parameter!='testString')
{ echo "Rückgabestring ans Programm"
}
}
?>

Das funktioniert nur, wenn Register_Globals gesetzt ist. Ist es aber sus Sicherheitsgründen nicht mehr per default. Deshalb geht es so:
Code:
if (isset($_REQUEST["parameter"]))...
Ich nehme meistens $_REQUEST (deckt Get und Post-Parameter ab), es gibt auch $_GET und $_POST einzeln.
Damit sollte es gehen.

EDIT:
Code:
foreach ($_POST as $key => $value)
 {
  echo("$key = $value\n");
 }
Damit kannst Du schauen, was alles ankommt. Geht sogar noch einfacher mit printr($_POST);

torud 30. Sep 2005 19:41

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Ok, damit weiss ich aber immer noch nicht, ob die Daten beim Script angekommen sind und habe noch nichts zurückbekommen.

Oder ist es so, dass alles was mit Echo im Script behandelt wird als Rückgabe in der Applikation empfangen wird. Kann gar nicht sein, oder? Und über welche Komponente könnte ich dann die Daten empfangen und von mir aus in einer TMemo anzeigen lassen!?

Es sind einfach so viele Fragen...

teebee 30. Sep 2005 19:52

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Delphi-Quellcode:
// Rückgabewerte:
// 0: alles ok
// -1: unbekannter Fehler
// -2: Exception bei der Übertragung
// x: Fehlercode des Scripts
function TdmIndy.DoPost(Script: String; Params: String; Var Response: String): Integer;
Var TempStringList: TStringList;
begin
 Screen.Cursor := crHourglass;
 TempStringList := TStringList.Create;
 Try
  Try
   Params := Params+'u='+PhpUser+#13#10+'p='+PhpPass+#13#10;
   TempStringList.Text := Params;
   Response := http.Post(url+script+'.php',TempStringList);
   //ShowMessage(Response);
   TempStringList.Text := Response;
   If TempStringList[0]='ok' Then
    Result := 0
   Else
    Result := StrToIntDef(TempStringList[1],-1);
  Except
   Result := -2;
  End;
 Finally
  Screen.Cursor := crDefault;
  TempStringList.Free;
 End;
end;
Das ist ein Beispiel aus meinem aktuellen Projekt. http ist ein TIDHTTP. Das zugehörige php gibt OK aus, wenn alles klar war, ansonsten in der ersten Zeile ein 'Error' und in der zweiten einen Zahlencode.

Doch, alles, was Du im Script mit Echo ausgibst, findest Du im Rückgabestring wieder. Ob ein Parameter angekommen ist, kannst Du, so wie Du es oben gemacht hast, mit isset überprüfen.

Gruß, teebee

torud 30. Sep 2005 20:10

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Also ich versuche mal ein Script zu erstellen und ein Programm, um zu zeigen, wie unfähig ich bin und dass es bei mir einfach nicht funzt. Sicher, weil ich die zusammenhänge nicht ganz verstehe. Wo wird zum Besipiel diese Funktion aufgerufen!?

teebee 30. Sep 2005 20:17

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Ich sehe gerade, dass Du das hier
Delphi-Quellcode:
TidHTTP.Post('http://www.seite.de/script.php?parameter=wert&param2=wert2');
machst.
Du hängst Parameter an den URL an, den Du per POST sendest. Macht man so nur bei GET. Wenn überhaupt (habe ich so noch nicht ausprobiert), kannst Du diese Parameter höchstens in $_GET abfragen. Sinnvollerweise übergibt man POST-Parameter als Stringliste. (TIDHTTP.Post gibts in einpaar überladenen Versionen, auch mit String-Streams für die Parameter).

torud 30. Sep 2005 20:18

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Desweiteren erhalte ich mit diesem Code:

IdHTTP1.Post('http://www.seite.de/script.php?parameter=wert&param2=wert2');

Folgende Fehlermeldung:
Es gibt keine überladene Version von 'Post', die man mit diesen Argumenten aufrufen kann.

torud 30. Sep 2005 20:21

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Also damit erhalte ich keine Fehlermeldung mehr:

IdHTTP1.Get('http://www.thru-soft.de/test.php?parameter=wert&param2=wert2');

Aber ich erhalte auch nix zurück, zumindest weiss ich nicht, wie ich meine Rückgabe erhalten soll und in eine Memo schreiben kann. Kommt dann da Deine Funktion zum tragen und wenn ja, wo muss ich die denn aufrufen?

teebee 30. Sep 2005 20:21

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Wie gesagt, bei POST sind URL und Parameter zwei getrennte Argumente.
Delphi-Quellcode:
IDHTTP.Post(url,ParameterStringListe); // jedes Parameterpaar param=wert in einer Zeile der Stringliste

torud 30. Sep 2005 20:23

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Ok, das habe ich nun verstanden. Kommen wir nun noch zum Rückgabewert!
Ich danke Dir für Deine Geduld mit mir!

teebee 30. Sep 2005 20:24

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Delphi-Quellcode:
Responsestring := idHttp.Post...;
Memo.Text := Responsestring;

torud 30. Sep 2005 20:27

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Habs gerade damit probiert, und werde es noch mit Post probieren.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var
   Response:String;
begin
 Response := IdHTTP1.Get('http://www.thru-soft.de/test.php?parameter=wert&param2=wert2');
 mem_feedback.Lines.Add(Response);
end;
Und das hier steht im php-Script
<? php

foreach ($_POST as $key => $value)
{
echo("$key = $value\n");
}

?>

torud 30. Sep 2005 20:32

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Kommt nur ein Leerstring zurück!

Ich habe die php-Datei mal dahingehend geändert:

<? php
$https = $HTTP_POST_VARS;

foreach ($https as $key => $value)
//foreach ($_POST as $key => $value)
{
echo("$key = $value\n");
}

?>

Trotzdem kein Feedback...

teebee 30. Sep 2005 20:37

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Naja, wenn Du per GET schickst, musst Du auch $_GET abfragen :wink:
HTTP_POST_VARS ist eigentlich überholt.

torud 30. Sep 2005 20:40

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Ich musste ja get nehmen, weil bei mir POST nicht geht, da ich immer wieder die Fehlermeldung erhalte, dass es keine Überladene Version von Post gibt.

Ok, wie muss ich denn dann den Code im php gestalten, damit ich mit GET arbeiten kann? Tut mir leid!

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var
   Response,Params:String;
   TempStringList : TStringList;
begin
 Response := IdHTTP1.Get('http://www.thru-soft.de/test.php?parameter=wert&param2=wert2');
 mem_feedback.Lines.Add(Response);
 ShowMessage('Fertig');
end;
<? php
foreach ($_GET as $key => $value)
{
echo("$key = $value\n");
}
?>

scheint falsch zu sein!?
Was mache ich nur falsch!?

teebee 30. Sep 2005 20:43

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Dann benutze POST doch so, wie ich es oben beschrieben habe. Mit GET bist Du in der Gesamtlänge der Parameterliste auf 256(?) Zeichen begrenzt. Schreibe Dir die Parameter in eine Stringliste, und nimm POST.

Wenn Du doch GET nehemen willst, dann musst Du im php natürlich aucg $_GET abfragen und nicht $_POST.

SirThornberry 30. Sep 2005 20:52

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
mit post muss es so aussehen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   Response:String;
   LParams: TStringlist;
begin
  LParams := TStringlist.Create;
  LParams.Add('parameter=wert');
  LParams.Add('param2=wert2');
  Response := IdHTTP1.Pos('http://www.thru-soft.de/test.php', LParams);
  mem_feedback.Lines.Add(Response);
  LParams.Free;
end;

teebee 30. Sep 2005 20:56

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Ich sag nur: Resourcenschutzblock!

Eichhoernchen 30. Sep 2005 23:02

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
warum so kompliziert, es geht hier doch nur um bestimmte Werte.


Code:
<?php

if( (isset($_POST['param1'])) && (isset($_POST['param2'])) ) {
  echo "Alles angekommen!";
}else echo "Fehlerhaft";

?>
Und dann in Delphi so wie es zuvor für Post beschrieben war!

Delphi-Quellcode:
var
   Response:String;
   LParams: TStringlist;
begin
  LParams := TStringlist.Create;
  LParams.Add('param1=wert');
  LParams.Add('param2=wert2');
  Response := IdHTTP1.Post('http://www.mein-server.de/script.php', LParams);
  if response = 'Alles angekommen!'
    then //hier für angekommen
    else if response = 'Fehlerhaft'
            then //Variablen nicht übertragen
            else //Seite nicht erreicht
end;

torud 1. Okt 2005 08:54

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Also ich würde es ja gern so machen wie von Euch allen beschrieben, aber ich bekomme immer noch bei
Delphi-Quellcode:
 Response := IdHTTP1.Post('http://www.mein-server.de/script.php', LParams);
die Fehlermeldung:

Es gibt keine überladene Version von 'Post', die man mit diesen Argumenten aufrufen kann.

Bei Euch scheint das kein Problem zu sein. Warum nur???
Es ist dabei egal, ob ich davor die Response-Variable setze oder nicht. Liegt es an meiner Version der Indy oder was mache ich falsch?

teebee 1. Okt 2005 09:21

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Kann ich mir nicht erklären, zeig mal Deine komplette Funktion.

torud 1. Okt 2005 09:34

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe den scheinbaren Fehler gefunden:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   Response:String;
   Stream:TStringStream;
   LParams: TStringlist;
begin
  Stream:=TStringStream.Create('');//Rückgabe-Stream erstellen
  LParams := TStringlist.Create;
  LParams.Add('param1=wert');
  LParams.Add('param2=wert2');
  LParams.Add('param3=wert3');
  LParams.Add('param4=wert4');
  IdHTTP1.Post('http://www.thru-soft.de/test.php', LParams, Stream);
  Response:=Stream.DataString;
  Showmessage(Response);
  mem_feedback.Lines.Add(Response);
  LParams.Free;
  Stream.Free;
end;
Und der php-Code:
<?php
foreach ($_POST as $key => $value)
{
echo("$key.": ".stripslashes($value)."\n\n");
}
?>

Ergebnis? Keins!
Ich erhalte nur einen Leerestring zurück und sonst nix.
Dabei ist es doch gemaess php-Code so, dass ich eigentlich den Parameternamen und den Wert wiederbekommen sollte. Also nun ist zwar vom Code her alles ok, aber es funzt einfach nicht.

Warum nur?

Muss ich vielleicht noch irgendwas in der idhttp-Kompo einstellen?
Demnaechst sende ich vielleicht das ganze Projekt!?

torud 1. Okt 2005 11:09

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Das verrückte ist, dass ich das Script mittels einem HTML-Formular ansprechen kann und genau das erhalte, was ich übergebe, wenn ich mir ein Echo ausgeben lasse, aber wenn ich es mit der idHttp-Komponente versuche, bekomme ich immer einen Leerstring zurück, bzw. einen Vorgabestring, den ich nun im php-Script eingebaut habe, aber keine übergebenen Parameter.

<?php
$https = $HTTP_POST_VARS;
$text="Sie haben einem Script Informationen übermittelt!\n
__________________________________________________ ______
\n";

foreach ($https as $key => $value)
{
$text = $text."".$key." : ".stripslashes($value)."\n\n";
}
echo($text);
?>

Hat als Ergebnis im Programm:
"Sie haben einem Script Informationen übermittelt!"
"_________________________________________________ _______"

Das ist alles. Der Rest fehlt leider!

Es kann eigentlich auch nicht am php-Space liegen, da es zum einen von einem HTML-Formular aus funktioniert und zum anderen ich es auch noch auf anderem Space probiert habe, mit gleichem Misserfolg.

Eichhoernchen 1. Okt 2005 12:05

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Liste der Anhänge anzeigen (Anzahl: 1)
welche Indy version nutzt du denn, denn bei mir funktioniert es!


EDIT: hab jetzt mal nen PRogramm geschrieben was auf deine Seite Postet, und es klappt, ich hab den Quellcode angehängst!

mh166 1. Okt 2005 15:09

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Um mal kurz in die Session reinzuplatzen:

GruppeCN hat auf seiner Webseite ein solches experiment durchgeführt:
:arrow: Kommunikation mit externer Software - 1. PHP Server
:arrow: Kommunikation mit externer Software - 2. Flash Client
:arrow: Kommunikation mit externer Software - 3. Delphi Client

mfg, mh166

noch_ein_hannes 1. Okt 2005 16:18

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Hi,

schau mal in der PHP-Doku unter "error_log()". Damit kannst Du prima prüfen was Dein PHP so alles macht, indem Du einfach die gewünschten Ausgaben in eine Log-Datei schreibst, bzw. sie Dir als Mail senden lässt.

Ich mache das z.B. gern so:

Delphi-Quellcode:
function trace($strMessage, $clear=false) {
   $strLogFile = '/absoluter/pfad/zu/deiner/log/datei/trace_log.txt';
   if(!empty($clear)) unlink($strLogFile);

   $strMessage = '['.(date('H:i:s')).'] '.$strMessage;
   error_log($strMessage."\n", 3, $strLogFile);
   }
Einen Log-Eintrag erstellst Du dann mit:
trace('Variable: $test='.$test);

bzw. wenn Du am Anfang des Scriptes alles zurücksetzen möchtest:
trace('Start', true);

grüsse,
Hannes

torud 1. Okt 2005 18:38

Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
 
Es scheint an der Indy-Version zu liegen, denn das Programm läuft bei mir, aber ewnn ich das Projekt öffnen will erhalte ich diverse Fehlermeldung zur idHttp-Kompo, der diverse Eigenschaften fehlen. Ich habe allerdings von anderen Scripten durchaus eine Antwort erhalten.

Ok, ich schaue mal welche Version ich habe und notfalls muss ich eben updaten.

Ich muss nochmal kurz nachfragen.

1. welche Indy-Version brauche ich?
2. Würde es reichen die idHTTP.dcu mit der aktuellsten zu überspielen?
Ich frage, weil sich die 9.00.18 nicht installieren lässt


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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