[PHP]登录表单例程

这个示例展示了如何使用PHP创建一个简单的登录表单,包括用户输入验证和登录失败的提示。表单数据通过POST方法发送到服务器,然后通过'userauth'函数验证用户名和密码。如果验证失败,用户将被重定向回登录页面并显示错误信息。验证成功后,用户将被重定向到指定页面或主页。此外,还包含一些JavaScript代码,用于客户端的表单字段验证。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EN" lang="EN" dir="ltr">
<head profile="http://gmpg.org/xfn/11">
<title>Login [example]</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="imagetoolbar" content="no" />
</head>

<?php 
	function userauth( $user, $passwd ) {
		//TODO: 在这里应该连接数据库验证用户
		if($user=="test"&&$passwd=="0000")return true;
		else return false;
	}
?>

<body id="top">
<?php
	if( $_SERVER['REQUEST_METHOD']!='POST' ){ 
		//确认这是一个GET请求,而不是POST请求。
?>

<!-- <form action="/login.php?next=<?php echo urlencode($_SERVER['REQUEST_URI']); ?>" method="post"> -->
<?php 
	#如果从其他页面提交过来,可以在action中指定next参数,一般指定为自身URL,
	#这样登入成功可以重定向回来。$_SERVER['REQUEST_URI']表示自身URL。通过浏览器查看本页面的源代码可以看到产生的输出。*/ 
?>

<form action="/login.php" method="post">
	<div>请输入帐号和密码:</div><br/>
	<?php if( isset($_GET["r"]) ){ //验证失败重定向过来则显示错误信息。 ?>
	<div style="color:red;">登录失败</div><br/>
	<?php } ?>
	<div>
		<input id="txtUser" name="txtUser" type="text" />
		<input id="txtPasswd" name="txtPasswd" type="password" />
	</div><br/>
	<div>
		<input type="submit" name="btnlogin" id="btnlogin" value="OK" />
	</div>
</form>

<?php
	}else{
		if( !userauth($_POST['txtUser'],$_POST['txtPasswd']) ) 
			Header("Location: /login.php?r=err"); //没有通过验证,重定向回去
		else{
			//TODO:设置Cookie或Session,记录用户的登入状态。
			#如果设置Cookie则必须加密,如果设置Session则网站不能在集群服务器或多核负载均衡下工作,所以各有利弊。
			if ( isset($_GET["next"]) ){
				Header("Location: /".$_GET["next"]); //通过验证,重定向到next参数指定的页面
			}
		}
?>
<div>
	<h2>您好!<?php echo $_POST['txtUser'] ?></h2>
	<p>欢迎光临本站。</p><br/>
	<!-- <p><a href="profile">» 账户</a> | <a href="/logout">退出 »</a></p> -->
</div>
<?php 
	} 
	#注意括号对应!要注意把动态语言和静态语言分清楚。
	#这就好比做分次积分。服务器执行动态语言好比第一次积分,静态代码这时候充其量都是字符串。
	#客户端运行静态代码和脚本代码好比第二次积分,这时动态语言中该输出的早已输出,都是常量了。
?>

<script type="text/javascript">
	<?php #这些javascript负责在客户端对表单合法性完成初步的校验。至少各项不空才提交,节省服务器的计算资源。 ?>
	function checkfields(){
		var uname=document.getElementById("txtUser").value;
		//var ualias=document.getElementById("txtName").value;
		var upwd=document.getElementById("txtPasswd").value;
		//var upwd2=document.getElementById("txtPasswdAgain").value;
		var buttonSubmit=document.getElementById("btnlogin");
		//if(uname.match(/^[a-z0-9A-Z]+$/)&&upwd==upwd2&&upwd!=""&&ualias.match(/^[a-z0-9A-Z\u4E00-\u9FA5\u00A0-\u00FF\u0400-\u052F]+$/))buttonSubmit.disabled=false;
		if(uname.match(/^[a-z0-9A-Z]+$/)&&upwd!="")buttonSubmit.disabled=false;
		else buttonSubmit.disabled=true;
	}
	window.setInterval('checkfields()',100);
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值