![]() |
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... |
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:
und POST kannst du auch ausführen. mit welcher indy komponente,w eiß ich jetz aber nicht.
TidHTTP.Get('http://www.siete.de/script.php?parameter=wert¶m2=wert2');
einfach mal die hilfe bemühen ;) aenogym |
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!? |
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 |
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¶m2=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! |
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
Zitat:
Code:
Ich nehme meistens $_REQUEST (deckt Get und Post-Parameter ab), es gibt auch $_GET und $_POST einzeln.
if (isset($_REQUEST["parameter"]))...
Damit sollte es gehen. EDIT:
Code:
Damit kannst Du schauen, was alles ankommt. Geht sogar noch einfacher mit printr($_POST);
foreach ($_POST as $key => $value)
{ echo("$key = $value\n"); } |
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... |
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
Delphi-Quellcode:
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.
// 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; 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 |
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!?
|
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
Ich sehe gerade, dass Du das hier
Delphi-Quellcode:
machst.
TidHTTP.Post('http://www.seite.de/script.php?parameter=wert¶m2=wert2');
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). |
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¶m2=wert2'); Folgende Fehlermeldung: Es gibt keine überladene Version von 'Post', die man mit diesen Argumenten aufrufen kann. |
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¶m2=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? |
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
|
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! |
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
Delphi-Quellcode:
Responsestring := idHttp.Post...;
Memo.Text := Responsestring; |
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
Habs gerade damit probiert, und werde es noch mit Post probieren.
Delphi-Quellcode:
Und das hier steht im php-Script
procedure TForm1.Button1Click(Sender: TObject);
var Response:String; begin Response := IdHTTP1.Get('http://www.thru-soft.de/test.php?parameter=wert¶m2=wert2'); mem_feedback.Lines.Add(Response); end; <? php foreach ($_POST as $key => $value) { echo("$key = $value\n"); } ?> |
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... |
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. |
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:
<? php
procedure TForm1.Button1Click(Sender: TObject);
var Response,Params:String; TempStringList : TStringList; begin Response := IdHTTP1.Get('http://www.thru-soft.de/test.php?parameter=wert¶m2=wert2'); mem_feedback.Lines.Add(Response); ShowMessage('Fertig'); end; foreach ($_GET as $key => $value) { echo("$key = $value\n"); } ?> scheint falsch zu sein!? Was mache ich nur falsch!? |
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. |
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; |
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
Ich sag nur: Resourcenschutzblock!
|
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
warum so kompliziert, es geht hier doch nur um bestimmte Werte.
Code:
Und dann in Delphi so wie es zuvor für Post beschrieben war!
<?php
if( (isset($_POST['param1'])) && (isset($_POST['param2'])) ) { echo "Alles angekommen!"; }else echo "Fehlerhaft"; ?>
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; |
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:
die Fehlermeldung:
Response := IdHTTP1.Post('http://www.mein-server.de/script.php', LParams);
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? |
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
Kann ich mir nicht erklären, zeig mal Deine komplette Funktion.
|
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
Liste der Anhänge anzeigen (Anzahl: 1)
Habe den scheinbaren Fehler gefunden:
Delphi-Quellcode:
Und der php-Code:
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; <?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!? |
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. |
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! |
Re: Suche Beispiel zur Zusammenarbeit von php und Applikatio
Um mal kurz in die Session reinzuplatzen:
![]() :arrow: ![]() :arrow: ![]() :arrow: ![]() mfg, mh166 |
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:
Einen Log-Eintrag erstellst Du dann mit:
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); } trace('Variable: $test='.$test); bzw. wenn Du am Anfang des Scriptes alles zurücksetzen möchtest: trace('Start', true); grüsse, Hannes |
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