解析HTML表单数据

时间:2012-03-28 00:07:35

标签: html c cgi

当我打印查询时,我得到:

一个= 1&安培;二= 2及3 = 3及4 = 3及5 = 3及6 = 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 个答案:

答案 0 :(得分:1)

  

是否有一种简单且不易出错的方式来处理这个问题?

是;存在各种C库,例如cgicC CGI,它们处理像这样的常见CGI任务。 (如果这些都不符合您的口味,请尝试Googling "C CGI library"获取其他选项。)

答案 1 :(得分:0)

解析此字符串的一种简单方法是使用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/

答案 2 :(得分:0)

  1. 你没有解析任何东西,所以你期望得到什么价值? (就像其他人说的那样,最简单的方法是使用sscanf。请注意,只有当你知道参数的名称和顺序时才能使用它,并且你应该在那之后手动转换字符。)

  2. 您的代码有一些不好的东西,例如if (data==NULL) ... printf("%s",data)(如果data可能为NULL,为什么要打印它),并使用quantities而不为其分配空间。