Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
...
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
}
}
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;
}
struct CGI_DATEN {
char *variable;
char *wert;
struct CGI_DATEN *next;
};
#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;
}
110 C:\Programme\xampp\htdocs\sj2\forum.cpp expected primary-expression before '.' token
Original von metax.
CGI_DATEN.valiable ?
cout << "<p>" << get_parameters->variable << " = " << get_parameters->wert << "</p>" << endl;
get_parameters = get_parameters->next;