表单与PHP的交互



说起表单,我们获取信息基本上要全部依靠表单。例如注册邮箱,发表贴子灌水等等。

先来看一个例子:
程序代码 程序代码

<?php
$action = $_SERVER['PHP_SELF'];//取得该文件的绝对路径
if ($_SERVER['REQUEST_METHOD'] == 'POST'){//判断表单提交方法是否为POST
    echo '使用了post方法传递表单值:';
    echo $_POST['email'];    //利用$_POST输出以POST方法传递过来的表单值,
}
?>
<form name="regform" id="regform" action="<?php echo $action;//输出action变量值?>" method="post">
电子邮件:<input type="text" size="30" name="email" value="">
<input type="submit" name="btnSubmit" value="确定">
</form>


还有一种传递方式是get方法,比如象本篇文章的地址为:
http://www.windice.com/blog/blogedit.asp?id=254
后面的id=254就是利用get传递的,很显然后面的254可以有用户任意修改提交到服务端做处理。
如果程序不严谨的话,很容易出错。get传递方法只能控制在250字符,超过后,浏览器自动截断。

POST方法发送变量数据时,对于用户来说是不透明的,按HTTP协议来说,数据附加于header的头信息中,用户不能随意修改,这对于Web应用程序而言,安全性要好得多,而且使用POST可以发送大体积的数据给Web服务器。

常用表单:

input type="checkbox"
复选框,允许用户选择多个选择项

input type="file"
文件浏览框,当文件上传时,可用来打开一个模式窗口以选择文件

input type="hidden"
隐藏标签,用于在表单中以隐含方式提交变量值

input type="password"
密码文本框,用户在该文本框输入字符时将被替换显示为 * 号

input type="radio"
单选项,用于设置一组选择项,用户只能选择一个

input type="reset"
清除与重置表单内容,用于清除表单中所有文本框的内容,而且使选择菜单项恢复到初始值

input type="submit"
表单提交按钮

input type="text"
单行文本框

select
下拉列表框,可单选和多选。默认为单选,如果增加多项选择功能,增加 <select name="select" size=" 自定义列数 " multiple="multiple"> 即可

option
列表下拉菜单,和 select 配合使用,显示供选择的值

textarea
多行文本框,在使用文本框时需要关闭标签之间的文本内容,形成如下格式:
<Textarea> 你的文字

表单属性:

name
文本框的名称, PHP 根据该名称,在超级全局数组中建立以 name 为名称的键名

size
文本框的宽度,在 select 下拉菜单中,表示可以看到的选项行数

value
文本框中的默认值,注意,该值不能应用到 type=password 密码文本框以及 type=file 文件文本框中

multiple
此属性用于下拉列表菜单 select 中,指定该选项用户可以使用 Ctrl 和 Shift 键进行多选

rows
多行文本框显示时可以容纳的字符列数宽度

cols
多行文本框显示时可以容纳的字符行数高度

编写动态生成radio的函数

程序代码 程序代码

<?php
//函数体
function generate_radio_group($name,$options,$default){
    $name = htmlentities($name);
    foreach ($options as $value => $labls){
        $value = htmlentities($value);
        $html .="<input type=\"radio\" ";
        $html .= "name=\"$name\" value=\"$value\" ";
        if ($value == $default){
            $html .= "CHECKED";
        }
        $html .=">";
        $html .=$labls."<br>";
    }
    return ($html);    
}
//初始化数据
$options = array('010'=>'北京',
'022'=>'天津',
'024'=>'沈阳',
'020'=>'上海',
);
$default = '022';
//调用函数
$html = generate_radio_group('city',$options,$default);
//输出内容
echo $html;
?>


表单的处理方法

来看几个PHP全局数组:
程序代码 程序代码

<?php
$action = $_SERVER['PHP_SELF'];
echo $action."<br>";
$name = $_SERVER['SERVER_NAME'];
echo $name."<br>";
$ref = $_SERVER['HTTP_REFERER'];
echo $ref;
?>

输出结果:
程序代码 程序代码

/chap5/test.php
http://127.0.0.1/chap5/
127.0.0.1


HTTP_REFERER 保存一个完整的来源URL地址。
SERVER_NAME 当前的服务器名称。
PHP_SELF 当前脚本的完整路径,包括文件名。

看一个防止站外提交数据的例子:

程序代码 程序代码

<?php
$action = $_SERVER['PHP_SELF'];//当前脚本的完整路径,包括文件名
if ($_SERVER['REQUEST_METHOD'] == 'POST'){//判断表单提交方法
    $ref = $_SERVER['HTTP_REFERER'];//存一个完整的来源URL地址
    $srv ="http://{$_SERVER['SERVER_NAME']}$action";//获取服务器名称.$action一个完整的URL
    echo "客户端:$ref<br>服务端:$srv<hr>";
    
    if (strcmp($ref,$srv == 0))    {//利用strcmp函数判断两者是否相同
        echo "合法提交";
    }else{
        echo "非法提交";
    }
}else{
    echo "请提交表单!";
}
?>
<form action="<?php echo $action;?> " method="post">
<input type="submit" value="sumbit">
</form>


一个综合的例子:

form.htm

HTML代码


[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]


someform.php

程序代码 程序代码

<?php

//通过判断按钮的变量名是否在$_POST中定义,如果有表示该表单已提交
if(isset($_POST["btn_submit"])){
if (empty($_POST['username'])){
echo "您没有输入用户名";
exit(0);
}
if (empty($_POST['password'])){
echo "您没有输入密码: ";
exit(0);
}
echo "您的用户名: ".$_POST['user_name']."<br />";
echo "您的密码(明文): ".$_POST['password']."<br />";
echo "您的年龄: ".$_POST['age']."<br />";
if (!empty($_POST['languages'])){
echo "您选择的语言为:";
//处理用户选择兴趣的checkbox按钮产生的数组
foreach ($_POST['languages'] as $lang){
echo $lang. "  ";
}
} else {
echo "您没有输入任何兴趣爱好";
}
if (!empty($_POST['develop_ide'])){
echo "您使用的开发工具为:";
//处理用户多选开发工具菜单产生的数组
foreach ($_POST['develop_ide'] as $ide){
echo $ide. "  ";
}
} else {
echo "您没有选择开发工具";
}
echo "您的自我介绍: ".nl2br($_POST['intro'])."<br />";
echo "网页隐藏值(通过hidden标签值传递): ".$_POST['from']."<br />";
}
?>












[本日志由 zheman 于 2007-12-03 03:01 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 0 | 引用: 0 | 查看次数: 2405
  • 1
a [2009-04-16 03:09 PM]
<select></select>
  • 1
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