CGI anwendung mit dem C++Builder6
-
du brauchst nicht umbedingt einen PageProducer, nur die richtige Ausgabe
z.B.void __fastcall TWebModule1::WebModule1WebActionItem1Action( TObject *Sender, TWebRequest *Request, TWebResponse *Response, bool &Handled) { Response->ContentType = "text/html"; Response->Content = "<H1>test<H1>"; }PageProducer ist gut für komplexe HTML-Seiten geeignet, wo man HTML-Tags verwendet, die dann im Programmcode durch entsprechende Werten ersetzt werden
schau mal hier, ist zwar in Delphi und Englisch, aber die Beispiele sind gut
-
danke dir. das mit deiner variante würde nun tatsächlich klappen. jedoch stehe ich immer noch auf dem schlauch bezüglich actions und den parametern. ich weiss z.B. nicht wie ich nur auf ein bestimmtes action reagieren soll. also z.B. so:
.../cgi-bin/Project1?action=DoSomething
wie ich nun also auf DoSomething reagieren soll. wenn action leer ist oder etwas anderes als DoSomething dann kommt hald eben eine standard ausgabe. Desweiteren ist mir das auslesen der parameter nicht klar. Also z.b.
.../cgi-bin/Project1?action=DoSomething&TheField1=ABC1&TheField2=ABC2
wie ich nun also den input von TheField1 und TheField2 auslesen kann?
-
also erstmal:
das fette ist Action und das unterstrichene die Parameter
.../cgi-bin**/Project1**?action=DoSomething&TheField1=ABC1&TheField2=ABC2
um auf die Aktion zu reagieren erstellst du eine Action (Z.B. Action1) und schreibst unter PathInfo /Project1
bei den Ereignissen der Action1 muß bei onAction die Routine stehen, z.B. mit Parameter auslesenvoid __fastcall TWebModule1::WebModule1Action1Action( TObject *Sender, TWebRequest *Request, TWebResponse *Response, bool &Handled) { //Parameter der Action auslesen String Param1 = Request->QueryFields->Values["action"]; String Param2 = Request->QueryFields->Values["TheField1"]; String Param3 = Request->QueryFields->Values["TheField2"]; //tu etwas damit Response->Content = "Fertig"; }
-
super danke! was mich aber noch interessiert:
wozu dient denn PathInfo ? habs zwar in der hilfe nachgelesen aber das ergibt keinen sinn. Wenn ich PathInfo leer lasse klappt es. Wenn ich den richtigen pfad eingebe klappt es auch. Wenn ich irgend ein wirrwarr eingebe klappt es auch. Deswegen verstehe ich den sinn von PathInfo nicht. OnAction sollte doch erst ausgeführt werden wenn unteranderem auch PathInnfo stimmt. Oder nicht?
Eine frage hätte ich noch. Wie kann ich eine email mit attachment versenden? Geht das irendwie? übergabe mit sendmail oder gibt es eine SMTP komponente für CGI die ich bei kylix übersehen habe?
-
zum Mail versenden nimm die Indy-Komponenten z.B. hier unter Delphi-Tutorials -> Building ISAPI application using Delphi -> Tutorials -> "Sending an Email from an ISAPI application (Threaded)"
zu Pathinfo:
wenn du da nix einträgst wird immer die Standard-Action ausgeführt, sobald du also mehrere Actionen hast solltest du dort die Bezeichnung eingeben, die z.B. in den Formularaktionen deiner HTML-Dateien stehen, teste einfach mal mit 2 Aktionen /project1 und /project2 und verschiedenen ResponseContents was passiert wenn du bei einer der Actionen keine Pathinfo angibstich weiss allerdings nicht was passiert wenn man keine Action zur Standard-Action macht
-
hallo geht das auch wenn ich ein TIdSMTP zu den modulen hinzufüge? jedenfllas sieht es fast so aus. nur wenn ich ein TIdMessage objekt zur laufzeit erzeuge dann krieg ich einen 500er error. geht das bei linux nicht auch so?
TIdMessage *AMsg = new TIdMessage(this);soweit würde es eigentlich gehen. sobald ich aber einen zugriff auf AMsg mache krieg ich eben den 500er error.

-
ah ok habs. war ein fehler meinerseits..
eine frage noch: wie kann ich TIdMessage ein attachment hinzufügen?
-
habe das von dir gefunden leider geht nur nicht (bei mir -> linux)..
kriege damit einen 500..
also
IdMessage->MessageParts->Add(); new TIdAttachment(IdMessage->MessageParts, "pfad zur datei");leider eben geht es nicht.
-
würde das nicht irgendwie mti sendmail gehen? sowas hat ja jeder linux server und würde mir den umweg mit indy spaaren.
eine andere frage. ist mir gerade aufgefallen:
wenn ich das ganze mit POST versuche geht das nicht mehr. zwar gibt es keinen fehler aber scheinbar stimmen wie felder nicht mehr. sprichRequest->QueryFields->Values
woran liegt das? die eigenschaft habe ich auf Post umgestellt und auch das webformular hat als methode POST...
-
kennt jemand sonst eine andere Kylix SMTP komponente?
die ICS funktioniert leider nicht.Muss ja irgendwie einen weg geben ein email mit attachment zu versenden...

-
Hallo,
ich machs so:
TIdAttachment *attachment = new TIdAttachment(IdMessage1->MessageParts, dateianhang);dateianhang ist bei mir ein AnsiString mit dem Pfad zu der Datei die ich anhaengen will.