CGI中对前端数据的处理

定义和用法

  • method 属性规定如何发送表单数据(表单数据发送到 action 属性所规定的页面)。

  • 表单数据可以作为 URL 变量(method=”get”)或者 HTTP post (method=”post”)的方式来发送。


method 属性

  • 浏览器使用 method 属性设置的方法将表单中的数据传送给服务器进行处理。
  • 共有两种方法:POST 方法和 GET 方法。
1

如果采用 POST 方法,浏览器将会按照下面两步来发送数据。首先,浏览器将与 action 属性中指定的表单处理服务器建立联系,一旦建立连接之后,浏览器就会按分段传输的方法将数据发送给服务器。

在服务器端,一旦 POST 样式的应用程序开始执行时,就应该从一个标志位置读取参数,而一旦读到参数,在应用程序能够使用这些表单值以前,必须对这些参数进行解码。用户特定的服务器会明确指定应用程序应该如何接受这些参数。

2

另一种情况是采用 GET 方法,这时浏览器会与表单处理服务器建立连接,然后直接在一个传输步骤中发送所有的表单数据:浏览器会将数据直接附在表单的 action URL 之后。这两者之间用问号进行分隔。

3

一般浏览器通过上述任何一种方法都可以传输表单信息,而有些服务器只接受其中一种方法提供的数据。可以在 标签的 method (方法)属性中指明表单处理服务器要用方法来处理数据,使 POST 还是 GET。


具体请参考W3C-HTML


POST与GET的url的不同

    1. POST
<html>
<body>

<form action="/example/html/form_action.asp" method="post" target="_blank">
  First name: <input type="text" name="fname" /><br />
  Last name: <input type="text" name="lname" /><br />
  <input type="submit" value="Submit" />
</form>

<p>请单击确认按钮,输入会发送到服务器上名为 "form_action.asp" 的页面。</p>

</body>
</html>

 点击Submit按钮之后会生成一个url
//http://www.w3school.com.cn/example/html/form_action.asp
    1. GET
<html>
<body>

<form action="/example/html/form_action.asp" method="post" target="_blank">
  First name: <input type="text" name="fname" /><br />
  Last name: <input type="text" name="lname" /><br />
  <input type="submit" value="Submit" />
</form>

<p>请单击确认按钮,输入会发送到服务器上名为 "form_action.asp" 的页面。</p>

</body>
</html>
//点击Submit按钮之后会生成一个url
http://www.w3school.com.cn/example/html/form_action.asp?fname=pop&lname=123456

处理程序

  • 下面的程序完成了兼容GET与POST方式的数据处理
  • 最后形成的字符串格式为
name1=value1&name2=value2&name3=value3 ...... namei=valuei ...... namen=valuen
//当value为空时,value被填空
实例:
chn1=&chn2=2&chn3=3&chn4=&chn5=5&chn6=
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char* get_cgi_data(FILE* fp, char* method)
{
    char* input;
    int len;
    int size=1024;
    int i=0;

    if (strcmp(method, "GET") == 0)  /**< GET method */
    {
        input = getenv("QUERY_STRING");
        return input;
    }

    else if (strcmp(method, "POST") == 0)  /**< POST method */
    {
        len = atoi(getenv("CONTENT_LENGTH"));
        printf("size:-%d-\n",len);
        input = (char*)malloc(sizeof(char) * (size+1));

        if (len == 0)
        {
            input[0] = '\0';
            return input;
        }

        while (1)
        {
            input[i] = (char)fgetc(fp);
            //printf("-%c-\n",input[i]);
            if (i == size)
            {
                printf("1");
                input[i+1] = '\0';
                return input;
            }
            --len;

            if (feof(fp) || (!(len)))
            {
                i++;
                printf("2");
                input[i] = '\0';
                return input;
            }
            i++;
        }
    }
    return NULL;
}

int main(void)
{
    char * type;
    char * method;
    char * input;

    printf("Content-type:text/html\n\n");

    type = getenv("CONTENT_TYPE");
    printf("<p>type : %s</p>",type);

    method = getenv("REQUEST_METHOD");
    printf("<p>method : %s</p>", method);

    input = get_cgi_data(stdin, method);
    printf("<p>input : %s</p>", input);

    return 0;
}

/*
    gcc test.c -o test
*/

前台

<!DOCTYPE html>
<html>
    <body>
        <form action="/test" method="GET">
            Name:
            <br>
            <input type="text" name="name" value="Mickey">
            <br>
            Passwd:
            <br>
            <input type="text" name="passwd" value="123456">
            <br>
            <br>
            <input type="submit" value="Submit">
        </form> 
    </body>
</html>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值