你如何同步CGI编程?

时间:2011-12-15 18:24:40

标签: c++ oop cgi

我写了一个简单的webform,它将获取用户的信息(通过POST)并将其插入数据库。这不是我典型的编程类型,但它足够基本,我没有遇到任何麻烦。

无论如何,网页表单存在于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=<name>&txtPhone=<phone>&btnSubmit=Submit

图书馆将其解析为map<string, string>,如下所示:

myMap["txtName"] = "John";
myMap["txtPhone"] = "1.800.555.5555";

然后很容易放入数据库。但是,很明显我的应用程序完全依赖于html元素变量名称(txtName,txtPhone)。如果其中任何一个被更改,我的应用程序突然停止工作。


我的问题是:如何将从CGI获取数据的过程同步到服务器端应用程序?

我很幸运,我负责html和服务器脚本。但必须有一个人管理网站和另一个人管理脚本的场景,他们必须以某种方式进行协调,以确保没有任何不好的事情发生。

在这些类型的情况下,可以使用ICD。例如,在传递XML数据时,可以使用XSD来定义数据结构。

CGI编程有这样的东西吗?我非常害怕我的应用程序是多么脆弱和易于破解。

3 个答案:

答案 0 :(得分:3)

我认为通过“同步”你指的是数据模型的演变,而不是关键代码段的互斥锁定。

处理此问题的一种(部分)方法是生成HTML并从定义字段的共享数据库中驱动CGI脚本。

答案 1 :(得分:3)

您指的是HTML元素名称与CGI脚本正在解析的字段之间的变化?

就像XSD这样正式的事情,我不相信。

通常,这与

属于同一类解决方案
  • Unix shell命令行系统;
  • 环境变量;
  • HTTP和SMTP标头字段;

...即,POST值是完全自由格式的字符串,并且由您的服务器随意读取,忽略或抱怨。 (正如您可以在您的环境或SMTP标头中自由包含“垃圾”一样,最高可达到您发送给它们的任何系统的容忍限度。)

也就是说,如果你有一个单独的设计师编写漂亮的HTML文档,另一个人编写他们发布的应用程序,那么就有许多特殊的协作方式。就个人而言,我通常使用Perl的POD或Javadoc(或任何适合/类似的内联文档工具用于您的语言)来记录可接受的参数和限制,并将这些可用于艺术部门(或任何人)作为优秀的HTML页面可以假装读。

如果你的意思是SQL表列,那么有许多工具可以直接从SQL服务器生成相当不错的文档,从SHOW CREATE TABLE foo向上...... SQL DDL本身就是一个模式按照XSD的顺序。

答案 2 :(得分:0)

您可以对CGI程序更新的持久数据(即文件或数据库)进行特定于操作系统的锁定。

更具体地说,假设Linux系统运行用C ++编码的CGI程序,如果数据在一个(例如文本)文件中,则可以使用flock系统锁定该文件(在CGI中)呼叫。如果您使用GDBM文件,GDBM库可能会为您执行锁定。如果它是一个MySQL数据库,有一些方法可以序列化对它的访问(并且MySQL服务器负责它)。