Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

get parameter in cgi/c++ abfragen

Diskussion: get parameter in cgi/c++ abfragen im Forum Code Kitchen, in der Kategorie Software Home; Anzeige kann mir vl. mal wer sagen, wie man in cgi/c++ zum henker die get parameter abfragt!? ich krach schon ...

Antwort
Alt 08.10.08, 07:55   #1 (permalink)
 
Registriert seit: 11.11.07
Friedrich Leistung: Facit NTK
Friedrich eine Nachricht über ICQ schicken
Likes: 0
Standard get parameter in cgi/c++ abfragen

Anzeige

kann mir vl. mal wer sagen, wie man in cgi/c++ zum henker die get parameter abfragt!? ich krach schon fast zusammen vor lauter googlen. also dokumentationen und tutorials zu c++ über cgi sind wohl echt ne seltenheit!?

Friedrich ist offline   Mit Zitat antworten
Alt 08.10.08, 08:13   #2 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Lang ist es her, dass ich C/C++ für CGIs benutzt habe. *in.erinnerungen.kram* Wenn ich mich recht entsinne, wird die Umgebungsvariable QUERY_STRING gesetzt, die man dann einfach mittels getenv() abfragt.

Code:
...
char *request = getenv("REQUEST_METHOD");
char *cgi_string;
if( strcmp(request, "GET") == 0 ) {
  cgi_string = getenv("QUERY_STRING");
  if(cgi_string == NULL) {
    // keine parameter
  } else {
    // parameter verarbeiten
  }
}
Irgendwie in der Art funktionierte das.
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 08.10.08, 08:24   #3 (permalink)
Themenstarter
 
Registriert seit: 11.11.07
Friedrich Leistung: Facit NTK
Friedrich eine Nachricht über ICQ schicken
Likes: 0
Standard

ehm ja und was ist der query string jetz fürn typ. echt string? soll ich mir das jetz selbst in ein struct array zerlegen? sone kacke. aber danke. // edit. AH. das fragezeichen is nich mit drin kein prob
Friedrich ist offline   Mit Zitat antworten
Alt 08.10.08, 08:30   #4 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Ja, es ist echt ein String, den du selbst zerlegen musst. Im Buch 'C von A bis Z' ist aber ein entsprechendes Beispiel drin:

Code:
struct CGI_DATEN *erstellen(char *str) {
   char* s;
   char* res;
   /* Irgendwo gibt es auch eine Grenze, hier sind
      MAX_PAARE erlaubt */
   char *paare[MAX_PAARE];
   struct CGI_DATEN *ptr_daten = NULL;
   struct CGI_DATEN *ptr_anfang = NULL;
   int i=0, j=0;
   /* Zuerst werden die Variablen/Werte-Paare anhand des Zeichens
    * '&' getrennt, sofern es mehrere sind */
   s=str;
   res=strtok(s,"&");
   while( res != NULL && i < MAX_PAARE) {
      /* Wert von res dynamisch in char **pair speichern */
      paare[i] = (char *)malloc(strlen(res)+1);
      if(paare[i] == NULL)
         return NULL;
      paare[i] = res;
      res=strtok(NULL,"&");
      i++;
   }
   /* Jetzt werden die Variablen von den Werten getrennt und
    * an die Struktur CGI_DATEN übergeben */
   while ( i > j ) {  /* Das erste Element ? */
      if(ptr_anfang == NULL) {
         ptr_anfang =(struct CGI_DATEN *)
           malloc(sizeof (struct CGI_DATEN *));
         if( ptr_anfang == NULL )
            return NULL;
         res = strtok( paare[j], "=");
         if(res == NULL)
            return NULL;
         ptr_anfang->variable =(char *) malloc(strlen(res)+1);
         if( ptr_anfang->variable == NULL )
            return NULL;
         ptr_anfang->variable = res;
         res = strtok(NULL, "\0");
         if(res == NULL)
            return NULL;
         ptr_anfang->wert =(char *) malloc(strlen(res)+1);
         if( ptr_anfang->wert == NULL )
            return NULL;
         ptr_anfang->wert = res;
         /* printf("%s %s<br>",
          * ptr_anfang->variable, ptr_anfang->wert); */
         ptr_anfang->next = (struct CGI_DATEN *)
            malloc(sizeof (struct CGI_DATEN *));
         if(ptr_anfang->next == NULL)
            return NULL;
         ptr_daten = ptr_anfang->next;
         j++;
      }
      else { /* Die restlichen Elemente */
         res = strtok( paare[j], "=");
         if(res == NULL)
            return NULL;
         ptr_daten->variable =(char *) malloc(strlen(res)+1);
         if(ptr_daten->variable == NULL)
            return NULL;
         ptr_daten->variable = res;
         res = strtok(NULL, "\0");
         if(res == NULL)
            return NULL;
         ptr_daten->wert =(char *) malloc(strlen(res)+1);
         if(ptr_daten->wert == NULL)
            return NULL;
         ptr_daten->wert = res;
         /* printf("%s %s<br>",
          * ptr_daten->variable, ptr_daten->wert); */
         ptr_daten->next = (struct CGI_DATEN *)
            malloc(sizeof (struct CGI_DATEN *));
         if( ptr_daten->next == NULL )
            return NULL;
         ptr_daten = ptr_daten->next;
         j++;
      }
   }
   ende = ptr_daten;
   /* Anfangsadresse der Liste struct CGI_DATEN zurückgeben */
   return ptr_anfang;
}
CGI_DATEN ist dabei so deklariert:

Code:
struct CGI_DATEN {
   char *variable;
   char *wert;
   struct CGI_DATEN *next;
};
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
Alt 09.10.08, 23:03   #5 (permalink)
Themenstarter
 
Registriert seit: 11.11.07
Friedrich Leistung: Facit NTK
Friedrich eine Nachricht über ICQ schicken
Likes: 0
Standard

Code:
#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;

struct CGI_DATEN {
   char *variable;
   char *wert;
   struct CGI_DATEN *next;
};

struct CGI_DATEN *erstellen(char *str)
{
	unsigned short int MAX_PAARE = 10;
	char* s;
	char* res;
	/* Irgendwo gibt es auch eine Grenze, hier sind MAX_PAARE erlaubt */
   char *paare[MAX_PAARE];
   struct CGI_DATEN *ptr_daten = NULL;
   struct CGI_DATEN *ptr_anfang = NULL;
   int i=0, j=0;
   /* Zuerst werden die Variablen/Werte-Paare anhand des Zeichens
    * '&' getrennt, sofern es mehrere sind */
   s=str;
   res=strtok(s,"&");
   while( res != NULL && i < MAX_PAARE) {
      /* Wert von res dynamisch in char **pair speichern */
      paare[i] = (char *)malloc(strlen(res)+1);
      if(paare[i] == NULL)
         return NULL;
      paare[i] = res;
      res=strtok(NULL,"&");
      i++;
   }
   /* Jetzt werden die Variablen von den Werten getrennt und
    * an die Struktur CGI_DATEN übergeben */
   while ( i > j ) {  /* Das erste Element ? */
      if(ptr_anfang == NULL) {
         ptr_anfang =(struct CGI_DATEN *)
           malloc(sizeof (struct CGI_DATEN *));
         if( ptr_anfang == NULL )
            return NULL;
         res = strtok( paare[j], "=");
         if(res == NULL)
            return NULL;
         ptr_anfang->variable =(char *) malloc(strlen(res)+1);
         if( ptr_anfang->variable == NULL )
            return NULL;
         ptr_anfang->variable = res;
         res = strtok(NULL, "\0");
         if(res == NULL)
            return NULL;
         ptr_anfang->wert =(char *) malloc(strlen(res)+1);
         if( ptr_anfang->wert == NULL )
            return NULL;
         ptr_anfang->wert = res;
         /* printf("%s %s<br>",
          * ptr_anfang->variable, ptr_anfang->wert); */
         ptr_anfang->next = (struct CGI_DATEN *)
            malloc(sizeof (struct CGI_DATEN *));
         if(ptr_anfang->next == NULL)
            return NULL;
         ptr_daten = ptr_anfang->next;
         j++;
      }
      else { /* Die restlichen Elemente */
         res = strtok( paare[j], "=");
         if(res == NULL)
            return NULL;
         ptr_daten->variable =(char *) malloc(strlen(res)+1);
         if(ptr_daten->variable == NULL)
            return NULL;
         ptr_daten->variable = res;
         res = strtok(NULL, "\0");
         if(res == NULL)
            return NULL;
         ptr_daten->wert =(char *) malloc(strlen(res)+1);
         if(ptr_daten->wert == NULL)
            return NULL;
         ptr_daten->wert = res;
         /* printf("%s %s<br>",
          * ptr_daten->variable, ptr_daten->wert); */
         ptr_daten->next = (struct CGI_DATEN *)
            malloc(sizeof (struct CGI_DATEN *));
         if( ptr_daten->next == NULL )
            return NULL;
         ptr_daten = ptr_daten->next;
         j++;
      }
   }
   //ende = ptr_daten;
   /* Anfangsadresse der Liste struct CGI_DATEN zurückgeben */
   return ptr_anfang;
}

