lwcompany

功到自然成

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

1 php与表单 

     1 提交表单数据

        表单数据的提交方法主要分为两种:POST方法和GET方法。

        POST

<?php
session_start();
session_destroy();
?>
方法是在HTTP请求中嵌入表单数据;GET方法则将表单数据附加到请求该页的URL中。

        提交表单时要将表单标记<form>的属性method设为post或get,post表示使用POST方法提交,get表示使用GET方法提交。

        属性action指定数据提交到的URL地址,提交后页面将跳转到这个地址。而用户输入的数据也将提交到该地址。例如:

                              <form method= "get" action= "test.php“>

    2 接收表单数据

         接收表单可以使用$_POST、$_GET和$_REQUEST来完成。$_REQUEST可以取得包括POST、GET和Cookie在内的外部变量

         接收表单数据即指获取表单控件的value属性的值。不同的控件可以设置不同的name属性,在接收数据时根据name属性确定是哪个控件的值。

         不同的控件设置value属性的方式也不一样

    3. 常用表单数据的验证方法

          有些表单数据填写时必须要符合一定的条件,例如,填写出生日期时必须要符合日期的格式,填写电话号码时必须要填写正确位数的数字。

          这时就需要通过验证表单数据来判断用户所填写数据的正确性。

          表单数据的验证一般可以使用正则表达式(见4.3节)来完成。例如,一个简单的验证日期的正则表达式可以写做“^\d{4}-(0?\d|1?[012])-(0?\d|[12]\d|3[01])$”。

          验证E-mail格式的正则表达式可以写做“^[a-zA-Z0-9_\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$”

   4.实例--使用php处理表单数据

          制作一个学生信息表单,包含学生学号、姓名、性别、出生日期、所学专业、备注、兴趣爱好等信息。要求学号必须为6位数字,出生日期必须符合日期格式,学号和姓名不允许为空。

          表单数据以GET方法提交到另一个页面,在另一个页面判断表单数据的正确性并输出。

          新建EX6_1_Hpage.php文件

<html>
<head>
	<title>学生个人信息</title>
</head>
<body>
<form method="get" action="EX6_1_Ppage.php">
  <table width="400" border="0" align="center" bgcolor="#CCFFCC">
    <tr>
      <td colspan="2"><div align="center">学生个人信息</div></td>
    </tr>
    <tr>
      <td width="120">学号:</td>
      <td><input name="XH" type="text" value=""></td>
    </tr>
    <tr>
      <td>姓名:</td>
      <td><input name="XM" type="text" value=""></td>
    </tr>
    <tr>
      <td>性别:</td><td>
        <input name="SEX" type="radio" value="男" checked="checked">男
        <input name="SEX" type="radio" value="女">女</td>
    </tr>
    <tr>
      <td>出生日期:</td>
      <td><input name="Birthday" type="text" value=""></td>
    </tr>
    <tr>
      <td>所学专业:</td>
      <td><select name="ZY">
          <option>计算机</option>
          <option>软件工程</option>
          <option>信息管理</option>
        </select></td>
    </tr>
    <tr>
      <td>备注:</td>
      <td><textarea name="BZ"></textarea></td>
    </tr>
    <tr>
      <td>兴趣:</td>
      <td><input name="XQ[]" type="checkbox" value="听音乐">听音乐
          <input name="XQ[]" type="checkbox" value="看小说">看小说
          <input name="XQ[]" type="checkbox" value="上网">上网</td>
    </tr>
    <tr>
      <td colspan="2" align="center"><input type="submit" name="BUTTON1" value="提交">
      	<input type="reset" name="BUTTON2" value="重置"></td>
    </tr>
  </table>
</form>
</body>
</html>

          新建EX6_1_Ppage.php文件

<?php
$XH=$_GET['XH'];
$XM=$_REQUEST['XM'];
$XB=$_GET['SEX'];
$CSSJ=$_GET['Birthday'];
$ZY=$_GET['ZY'];
$BZ=$_GET['BZ'];
$XQ=@$_GET['XQ'];
$checkbirthday=preg_match('/^\d{4}-(0?\d|1?[012])-(0?\d|[12]\d|3[01])$/',$CSSJ);	
if($XH==NULL)
{
	echo "学号不能为空!";
}
elseif(preg_match('/\d{6}/',$XH)==0)
{
	echo "学号格式错误!";
}
elseif($XM==NULL)
{
	echo "姓名不能为空!";
}
elseif($CSSJ&&$checkbirthday==0)
{
	echo "日期格式错误!";
}
else
{
	echo "学号:".$XH."<br>";
	echo "姓名:".$XM."<br>";
	echo "性别:".$XB."<br>";
	echo "出生日期:".$CSSJ."<br>";
	echo "专业:".$ZY."<br>";
	echo "备注:".$BZ."<br>";
	if($XQ)
	{
		echo "兴趣爱好:";
		foreach($XQ as $value)
		{
			echo $value." ";
		}
		echo "<br>";
	}
}
?>

2.获取URL参数

           1.获取URL参数的方法

                URL通常的格式为:“url?参数1=值1&参数2=值2&参数3=值3…”。

               在页面中使用“$_GET['参数']”即可获得具体参数的值,例如:

<a href="?action=超链接&name=王林">单击</a>

<?php

echo @$_GET['action']; //单击超链接后输出"超链接"

echo @$_GET['name'];   //单击超链接后输出"王林"

?>

      2.解析URL

              在PHP中可以使用parse_url()函数解析一个URL,并返回包含其相关内容的数组。语法格式如下:

               array parse_url(string $url)

              说明:$url为要解析的URL地址字符串。本函数不是用于解析URL的合法性,不完整的URL也可接受。除了对于严重不合格的URL,该函数将返回FALSE并发出警告外,

              函数将返回一个关联数组,包含URL中出现的各个组成部分。其组成部分为(至少有一个):

             ●scheme。如http。

             ●host。如www.php.net

             ●port。端口号。

             ●user。用户名。

             ●pass。密码。

             ●path。路径。

             ●query。在问号“?”之后的内容。

             ●fragment。在散列符号#之后的内容。

<?php
$url='http://username:password@www.php.net/index.php?arg=value#anchor';
print_r(parse_url($url));
/*输出:Array ( [scheme] => http [host] => www.php.net [user] => username
			[pass] => password [path] => /index.php [query] => arg=value
			[fragment] => anchor )
*/
?>

          3.URL编码与解码

           如果url参数中含有中文参数,为了防止在传递过程中出现乱码,需对URL进行编码.所谓的编码就是将字符串中除了”_”、“-”、“.”之外的所有非字母或数字字符都替换为一个以百分号

            “%”开头跟2位十六进制数的3位字符串,空格被替换为加”+”

           在php中对URL编码使用unlencode()函数

           url编码后使用urldecode()函数解码

        
3.页面跳转
        1. 使用haed()函数
<?php
$var1="sa";
$var2="sa";
if($var1==$var2)
{
	header("Location: http://www.php.net");
}
else
	echo "页面不能跳转";
?>

         2. 使用html标记
         最常用的方法是提交表单,将<form>标记的action属性设置为要跳转到的页面,提交表单后就跳转到该页面。
         例如: <form method="post" action="index.php"> <input type="text" name="text"> <input type="submit" name="bt" value="提交"> </form>
         用HTML的超链接标记<a>也能够实现跳转页面的功能,例如: <?php echo "<a href='index.php?id=1&name=david'>单击超链接</>"; ?>
         使用按钮也可以进行页面跳转,只需要在按钮控件的onclick方法中设置执行的代码即可,例如: <?php echo '<input type="button" name="bt" value="
         页面跳转" onclick="location=\'index.php\'">';
        3.使用客户端脚本
         在PHP中还可以使用客户端脚本实现页面的跳转,例如,在PHP中使用JavaScript跳转到index.php页面的代码如下:

<?php     
echo "<script>if(confirm('确认跳转页面?')) ";      
echo "window.location='index.php'</script>";          //上面一句也可写做echo "location.href='index.php'; 
</script>";         
?>         
       
4.会话管理  

       会话管理的思想是指在网中通过一个会话跟综用户,记录下用户的信息,实现信息在页面间的传递

     1.会话的工作原理

          php的会话也称为sessionID.在用户登录或访问一引起初始页面时服务器会为客户端分配一个SessionID.它保存在客户端.它可以保存在用户机器的cookie也可通过URL在网络中进行传输

          会话变量是用户通过SessionID注册一些特殊的变量,这些变量的数据保存在服务器端 。在一次特定的连接中,如果客户端通过cookie或url找到SessionID,那么服务器就可以根据客户端传来的

         SessionID访问会话保存在服务器端的会话变量。

         生命周期只能在一次特定的网站连接中有效,当关闭浏览器后,sessionID会自动失效,之前注册会话变量也不能使用。

     2.实现会话

         步骤如下:

           1.初始化会话

           2.注册会话变量

           3.访问会话变量

           4.注销并删除会话

           1.初始化会话

               在实现会话功能之前必须要初始化会话,初始化会话使用session_start()函数,语法格式如下:

               bool session_start(void)

               该函数将检查SessionID是否存在,如果不存在则创建一个,并且能够使用预定义数组$_SESSION进行访问。如果启动会话成功则函数返回TRUE,否则返回FALSE。

               会话启动后就可以载入该会话已经注册的会话变量以便使用

           2.注册会话变量

                会话变量保存在预定义数组$_session中,可以直接定义数组单元的方式来定义一个会话变量

                $_session[“键名”]=”值”

               会话变量定义后被记录在服务器中,并对该变量的值进行跟进踪,直到会话结束或手动注销该变量。

           3.访问会话变量

                 要在一个脚本访问会话变量,首先使用session_statr()函数启动一个会话,之后可以使用$_session数组访问变量了。

<?php
session_start();
if(isset($_SESSION["name"]))
{
	echo $_SESSION["name"];
}
else
	echo "会话变量未注册";
?>

                   可以使用isset()函数或empty()函数来判断会话变量是否存在。

             4.销毁会话变量

                    会话变量使用完后,删除已注册的会话变量以减少对服务器资源占用。删除使用unset()函数,

                     void unset(mixed $var [, mixed $var [, $... ]])

                     说明:$var是要销毁的变量,可以销毁一个或多个变量

<?php
$var="hello";
session_start();
$_SESSION["var"]=$var;					//注册会话变量
unset($_SESSION["var"]);					//删除会话变量
if(!isset($_SESSION["var"]))				//判断是否存在会话变量
	echo "删除成功";
?>

              5.销毁会话变量

                     使用完一个会话后,要注销所有的会话变量,然后再调用session_destroy()函数销毁会话,语法格式如下:                     

                      bool session_destroy ( void )

                      该函数将删除会话的所有数据并清除SessionID,关闭该会话。例如:

<?php
session_start();
session_destroy();
?>

例6.2      创建一个用户登录页面,设定的用户名和密码分别为administrator和123456。表单提交到本页面,当用户名和密码输入正确时,启动Session,将用户名和密码值传到用户管理员页面。如果不先登录而访问用户管理员页面则提示无权访问。

<html>
<body>
<form action="EX6_2_1.php" method="post">
<table border="0" align="center">
<tr><td colspan="2" align="center">用户登录</td></tr>
<tr><td align="center">用户名</td>
<td>
<input name="username" type="text"></td></tr>
<tr>
<td align="center">密码</td>
<td>
<input name="password" type="password">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="Submit" value="登录">
<input type="reset" name="Submit2" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
<?php
session_start();
if(isset($_POST['Submit']))
{
	$username=$_POST['username'];
	$password=$_POST['password'];
	if($username=="administrator"&&$password=="123456")
	{
		$_SESSION['username']=$username;
		$_SESSION['password']=$password;
		header("location:EX6_2_2.php");
	}
	else
	{
		echo "<script>alert('登录失败');location.href='EX6_2_1.php';</script>";
	}
}
?>

新建ex6_2_2.php文件,输入以下代码:

<?php
session_start();
$username=@$_SESSION['username'];
$password=@$_SESSION['password'];
if($username)
	echo "欢迎管理员登录,您的密码为$password";
else
	echo "对不起,您没有权限登录本页";
?>

         3.在php中实现cookie

                 作用:解决了关闭ie时,seesion重新注册问题

                 缺点:

                        .多人共用一台计算机,cookie数据容易泄露

                        .一个站点存储的cookie信息有限

                        .有些浏览器不支持COOKIE;

                        .用户可以设置IE,禁用cookie;

                 由于上述局限,所以在进行会话管理时,sessionid通常会摆选择cookie和url两种方式来保存,而不是只保存在cookie中。

                 1.创建cookie

                       bool setcookie(string $name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly ]]]]]])

                       注意:服务器php.ini文件输出缓存开启,

                               $name.表示cookie的名字

                               $value.保存在客户端的值

                               $expire.表示cookie保存时间,是一个UNIX时间戳,对于expire设置一般通过当前时间戳加上相应的秒数来决定。例如time()+1200表示cookie将在20分钟后失效。

                                         如果不设置cookie将在浏览器关闭后失效。

                               $pah.表示在服务器上有效路径

                               $domain.表示在服务器上的有效域名

                               $secure.表示允许通过安全的https协议传输.0表示允许。

                 2.访问cookie

                              访问cookie的方法与session类似

                               例如

