2012-03-28 3 views
1

Wenn ich einfach die Abfrage drucke ich bekommen:Parsing HTML-Formulardaten

one = 1 & zwei = 2 & drei = 3 & vier = 3 & fünf = 3 & sechs = 3

noch nicht funktioniert !!!! Ich werde verrückt werden.

#include <stdio.h> 
#include <stdlib.h> 

int main(void){ 

    char *data; 
    float prices[] = {1, 2, 3, 4, 5, 6}; 
    int a, b, c, d, e, f; 

    printf("%s%c%c\n", 
    "Content-Type:text/html;charset=iso-8859-1",13,10); 

    printf("<title>Bill</title>\n"); 
    printf("<h3 align=center >Bill</h3>\n"); 

    data = getenv("QUERY_STRING"); 

    if(data == NULL){ 
      printf("<p>Error!</p>"); 
    } else { 
    printf("%s", data); 
    sscanf(data, "one=%d&two=%d&three=%d&four=%d&five=%d&six=%d", &a, &b, &c, &d, &e,  &f); 
    } 

return 0; 

} 
+0

Können Sie den Code, wo Sie versuchen, diese Abfrage zu analysieren, veröffentlichen? –

+2

Sie haben den Abfrage-Parsing-Code nicht gepostet, der den Kern Ihrer Frage darstellt. Höchstwahrscheinlich verursacht der Parsing-Code der Abfrage, dass Ihr CGI-Programm abstürzt, was dem Webbrowser als 500 Internal Server Error angezeigt wird. Ohne den Code können wir nicht feststellen, warum Ihr Programm abstürzt. –

+0

Werfen Sie einen Blick auf meine Antwort noch einmal. Sie haben wahrscheinlich etwas mit Ihrem Format zu tun. Es könnte auch nützlich sein, die sscanf-Dokumentation in dem Link zu lesen, den ich in meiner Antwort gepostet habe. –

Antwort

0

Eine einfache Möglichkeit zum Parsen dieser Zeichenfolge ist die Verwendung sscanf. Für dieses Beispiel:

one=2&two=1 

könnten Sie verwenden:

int one, two; 
sscanf(data, "one=%d&two=%d", &one, &two); 

Mehr Informationen über sscanf hier: http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/

+0

gibt mir immer noch den Fehler selbst mit dem genauen Code? – user1205722

+0

Sie müssen entsprechend Ihrer Anfrage Zeichenfolge ändern. Wenn Sie beispielsweise eine URL wie folgt haben: "firstArg = 12 & secondArg = 32" müssen Sie das Format Ihres sscanf in "firstArg =% d & secondArg =% d" ändern. Es ist genau wie das scanf, aber anstatt von der stdin zu lesen, liest du von deiner string. –

+0

Ahh ok. Also die Argumente, die ich verwenden muss, sind die genauen Namen der Felder in meiner HTML-Form, richtig? – user1205722

1

Gibt es eine einfache und nicht fehleranfällig Art und Weise mit diesem Problem umgehen?

Ja; Es gibt verschiedene C-Bibliotheken, wie cgic und C CGI, die gängige CGI-Aufgaben wie diese behandeln. (Wenn keine von beiden nach Ihrem Geschmack ist, versuchen Sie Googling "C CGI library" für andere Optionen.)

0
  1. Sie analysieren nicht alles, so wie Sie erwarten zu bekommen die Werte? (Wie andere gesagt haben, ist der einfachste Weg, sscanf zu verwenden. Beachten Sie, dass es nur funktioniert, wenn Sie die Namen und die Reihenfolge der Argumente kennen, und dass Sie danach Zeichen handle.)

  2. Ihr Code haben einige schlechte Dinge, wie if (data==NULL) ... printf("%s",data) (wenn data kann NULL sein, warum drucken Sie es), und quantities ohne Platz zu verwenden, um es zu verwenden.