我写了一个简单的webform,它将获取用户的信息(通过POST)并将其插入数据库.这不是我典型的编程类型,但它足够基本,我没有遇到任何麻烦.
无论如何,Web表单存在于html页面中,并且非常标准.类似下面的内容(简化示例):
<form method="post" action="/cgi-bin/submit_form" enctype="x-www-form-encoded" id="frm">
<input id="txtName" type="text" />
<input id="txtPhone" type="text" />
<input id="btnSubmit" type="submit" value="Submit" />
</form>
我有一个C应用程序(cgi-bin / submit_form),它在提交时运行并将数据存储在数据库中.
我写了一个非常基本的CGI库,基本上解析输出,看起来像这样:
txtName的= LT;名称>&安培; txtPhone = LT;电话>&安培; btnSubmit按钮=提交
并且库将其解析为映射< string,string>像这样:
myMap["txtName"] = "John";
myMap["txtPhone"] = "1.800.555.5555";
这很容易放入数据库.但是,很明显我的应用程序完全依赖于html元素变量名称(txtName,txtPhone).如果其中任何更改,我的应用程序突然停止工作.
我的问题是:如何将从CGI获取数据的过程同步到服务器端应用程序?
我很幸运,我负责html和服务器脚本.但必须有一个人管理网站和另一个人管理脚本的场景,他们必须以某种方式协调,以确保没有任何不好的事情发生.
在这些类型的情况下,可以使用ICD.例如,在传递XML数据时,可以使用XSD来定义数据结构.
CGI编程有这样的东西吗?我非常害怕我的应用程序是多么脆弱和易于破解.
解决方法:
您指的是HTML元素名称与CGI脚本正在解析的字段之间的变化?
至于像XSD这样正式的东西,我不相信.
通常,这与解决方案类别相同
> Unix shell命令行系统;
>环境变量;
> HTTP和SMTP标头字段;
…即,POST值是完全*格式的字符串,并且由您的服务器随意读取,忽略或抱怨. (正如您可以在您的环境或SMTP标头中*包含“垃圾”一样,最高可达到您发送给它们的系统的容忍限度.)
也就是说,如果您确实有一个单独的设计师编写漂亮的HTML文档,而另一个人编写他们发布的应用程序,那么可以使用任意数量的临时协作方式.就个人而言,我通常使用Perl的POD或Javadoc(或任何适合/类似的内联文档工具用于您的语言)来记录可接受的参数和限制,并将这些可用于艺术部门(或任何人)作为优秀的HTML页面可以假装读.
如果你是,而不是意味着SQL表列,有任何数量的工具可以直接从SQL服务器生成相当不错的文档,从SHOW CREATE TABLE foo向上…… SQL DDL本身就是一个模式XSD.