<?php
setcookie("name","david");
if(isset($_COOKIE["name"]))
	echo $name;
?>

                              

                 3.删除cookie

                                Cookie在创建时指定了一个过期时间,如果到了过期时间,Cookie将自动被删除。在PHP中没有专门的删除Cookie的函数。

                                如果为了安全方面的考虑,在Cookie过期之前就想删除Cookie,可以使用setcookie()函数或$_COOKIE数组将已知Cookie的值设为空。

                                例如:

 

<?php
$_COOKIE["user"]="administrator";
setcookie("password","123456",time()+3600);
$_COOKIE["user"]="";						//使用$_COOKIE清除Cookie
setcookie("password","");					//使用setcookie()函数清除Cookie
print_r($_COOKIE);			      			//输出:Array ( [user] => )
?>
例6.3 制作一个登录表单,将表单的值保存在Cookie中,并可以选择Cookie的有效时间。    
<html>
<body>
<form action="EX6_3_1.php" method="post">
<table border="0" align="center">
<tr><td align="center">用户名</td><td><input name="username" type="text"></td></tr>
<tr><td align="center">密码</td><td><input name="password" type="password"></td></tr>
<tr><td>Cookie保存时间</td>
	<td><select name="time">
		  <option value="0" selected>不保存</option>
          <option value="1">保存一小时</option>
          <option value="2">保存一天</option>
          <option value="3">保存一星期</option>
        </select></td></tr>
