数据传输
Chivas-Regal
# HTML传给cgi
在 html
中应该有一个可以发送数据的表单:
<!-- main.html -->
...
<form action='./main.cgi' method='post' target='_blank'>
...
</form>
...
1
2
3
4
5
6
7
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
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
2
3
4
5
# 复选框
<input type="checkbox" name="one" value="on" /> 1
<input type="checkbox" name="two" value="on" /> 2
1
2
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
嗯事实证明是可行的,且点击完按钮之后会重新进入到本页面,每次传递只会进行一次