int main(int argc, char *argv[])
{
	cout << "Content-Type: text/html\r\n\r\n";

	cout << "<html><head><title>hello</title></head><body><h1>Welcome</h1>" << endl;

	if (strcmp(getenv("REQUEST_METHOD"), "GET") == 0)
	{
		CGI_DATEN *get_parameters = erstellen(getenv("QUERY_STRING"));

		unsigned short int CGI_DATEN_COUNT = sizeof(get_parameters) / sizeof(CGI_DATEN);

		for (unsigned short int i = 0; i < CGI_DATEN_COUNT; i++)
		{
			cout << "<p>" << CGI_DATEN.valiable << " = " << CGI_DATEN.wert << "</p>" << endl;

			CGI_DATEN = CGI_DATEN.next;
		}
	}

	cout << "</body></html>";

	return 0;
}
hilfe, ich bin zu blöd.
Zitat:
110 C:\Programme\xampp\htdocs\sj2\forum.cpp expected primary-expression before '.' token
Friedrich ist offline   Mit Zitat antworten
Alt 09.10.08, 23:06   #6 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

CGI_DATEN.valiable ?
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
Alt 09.10.08, 23:16   #7 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

Zitat:
Original von metax.
CGI_DATEN.valiable ?
das ist dann wohl ne chinesische Variable....
beavisbee ist offline   Mit Zitat antworten
Alt 10.10.08, 00:08   #8 (permalink)
Themenstarter
 
Registriert seit: 11.11.07
Friedrich Leistung: Facit NTK
Friedrich eine Nachricht über ICQ schicken
Likes: 0
Standard

ehm, jo. shit happened. korrigiert. selbe fehlermeldung. was jetzt?
Friedrich ist offline   Mit Zitat antworten
Alt 11.10.08, 11:02   #9 (permalink)
 
Registriert seit: 22.10.05
farhaven Leistung: Z3
Likes: 3
Standard

Wenn ich mich nicht täusche, ist CGI_DATEN eine Struktur. Davon direkt die Members abzufragen macht ja relativ wenig Sinn.

Im letzten Absatz hast du einen Pointer auf CGI_DATEN erstellt mit dem Namen get_parameters. Innerhalb der Schleife musst du natürlich dann auch auf genau den Pointer zugreifen.

So sollte der Inhalt der for-Schleife aussehen:

Code:
cout << "<p>" << get_parameters->variable << " = " << get_parameters->wert << "</p>" << endl;
get_parameters = get_parameters->next;
Dann klappts auch mit den Pointern
farhaven ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » get parameter in cgi/c++ abfragen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
per JS aktuelle URL abfragen... Watchme (Web-) Design und webbasierte Sprachen 2 27.08.09 22:48
Netzwerkauslatung abfragen Antibus Code Kitchen 2 17.03.08 16:22
mit C++ phpTicketsystem abfragen MaUs# Code Kitchen 4 09.05.07 19:53
C - ARP Puffer abfragen Heinzi Code Kitchen 2 07.10.05 15:22
Cursortasten abfragen icecreamman Code Kitchen 6 29.01.05 00:37


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61