来自网站表单的cgi /变量

时间:2014-05-22 11:58:47

标签: html c web cgi

有人知道以下代码有什么问题吗?

printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10);
printf("<TITLE>VASTAUS</TITLE>\n");
printf("<H3>The Result is!!!</H3>\n");

data = getenv("QUERY_STRING");
sscanf(data, "v=%lf&energiaLuokka=%c[^&]&kaupunki=%s[^&]&vuosi=%s[^&]&kuukausi=%s[^&]&pva=%s", &v, &energiaLuokka, kaupunki, vuosi, kuukausi, pva);
printf("Kuutio: %lf luokka: %c kaupunki: %s vuosi: %s kuukausi: %s paiva: %s", v, energiaLuokka, kaupunki, vuosi, kuukausi, pva);

应该通过网站表单提取带有cgi的变量,但目前它只选择2个第一个值..结果输出:Kuutio: 54.000000 luokka: D kaupunki: vuosi: kuukausi: paiva:

你可以看到留下“kaupunki,vuosi,kuukausi和paiva”变量完全是空的。

我也想知道代码是否正确但问题是在HTML中..但至少没有找到任何解决方法

<BR>
<fieldset><legend>Rakennuksen paikkakunta</legend>
<label class="labelcenter" for="kaupunki">Paikkakunta</label> 
<select name="kaupunki" id="kaupunki"> 
<option value="0">Valitse</option> 
<option value="Espoo">Espoo</option> 
<option value="Forssa">Forssa</option>
</select>
</fieldset>
<BR>

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

格式字符串中的所有[^&]可能都不应该存在。它们不自然且多余,它们导致解析失败。

但是,我不得不问,为什么要使用sscanf()来解析查询字符串呢?如果查询字符串参数以任何不同的顺序出现,它将会中断(并且任何规范中都没有说明浏览器必须保留表单中参数的顺序)。此外,您不会解码百分比编码。

我的建议是使用正确完成工作的CGI库。