表单与PHP的交互
作者:zheman 日期:2007-11-30

说起表单,我们获取信息基本上要全部依靠表单。例如注册邮箱,发表贴子灌水等等。
先来看一个例子:
程序代码<?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;
?>
输出结果:
程序代码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 />";
}
?>
评论: 0 | 引用: 0 | 查看次数: 2405
- 1
<select></select>
- 1
发表评论
上一篇
下一篇


文章来自:
Tags: