Sven Wagener: Formulardatenübergabe an C Programm unter Linux. Häng hier fest!!!

Tach, alle ma zusammen!

Ich bin im Momment dabei ein C-Programm zu schreiben, welches die Daten aus einem Formular einer HTML-Datei weiterverarbeitet bzw. den Formulardatenstrom weiterverarbeitet. Es soll ja anscheinend Funktionieren. Ich suche auf jeden Fall ein Programmierbeispiel dafür, da ich Probleme mit der Parameterübergabe habe. Bei einem Kaufmännischen und (&) bricht das Programm immer ab und gibt eine Fehlermeldung aus. Ausserdem beruht die Programmierung meines Programms nur auf Vermutungen und reiner Theorie. Ich hab aber einen Anfang:

#include <stdio.h>
#include <iostream.h>
#include <string.h>

int zaehl;
char content[50];

int main( int arg, char* argv[])// übernahme der Daten
{
char* tmp = argv[1];
  
strcpy(content,tmp);

zaehl = 0;  
while ( content[zaehl] != 0 )  
{  

cout<<content[zaehl]<<endl;
  zaehl++;
}
return 0;
}

(ACHTUNG: Das ist nicht das fertige Programm. Es dient nur zum experimenteren zur Übernahme der Parameter.)

  1. Hallo Sven,

    Wenn du ein Formular per GET an ein CGI-Skript schickst, werden die daten urlencoded in der environment variable QUERY_STRING gespeichert.
    Wenn es per PUT kommt, kommt dieser String vom stdin

    Siehe hierzu <../../tgcm.htm>
    Das in C umzusetzen, ist kein Problem -

    printf ("%s\n",getenv("QUERY_STRING"));

    gibt die Formulardaten aus, wenn sie per GET übergeben wurden.

    POST müsste dann in einer art von

    for (int i=0;i<=ceil(getenv("CONTENT_LENGTH"));++i)
    {
    $buf[i]=getc(STDIN);
    }

    gehen
    (ungetestet)

    Viel Spass
    gero

    1. Hallo Sven,

      Wenn du ein Formular per GET an ein CGI-Skript schickst, werden die daten urlencoded in der environment variable QUERY_STRING gespeichert.
      Wenn es per PUT kommt, kommt dieser String vom stdin

      Siehe hierzu <../../tgcm.htm>
      Das in C umzusetzen, ist kein Problem -

      printf ("%s\n",getenv("QUERY_STRING"));

      gibt die Formulardaten aus, wenn sie per GET übergeben wurden.

      POST müsste dann in einer art von

      for (int i=0;i<=ceil(getenv("CONTENT_LENGTH"));++i)
      {

      »»  $buf[i]=getc(STDIN);

      }

      gehen
      (ungetestet)

      Viel Spass
      gero

      Danke schonmal!

      Sollte das nur unter Linux klappen, oder gibt es auch eine Möglichkeit dies unter Windows Betriebssystemen via EXE laufen zu lassen?

      1. Sollte das nur unter Linux klappen, oder gibt es auch eine Möglichkeit dies unter Windows Betriebssystemen via EXE laufen zu lassen?

        Environmentvariablen gibt es auch unter Windows, es sollte also auf beiden Plattformen klappen. (Der CGI-Modul von Perl macht ja auch nichts Anderes.)

    2. Hallo Sven,

      Wenn du ein Formular per GET an ein CGI-Skript schickst, werden die daten urlencoded in der environment variable QUERY_STRING gespeichert.
      Wenn es per PUT kommt, kommt dieser String vom stdin

      Siehe hierzu <../../tgcm.htm>
      Das in C umzusetzen, ist kein Problem -

      printf ("%s\n",getenv("QUERY_STRING"));

      gibt die Formulardaten aus, wenn sie per GET übergeben wurden.

      POST müsste dann in einer art von

      for (int i=0;i<=ceil(getenv("CONTENT_LENGTH"));++i)
      {

      »»  $buf[i]=getc(STDIN);

      }

      gehen
      (ungetestet)

      Viel Spass
      gero

      Nun hab ich aber noch ein anderes Problem. Ich kann die Datei mit dem Formular nicht richtig ansprechen. Sei es unter Windows (In diesem Fall versucht der Browser die EXE Datei herunterzuladen anstatt die action zu verarbeiten) als auch unter Linux (hier findet Linux die datei nicht, die ich erstellt und Kompiliert habe).  Auf was muss ich im Formular noch genau achten, um die Daten zu übergeben, so dass der Browser  diese Daten richtig behandelt.

      1. Hallo Sven,

        Das "Script" muss in einem "cgi-bin" liegen, also ein verzeichnis, wo der Server programme ausführt! Dies musst du im konfigfile festlegen!

        Grüessli

        anonymous

        PS: Ausserdem, musst du einen Header ausgeben!

      2. Nun hab ich aber noch ein anderes Problem. Ich kann die Datei mit dem Formular nicht richtig ansprechen.
        Sei es unter Windows (In diesem Fall versucht der Browser die EXE Datei herunterzuladen anstatt die action zu verarbeiten)

        Das liegt an der Konfiguration Deines Webservers. Der hat nicht verstanden, daß er *.exe als CGI-Anwendung ausführen soll. Entweder *.exe als CGI-Endung definieren oder das Programm in ein CGI-Verzeichnis ablegen.

        als auch unter Linux (hier findet Linux die datei nicht, die ich erstellt und Kompiliert habe).

        Ist die Datei ausführbar? (chmod +x <dateiname>)

        Auf was muss ich im Formular noch genau achten, um die Daten zu übergeben, so dass der Browser diese Daten richtig behandelt.

        ?!!? Eigentlich auf nichts, außer daß Eingabeformular und Verarbeitungsroutine zusammenpassen (Namen, Wertemengen, ...).

        1. Danke an alle! Es klappt!