<tr><td colspan="2" align="center">
<input type="submit" name="Submit" value="登录">
<input type="reset" name="Submit2" value="重置"></td></tr>
</table>
</form>
</body>
</html>
<?php
setcookie("username");
if(isset($_POST['Submit']))
{
	$username=$_POST['username'];
	$password=$_POST['password'];
	$time=$_POST['time'];
	if($username=="administrator"&&$password=="123456")
	{
		switch($time)
		{
			case 0:
				setcookie("username",$username);
				break;
			case 1:
				setcookie("username",$username,time()+60*60);
				break;
			case 2:
				setcookie("username",$username,time()+24*60*60);
				break;
			case 3:
				setcookie("username",$username,time()+7*24*60*60);
				break;
				
		}
		header("location:EX6_3_2.php");
	}
	else
	{
		echo "<script>alert('登录失败');location.href='EX6_3_1.php';</script>";
	}
}
?>

新建ex6_3_2.php

<?php
if($username=@$_COOKIE['username'])
{
	echo "欢迎管理员".$username."登录";
}
else
	echo "您没有权限访问本页面";
?>

6.5 实例--制作一个php互动网页

                                     例4 制作一个智能问答系统,系统根据存储于文本文件中的用户信息判断用户是否是合法登录。

                                     登录后可以进行智力问答,回答完后系统会计算其所得分数。

                                     practice文件夹下新建一个EX6_4_info.txt文本文件,在其中保存用户的信息,有用户名、密码两个信息,中间用“|”隔开,如输入如下几行数据:

