Johnny: Variable auf Server übergeben

Hallo!

Ich habe ein formmail-script, welches mir Daten des ausgefüllten Formulars auf meiner Webseite zuschickt. Danach erscheint über ein parse.cgi eine "Thank you"-Page, auf der mittels eines image-tags ein Ad-Tracking-Programm eine Order-Nummer anlegt. Diese Order-Nummer soll nun u.a. aus den übertragenen Formulardaten zusammengesetzt werden.

Ich suche eine Lösung, wie ich eine (mehrere) Variable(n) aus dem formmail-script in das parse-script übergeben kann. Ich würde nur ungern client-seitige Möglichkeiten wie Cookies oder Domain-Anhänge nutzen. Am besten wäre, das erste Script schreibt die Variablen direkt auf den Server, das zweite liest sie dann wieder aus.

Ich könnte nun das Script so programmieren, daß es die Variablen in eine Datei schreibt, die von dem zweiten Script wieder ausgelesen wird. Die theoretische Gefahr dabei ist, daß das zweite Script die Variablen ausliest, das erste Script aber mittlerweile schon wieder aktiv geworden ist und einen neuen Wert geschrieben hat.

Gibt es da eventuell eine einfachere Lösung, sowas wie "script-übergreifende" Variablen auf dem Server (ähnlich wie die Umgebungsvariablen?), die ich definieren und danach wieder auslesen kann? Wie kann ich die o.a. Gefahr umgehen?

Muchas Gracias
JOhnnY

  1. use Mosche;

    Ich suche eine Lösung, wie ich eine (mehrere) Variable(n) aus dem formmail-script in das parse-script übergeben kann. Ich würde nur ungern client-seitige Möglichkeiten wie Cookies oder Domain-Anhänge nutzen. Am besten wäre, das erste Script schreibt die Variablen direkt auf den Server, das zweite liest sie dann wieder aus.

    Was meinst du mit 'Domain-Anhänge'. Sowas wie
    <img src="/cgi-bin/ad_track.pl?id=5455678"> ? Das wäre die einfachste Lösung.

    Ich könnte nun das Script so programmieren, daß es die Variablen in eine Datei schreibt, die von dem zweiten Script wieder ausgelesen wird. Die theoretische Gefahr dabei ist, daß das zweite Script die Variablen ausliest, das erste Script aber mittlerweile schon wieder aktiv geworden ist und einen neuen Wert geschrieben hat.

    Da hast du meherere Lösungen, die aber alle nicht so elegant sind wie oben genannte, da alle auf eine Grundproblem zurückzuführen sind:
    Der User muss auf der Serverseite identifiziert werden. Dass kann zB durch eine Variable geschehen, die als Parameter übergeben wird, aber auch durch die IP-Adresse des Clients. Eine Lösung wäre es also, eine kleine Textdatenbank anzulegen, die folgende Variablen speichert:

    - IP-Adresse (zur Identifikation)
     - deine Variable(n)
     - einen Zeitstempel, damit du alte (zB t > 5min) Werte
       löschen kannst.

    Um eine erneute serverseitige Identifikation kommst du nicht herum, deswegen nimm doch die erste Lösung und übergib einfach einen Parameter.

    use Tschoe qw(Matti);

    1. Hallo Matti,

      Was meinst du mit 'Domain-Anhänge'. Sowas wie
      <img src="/cgi-bin/ad_track.pl?id=5455678"> ? Das wäre die einfachste Lösung.

      --- ja, genau so funktioniert das Ad-Tracking-Programm. Meine Aufgabe ist es jetzt allerdings, in dieses ?id= den richtigen Wert einzuparsen (die Order-Nummer, also z.B. "nl_14_heiko_mueller" - die angaben aus dem Formular). Dieser image-tag ist auf der Thank-you-Page und dort muß die Variable rein.

      Der User muss auf der Serverseite identifiziert werden. Dass kann zB durch eine Variable geschehen, die als Parameter übergeben wird, aber auch durch die IP-Adresse des Clients. Eine Lösung wäre es also, eine kleine Textdatenbank anzulegen, die folgende Variablen speichert:

      • IP-Adresse (zur Identifikation)
      • deine Variable(n)
      • einen Zeitstempel, damit du alte (zB t > 5min) Werte
           löschen kannst.

      --- Das löst mein Problem nicht... Praktisch schreibt mein erstes Script dann eine Textdatei mit Namen "irgendwas.txt", die die o.a. Daten inkl. IP-Adresse enthält. Das zweite Script liest "irgendwas.txt" wieder aus - nur wie kann ich verhindern, daß das erste Script die Datei in der Zwischenzeit bereits wieder neu angelegt, bzw. überschrieben hat?

      Wenn ich andererseits der Datei einen eindeutigen Namen (z.B. mit die IP-Adresse ohne Punkte) gebe, dann muß das erste Script dem zweiten Script den Namen der Datei übergeben und somit bin ich wieder beim Ausgangsproblem: Wie übergibt ein Script Variablen an ein anderes Script?

      Muchas Gracias <kopfrauch>
      JOhnnY

      1. Halihallo Jonny

        --- Das löst mein Problem nicht... Praktisch schreibt mein erstes Script dann eine Textdatei mit Namen "irgendwas.txt", die die o.a. Daten inkl. IP-Adresse enthält. Das zweite Script liest "irgendwas.txt" wieder aus - nur wie kann ich verhindern, daß das erste Script die Datei in der Zwischenzeit bereits wieder neu angelegt, bzw. überschrieben hat?

        Wenn ich andererseits der Datei einen eindeutigen Namen (z.B. mit die IP-Adresse ohne Punkte) gebe, dann muß das erste Script dem zweiten Script den Namen der Datei übergeben und somit bin ich wieder beim Ausgangsproblem: Wie übergibt ein Script Variablen an ein anderes Script?

        No, no, no, so wird das nix :-)
        ... Also:

        formmail... erstellt eine Datei mit 100% eindeutigem Namen (eg. 1.txt, 2.txt u. s. w.) [die nächste Zahl kann man z. B. durch auslesen des Verzeichnises finden, oder in einer separaten Datei count.txt speichern]. Diese Zahl wird dann an den redirect geheftet (value="/cgi-bin/lwp_parse.pl?file_id=2").
        Das lwp_parse liest nun die file_id, im Bsp also 2, generiert den Dateinamen '2.txt', liest dessen Inhalt (Name, Vorname, ...) und generiert aufgrund dieser Informationen den Image-Tag. Am Schluss darfst und solltest du diese Datei natürlich löschen, sonst müllt man dir den Server voll.

        Viele Grüsse

        Philipp

  2. Halihallo

    vier Fragen:

    a) sind die beiden Scripts auf demselben Rechner?
    b) wie wird parse.cgi von formmail aufgerufen? - HTTP-Redirct?
    c) Warum willst du keine URL-Anhänsel? - Werden diese vom User gesehen?
    d) warum nicht parse.cgi und formmail in einem Programm, dann wärs nämlich kein Problem?

    Viele Grüsse

    Philipp

    PS: OK, es sind deren 6.

    1. Hi Phillip,

      a) sind die beiden Scripts auf demselben Rechner?

      --- si...

      b) wie wird parse.cgi von formmail aufgerufen? - HTTP-Redirct?

      --- si... value="http://www.domain.com/main/lwp_parse.cgi?p=main/danke.htm">

      c) Warum willst du keine URL-Anhänsel? - Werden diese vom User gesehen?

      --- ist das kein Sicherheitsrisiko (ich dachte mal sowas gelesen zu haben, daß REFERRER nicht immer funktionieren?!)

      d) warum nicht parse.cgi und formmail in einem Programm, dann wärs nämlich kein Problem?

      --- Das parse-script wird wie o.a. aufgerufen. Es holt sich dann die Variablen und fügt sie in die angegebene html-Datei ein und diese wird dann angezeigt. Das formmail-script wird auf der Formular-Seite durch POST aufgerufen. Wie soll ich denn das verbinden? Wie kann ich dann das Script korrekt aufrufen?

      Muchas Gracias
      JOhnnY

      1. Halihallo Jonny

        b) wie wird parse.cgi von formmail aufgerufen? - HTTP-Redirct?
        --- si... value="http://www.domain.com/main/lwp_parse.cgi?p=main/danke.htm">

        value="...", was'n das für'n redirect? - Machst du das über http-equiv?

        c) Warum willst du keine URL-Anhänsel? - Werden diese vom User gesehen?
        --- ist das kein Sicherheitsrisiko (ich dachte mal sowas gelesen zu haben, daß REFERRER nicht immer funktionieren?!)

        Wenn du das als Sicherheitsrisiko interpretierst, ja. Ich dachte mehr daran, ob du allgemein was gegen Parameter in der URL hast... Was spricht also dagegen, wenn du die Daten aus dem Formmailer in den Redirect einfügst, also...

        value="http://www.d.com/m/lwp_parse.cgi?p=...&name=xxx&nachn=xxx"

        diese Seite wird ja vom formmailer dynamisch generiert und dürfte also auch einfach anzupassen sein. Diese Variablen liest du dann in lwp_parse ein und schreibst sie in den Image-Tag.

        d) warum nicht parse.cgi und formmail in einem Programm, dann wärs nämlich kein Problem?
        --- Das parse-script wird wie o.a. aufgerufen. Es holt sich dann die Variablen und fügt sie in die angegebene html-Datei ein und diese wird dann angezeigt. Das formmail-script wird auf der Formular-Seite durch POST aufgerufen. Wie soll ich denn das verbinden? Wie kann ich dann das Script korrekt aufrufen?

        Ich habe nie gesagt, dass es nicht korrekt aufgerufen wird. Ich habe lediglich den Vorschlag gemacht, beides in einem Programm zu machen. Du sagst selbst, dass du mit redirect's arbeitest, d. h. dass man das ganze auch in _einem_ Programm machen kann. Also ein Programm, dass a) die Mail an dich versendet und b) das Dankeschön ausgibt und den passenden Image-Tag generiert. Wenn alles in einem Programm ist, hast du ja auch keine Probleme die Daten für den Image-Tag zu bekommen (die werden ja über den formmailer eingelesen).

        Viele Grüsse

        Philipp

        1. Hi Phillip,

          Ich habe nie gesagt, dass es nicht korrekt aufgerufen wird. Ich habe lediglich den Vorschlag gemacht, beides in einem Programm zu machen. Du sagst selbst, dass du mit redirect's arbeitest, d. h. dass man das ganze auch in _einem_ Programm machen kann. Also ein Programm, dass a) die Mail an dich versendet und b) das Dankeschön ausgibt und den passenden Image-Tag generiert. Wenn alles in einem Programm ist, hast du ja auch keine Probleme die Daten für den Image-Tag zu bekommen (die werden ja über den formmailer eingelesen).

          --- I just made it! War eine aufregende Reise, hab viel gelernt und letztendlich ist´s nun ein Programm geworden, was beides macht... Danke! ;-)

          Happy JOhnnY

          1. Halihallo YOhnnY

            Hi Phillip,

            Jetzt noch ein zweites 'p' dahinter und du wärst einer der wenigen in diesem Forum, die meinen Namen richtig schreiben *g*.

            Ich habe nie gesagt, dass es nicht korrekt aufgerufen wird. Ich habe lediglich den Vorschlag gemacht, beides in einem Programm zu machen. Du sagst selbst, dass du mit redirect's arbeitest, d. h. dass man das ganze auch in _einem_ Programm machen kann. Also ein Programm, dass a) die Mail an dich versendet und b) das Dankeschön ausgibt und den passenden Image-Tag generiert. Wenn alles in einem Programm ist, hast du ja auch keine Probleme die Daten für den Image-Tag zu bekommen (die werden ja über den formmailer eingelesen).
            --- I just made it! War eine aufregende Reise, hab viel gelernt und letztendlich ist´s nun ein Programm geworden, was beides macht... Danke! ;-)

            Nur immer der Nase nach und weiter :-)

            Viele Grüsse

            Philipp