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 "您尚未登录,无权访问本页";
?>
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号