user1|123456

user2|654321

user3|111111

新建EX6_4_main.php文件(主页面),输入以下代码

<?php
session_start();
$username=@$_GET['username'];						//获取用户名
$password=@$_GET['password'];						//获取密码

//本函数用于获取文本文件中的用户数据
function loadinfo()
{
	$user_array=array();
	$filename='EX6_4_info.txt';						//用户信息文件
	$fp=fopen($filename,"r");						//打开文件
	$i=0;
	while($line=fgets($fp,1024))					
	{
		list($user,$pwd)=explode('|',$line);		//读取每行数据
		$user=trim($user);							//去掉首尾特殊符号
		$pwd=trim($pwd);						
		$user_array[$i]=array($user,$pwd);			//将数组组成一个二维数组
		$i++;
	}
	fclose($fp);
	return $user_array;								//返回一个数组
}
$user_array=loadinfo();								
if($username)										
{
	//判断用户输入用户名和密码是否正确
	if(!in_array(array($username,$password),$user_array))
		echo "<script>alert('用户名或密码错误!');location='EX6_4_login.php';</script>";
	else
	{
		foreach($user_array AS $value)				//遍历数组
		{
			list($user,$pwd)=$value;
			if($user==$username&&$pwd==$password)
			{
				$_SESSION['username']=$username;	//使用Session将用户名和密码传到其它页面
				$_SESSION['password']=$password;
				echo "<div>您的用户名为:".$user."</div>";
				echo "<br>";
				if($points=@$_SESSION['QA_points'])	//得到EX6_4_QA.php中使用Session传来的值
				{
					echo "您刚刚答题得到了".$points."分<br>";
					echo "<input type='button' value='继续答题' onclick=window.location='EX6_4_QA.php'>";
				}
				else
				{
					echo "您还没有答题记录<br>";
					echo "<input type='button' value='开始答题' onclick=window.location='EX6_4_QA.php'>";
				}
			}
	
		}
	}
}
else
	echo "您尚未登录,无权访问本页";

