数据传输

# HTML传给cgi

html 中应该有一个可以发送数据的表单:

<!-- main.html -->

...
<form action='./main.cgi' method='post' target='_blank'>
    ...
</form>
...
1
2
3
4
5
6
7

在表单里面的元素,可以通过 value 将数据传递给 main.cpp ,当然也应当有一个 submit 的按钮,作为表单的提交

对于 main.cpp 如何获取此 value ,首先这个标签元素应该有一个唯一的 name
然后 .cgi 通过

// main.cpp 

...
cgicc::Cgicc formData;
cgicc::form_iterator fit = formData.getElement("要获取的标签的name");
...
1
2
3
4
5
6

此时 **fit 就是那个 html 中对应吗 name 标签的 value 值,是一个字符串

# 输入框

    <input type='text' name='input'/>
1

这样它的 value 即为输入文本,对于 cgi 接收直接用

cgicc::Cgicc formData;
cgicc::form_iterator fit = formData.getElement("input");
if (!fit->isEmpty() && fit != (*formData).end()) {
    std::cout << **fit << std::endl;
}
1
2
3
4
5

# 复选框

    <input type="checkbox" name="one" value="on" /> 1
    <input type="checkbox" name="two" value="on" /> 2
1
2
cgicc::Cgicc formData;
cgicc::form_iterator fit_one = formData.queryCheckbox("one");
cgicc::form_iterator fit_two = formData.queryCheckbox("two");
std::cout << "选择的数据有:\n";
if (fit_one) std::cout << "1\n";
if (fit_two) std::cout << "2\n";
1
2
3
4
5
6

别的基本上都是 getElement() 直接获取,用法和上面的类似

# cgi传递给cgi

这个东西是思考项目的数据传递的时候发现的,本意想让 cgi 传递数据给 html ,不过没怎么找到教程。但是既然 cgi 是输出 html 然后进行解析,那么理论上就支持传递数据这种事情,尝试一下

// main.cpp

...
std::cout << "<form action='./main.cgi' method='post' target='_blank'>\n";
std::cout << "    <input type='text' name='input'/>\n";
std::cout << "    <input type='submit' value='提交'/>\n";
std::cout << "</form>\n";

cgicc::Cgicc formData;
cgicc::form_iterator fit = formData.getElement("input");
if (!fit->isEmpty() && fit != (*formData).end()) {
    std::cout << **fit << std::endl;
}
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14

20221215235904
20221215235929

嗯事实证明是可行的,且点击完按钮之后会重新进入到本页面,每次传递只会进行一次

Last Updated: 12/16/2022, 2:49:30 AM