Разбор данных формы HTML - PullRequest
1 голос
/ 28 марта 2012

Когда я просто печатаю запрос, я получаю:

один = 1 & два = 2 & три = 3 & четыре = 3 & пять = 3 & шесть = 3

Все еще не работает !!!!Я собираюсь сходить с ума.

#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;

}

Ответы [ 3 ]

1 голос
/ 28 марта 2012

Существует ли простой и не подверженный ошибкам способ решения этой проблемы?

Да; Существуют различные библиотеки C, такие как cgic и C CGI , которые обрабатывают общие задачи CGI, подобные этой. (Если ни один из них вам не по вкусу, попробуйте Googling "C CGI library" для других вариантов.)

0 голосов
/ 28 марта 2012
  1. вы ничего не анализируете, так как вы ожидаете получить значения? (Как и другие говорили, самый простой способ - использовать sscanf. Обратите внимание, что он будет работать только в том случае, если вы знаете имена и порядок аргументов, и что после этого вы должны вручную удалять символы.)

  2. В вашем коде есть некоторые плохие вещи, такие как if (data==NULL) ... printf("%s",data) (если data может быть NULL, зачем вы его печатаете), и использование quantities без выделения места для него.

0 голосов
/ 28 марта 2012

Простой способ разобрать эту строку - использовать sscanf. Для этого примера:

one=2&two=1

вы можете использовать:

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

Больше информации о sscanf здесь: http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...