总体导航图
学习指南
主要内容
网页制作软件
当前位置:多媒体应用基础 >> 网络多媒体应用设计 >> 处理表单的脚本

处理表单的脚本

    大多数表单有两个部分: HTML的表单格式;处理表单数据的CGI脚本。 这个CGI脚本使用标签<FORM>属性调用的

表单形式和表单脚本
     这个ACTION属性包含着处理表单的脚本:
<FORM ACTION="http://www.popchina.com/cgi-bin/processorscript">在这个表单中,每个输入区都有一个NAME的属性,用来称呼表单元素。当这个表单数据被递交给你在ACTION中定义的CGI脚本,这样这些name和输入内容被作为一个数字或字符传递给脚本。

GET 和 POST
    表单从浏览器发给服务器有两种方法:GET 和 POST。
    我们上面谈论的方法,实际是GET,它将数据打包放置在环境变量QUERY_STRING中作为URL整体的一部分传递给服务器。
    POST做很多类似GET同样的事情,不同的地方就是它是分离地传递数据给脚本,你的脚本通过标准输入获取这些数据,这个QUERY_STRING环境变量将不再设置。POST是个安全的方法,尤其如果你的表单中很多数据的话。当你用GET,这个服务器就分配变量QUERY_STRING给所有的表单数据,但是这个变量可存储量是有限的。换句话说,如果你有很多数据但是你又用GET,你会丢失很多数据。如果你用POST,你可以尽可能多地使用数据,因为这些数据从来也分配到一个变量里。

URL 编码
    URL 编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值,将他们作为name/value参数编码,移去那些不能传送的字符,将数据排行等等,这些还取决于你用GET还是POST。作为URL的一部分或者分离地发给服务器,不管哪种情况,在服务器端的表单输入格式样子像这样:
theName=Ichabod+Crane&gender=male&status=missing&headless=yes
    URL编码遵循下列规则:
    每对name/value由&符分开。
    每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值(像这样 "name=")。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字) 将以百分符%用十六进制编码。当然也包括像=、&和%这些特殊的字符,在输入区中的空格将以加号+显示。
    因为表单输入是用这个URL编码传递给你的脚本的,在你用这些参数之前必须解码,因为解码是个很普遍的工作,可以有很多工具做这个工作,你没有必要自己写这个解码程序。
    这里介绍一个叫uncgi的解码程序,你可以从http://www.hyperion.com/~koreth/uncgi.html。得到原码,安装在你自己的cgi-bin目录下。

修改表单的HTML
<FORM METHOD=POST ACTION="../cgi-bin/form-name"> </FORM>
如果你在用uncgi从input中解码,情况有点不同。为了是uncgi正常工作,你首先必须调用uncgi,如果uncgi是个目录,加上实际的脚本名, 像这样:
<FORM METHOD=POST ACTION="../cgi-bin/uncgi/form-name"> </FORM>
这样,你不必修改表单中原始的HTML,原始的HTML可以工作得很好。

脚本
在脚本中第一步是解码,在这个例子中,我们已经使用uncgi解码输入数据,实际这个表单已经为你做好解码。通过建立一个uncgi的目录,一旦表单递交给服务器,服务器会自动进行解码,这样,所有的name/value已经准备就绪等待你的使用。
现在,一个例子开始部分假设是下面这样:
echo Content-type: text/html
echo
echo "<HTML><HEAD>"
echo "<TITLE>Hello</TITLE>"
echo "</HEAD><BODY>"
echo "<P>"
接下来,有两种情况要处理:一件是处理用户不输入名字的情况,一个是如果输入了向他们说hello。这个Name元素的值,是包含在WWW_theName环境变量中。用一个简单的测试命令(-z), 你能查看环境变量是否是空的还是包括相应的输出值:
if [ ! -z "$WWW_theName" ]; then
echo "Hello, "
echo $WWW_theName
else
echo "You don't have a name?"

最后增加一个连接"go back" ,用来返回:
echo "</P><P><A HREF="../lemay/name1.html">Go Back</A></P>"
echo "</BODY></HTML>"

  

 

相关知识点
CGI学习
CGI精品下载