?>

新建ex6_4_QA.PHP文件(答题页面),输入以下码:

 

<?php
session_start();
$username=@$_SESSION['username'];
$password=@$_SESSION['password'];
if($username)
{
	echo $username.",请回答以下题目:<br>";
	?>
	<form method="post" action="">
	<div>1. 农夫有17只羊,除了9只以外都病死了,农夫还剩几只羊?<br>
	<input type="radio" name="q1" value="1">17
	<input type="radio" name="q1" value="2">9
	<input type="radio" name="q1" value="3">8</div><br>
	<div>2. 大月有31天,小月有30天,那么一年中几个月有28天?<br>
	<input type="radio" name="q2" value="1">1个
	<input type="radio" name="q2" value="2">4年一个
	<input type="radio" name="q2" value="3">12个</div><br>
	<div>3. 小明的妈妈有三个小孩,老大叫大毛,老二叫二毛,老三叫什么?<br>
	<input type="radio" name="q3" value="1">三毛
	<input type="radio" name="q3" value="2">小明
	<input type="radio" name="q3" value="3">不知道</div><br>
	<div>4. 英国有没有七月四日(美国独立纪念日)?<br>
	<input type="radio" name="q4" value="1">有
	<input type="radio" name="q4" value="2">没有
	<input type="radio" name="q4" value="3">不知道</div><br>
	<div>5. 医生给你3个药丸,要你每30分钟吃1个,这些药丸多久后会被吃完?<br>
	<input type="radio" name="q5" value="1">90分钟
	<input type="radio" name="q5" value="2">60分钟
	<input type="radio" name="q5" value="3">30分钟</div><br>
	<input type="submit" value="提交" name="submit">
	</form>
<?php
	if(isset($_POST['submit']))
	{
		$q1=@$_POST['q1'];
		$q2=@$_POST['q2'];
		$q3=@$_POST['q3'];
		$q4=@$_POST['q4'];
		$q5=@$_POST['q5'];
		$i=0;
		if($q1=="1")
			$i++;
		if($q2=="3")
			$i++;
		if($q3=="2")
			$i++;
		if($q4=="1")
			$i++;
		if($q5=="2")
			$i++;
		$_SESSION['QA_points']=$i*20;								//使用Session将答题所得分数传到其它页面
		echo "<script>alert('您一共答对".$i."道题,得到".($i*20)."分');";
		echo "if(confirm('返回继续答题?'))";
		echo "window.location='EX6_4_QA.php';";
		echo "else ";
		echo "window.location='EX6_4_main.php?username=$username&password=$password';";	//使用get方法提交本页面的用户信息
		echo "</script>";
	}
	
}
else
	echo "您尚未登录,无权访问本页";
?>
posted on 2011-07-11 11:29  平渡飞扬  阅读(1360)  评论(0编辑  收藏  举报