用C语言实现cgi改写html控件值为上一次所提交的值
时间: 2024-05-13 08:18:22 浏览: 68
实现这个功能,需要在服务端保存用户上一次提交的值,并在下一次请求时将该值回显到页面中。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 读取POST请求中的数据
char *content_length_str = getenv("CONTENT_LENGTH");
int content_length = atoi(content_length_str);
char *post_data = malloc(content_length + 1);
fgets(post_data, content_length + 1, stdin);
// 解析POST请求中的数据,获取表单值
char *name_pos = strstr(post_data, "name=");
char *value_pos = strstr(post_data, "value=");
char name[256];
char value[256];
sscanf(name_pos, "name=%s", name);
sscanf(value_pos, "value=%s", value);
// 读取上一次提交的值
char *last_value = getenv("QUERY_STRING");
// 输出HTML页面
printf("Content-type:text/html\n\n");
printf("<html>\n");
printf("<head>\n");
printf("<title>C语言CGI回显表单值</title>\n");
printf("</head>\n");
printf("<body>\n");
if (last_value) {
printf("<p>上一次提交的值为:%s</p>\n", last_value);
}
printf("<form method=\"post\">\n");
printf("<input type=\"text\" name=\"%s\" value=\"%s\">\n", name, last_value ? last_value : "");
printf("<input type=\"submit\" value=\"提交\">\n");
printf("</form>\n");
printf("</body>\n");
printf("</html>\n");
// 保存本次提交的值
setenv("QUERY_STRING", value, 1);
free(post_data);
return 0;
}
```
这个CGI程序会将用户提交的表单值回显到页面中,并且在下一次请求时将上一次提交的值作为表单默认值显示出来。需要注意的是,这个示例代码没有进行输入合法性验证和错误处理,仅供参考。
阅读全文