对于许多web应用程序而言,数据库都是其核心所在。数据库几乎可以用来存储所有你想要检索和更新的任何信息,下面是一个通过PDO操作MySQL数据库来实现用户登陆注册功能的案例

效果图展示:

  1. 这是登陆和注册的页面
  2. 注册信息格式错误,则在输入框右侧显示错误
    注册信息格式正确且该用户名未被使用,则弹出js消息提示框提示注册成功,并显示所有注册用户的信息
  3. 账号不存在或密码错误,则提示错误信息,并回到登陆页面
    账号密码正确,则提示登陆成功,并进入java学习网站页面

代码部分:

  1. 先创建数据库regist和数据库表user,其中name和pass为user表中的必须字段
create database regist;
use regist
create table user(
  name varchar(255) primary key not null,
  pass varchar(255) not null,
  email varchar(255),
  phone varchar(255)
)default charset=utf8;
  1. connection.php文件
    由于登陆和注册时都需要用到regist数据库中的user表,所以这里我将连接regist数据库的部分独立出来,在需要连接regist数据库的时候,再引用该文件即可,这样可以增加代码的复用性
<meta charset="utf-8">
<?php
	try{
		$dbtype="mysql";//使用的数据库类型
		$servername="localhost";//数据库服务器主机名
		$user="root";//数据库连接用户名
		$pass="root";//数据库连接密码
		$dbname="regist";//选用的数据库

		//这里注意,=号两边不能存在空格,不然会报错,如:dbname = $dbname这样写就会报错
		$conn=new PDO("$dbtype:host=$servername;dbname=$dbname",$user,$pass);
		
	}catch(PDOException $e){
		print "error!".$e->getMessage();
		die();
	}
?>
  1. regist.html文件
    这里实现的是注册界面
<meta charset="utf-8">
<!DOCTYPE html>
<html>
<head>
	<title>注册页面</title>

</head>
<body>

	<header>
		<h2>
		&emsp;&emsp;<a href="regist.html">注册</a>
		&emsp;&emsp;<a href="login.html">登陆</a>
		</h2>
		&emsp;&emsp;&emsp;&emsp;&emsp;<font size="4" face="隶书" color="red">* 必需字段</font>
		<br><br>
	</header>

	<form action="regist.php" method="POST">
		 &emsp;用户名:<input type="text" name="username" placeholder="请输入姓名"><font color="red">*</font>
		<font color="red"><?php echo $usernameErr;?></font>
		<br><br>

		 &emsp;&emsp;码:<input type="password" name="userpass" placeholder="请输入密码"><font color="red">*</font>
		<font color="red"><?php echo $userpassErr;?></font>
		<br><br>

		确认密码:<input type="password" name="confirmpassword" placeholder="请确认密码"><font color="red">*</font>
		<font color="red"><?php echo $confirmpasswordErr;?></font>
		<br><br>

		Q&nbsp;Q邮箱:<input type="text" name="qqemail" placeholder="请输入qq邮箱">
		<font color="red"><?php echo $qqemailErr;?></font>
		<br><br>

		手机号码:<input type="text" name="mobilephone" placeholder="请输入手机号">
		<font color="red"><?php echo $mobilephoneErr;?></font>
		<br><br>

		&emsp;&emsp;<input type="submit" name="submit" value="注册">
		&emsp;&emsp;<input type="reset" name="reset" value="重置">
	</form>

</body>
</html>
  1. regist.php文件
    该文件中包含对form表单提交的数据进行验证 和 操作数据库两部分,
    再判断提交数据的格式正确且用户名未被注册后,将数据保存到regist数据库的user表中
<meta charset="utf-8">
<?php

    //先启动session
	session_start();

/*1.表单验证部分*/

	//获取表单提交数据
	$username=$_POST['username'];
	$userpass=$_POST['userpass'];
	$confirmpassword=$_POST['confirmpassword'];
	$qqemail=$_POST['qqemail'];
	$mobilephone=$_POST['mobilephone'];
	//格式错误信息提示
	$usernameErr=$userpassErr=$confirmpasswordErr=$qqemailErr=$mobilephoneErr="";
	
	//验证姓名
	if (empty($_POST["username"])){
		$usernameErr = "名字是必需的";
		include_once('regist.html');
		die();      
    }else{
        if (!preg_match("/^[a-zA-Z ]+$/",$username)){
        	$usernameErr = "只允许字母"; 
        	include_once('regist.html');
        	die();      
        }
    }  

    //验证密码
    if (empty($_POST["userpass"])){
		$userpassErr = "密码是必需的";
		include_once('regist.html');
		die();
    }else{
        if (!preg_match("/^[\w]{6}$/",$userpass)){
        	$userpassErr = "只允许字母或数字且长度为6"; 
        	include_once('regist.html');
        	die();
        }
    }  

    //再次确认密码
    if (empty($_POST["confirmpassword"])){
		$confirmpasswordErr = "请确认密码";
		include_once('regist.html');
		die();
    }else{
    	if ($userpass!=$confirmpassword){
			$confirmpasswordErr = "密码不一致";
			include_once('regist.html');
			die();
   		}
   	}

    //验证邮箱
    if (!empty($_POST["qqemail"])){
    	if (!preg_match("/^[\w]+@{1}[q]{2}(\.[c]{1}[o]{1}[m]{1})$/",$qqemail)){
       		$qqemailErr = "只支持QQ邮箱"; 
        	include_once('regist.html');
        	die();
    	}
    }

    //验证手机号码
    if (!empty($_POST["mobilephone"])){
    	if (!preg_match("/^[1][358]\d{9}$/",$mobilephone)){
        	$mobilephoneErr = "手机号格式错误"; 
        	include_once('regist.html');
        	die();
    	} 
	}

	                                           
/*2.操作数据库部分*/

	//引用connection.php文件连接数据库
	include_once('connection.php');

	//使用预处理语句执行查询操作,判断用户是否已存在
	$stmt=$conn->prepare("select*from user where name=:name");
	//使用bind_param()函数绑定参数
	$stmt->bindParam(':name',$username);
	$stmt->execute();
	if($count=$stmt->rowcount()>0){
		echo "用户已存在,请重新注册!"."<a href='regist.html'>去注册</a>"."<br>";
		echo $count;
		die();
	}

	if($qqemail!=""&&$mobilephone!=""){
		//判断该用户未注册后,使用预处理语句将其插入到user表中
		$stmt=$conn->prepare("insert into user(name,pass,email,phone) values(:name,:pass,:email,:phone)");
		//使用bind_param()函数绑定参数
		$stmt->bindParam(':name',$name); 
		$stmt->bindParam(':pass',$pass); 
		$stmt->bindParam(':email',$email); 
		$stmt->bindParam(':phone',$phone);
		//为绑定的参数赋值
		$name=$username;
		$pass=$userpass;
		$email=$qqemail;
		$phone=$mobilephone;
		//执行
		$result=$stmt->execute();
		if($result){
			//插入成功后,弹出消息提示框
			echo "<script>alert('注册成功')</script>"."<br>";
		}else{
			die();
		}
	}

	if($qqemail!=""){
		//判断该用户未注册后,使用预处理语句将其插入到user表中
		$stmt=$conn->prepare("insert into user(name,pass,email) values(:name,:pass,:email)");
		//使用bind_param()函数绑定参数
		$stmt->bindParam(':name',$name); 
		$stmt->bindParam(':pass',$pass); 
		$stmt->bindParam(':email',$email);  
		//为绑定的参数赋值
		$name=$username;
		$pass=$userpass;
		$email=$qqemail;
		//执行
		$result=$stmt->execute();
		if($result){
			//插入成功后,弹出消息提示框
			echo "<script>alert('注册成功')</script>"."<br>";
		}else{
			die();
		}
	}
	
	if($mobilephone!=""){
		//判断该用户未注册后,使用预处理语句将其插入到user表中
		$stmt=$conn->prepare("insert into user(name,pass,phone) values(:name,:pass,:phone)");
		//使用bind_param()函数绑定参数
		$stmt->bindParam(':name',$name); 
		$stmt->bindParam(':pass',$pass); 
		$stmt->bindParam(':phone',$phone);  
		//为绑定的参数赋值
		$name=$username;
		$pass=$userpass;
		$phone=$mobilephone;
		//执行
		$result=$stmt->execute();
		if($result){
			//插入成功后,弹出消息提示框
			echo "<script>alert('注册成功')</script>"."<br>";
		}else{
			die();
		}
	}

	if($qqemail==""&&$mobilephone==""){
		//判断该用户未注册后,使用预处理语句将其插入到user表中
		$stmt=$conn->prepare("insert into user(name,pass) values(:name,:pass)");
		//使用bind_param()函数绑定参数
		$stmt->bindParam(':name',$name); 
		$stmt->bindParam(':pass',$pass); 
		//为绑定的参数赋值
		$name=$username;
		$pass=$userpass;
		$result=$stmt->execute();
		if($result){
			//插入成功后,弹出消息提示框
			echo "<script>alert('注册成功')</script>"."<br>";
		}else{
			die();
		}
	}
	
	$stmt=$conn->prepare("select*from user");
	//执行execute()函数返回的是一个PDOStatement对象,表示执行成功或失败
	$result=$stmt->execute();
	if($result){
		//fetch()方法用于获取结果集的下一行(fetch()方法是一行一行进行检索的),并放入到关联数组,然后通过while()循环输出结果集
		//众所周知,我们平时获取数组的值时,一般都是通过数字索引或者是其字符串键来获取的
		//结果集的返回方式通过fetch()方法的参数来控制,参数为PDO::FETCH_ASSOC,即通过列名作为数组索引来获取
		//参数为PDO::FETCH_NUM时,通过列号作为索引来获取,参数为PDO::FETCH_BOTH时,即可通过列名来获取也可通过列号来获取,不写默认为PDO::FETCH_BOTH
		//具体可以看:https://www.jb51/article/105797.htm或http://www.php/php-weizijiaocheng-361205.html
		echo "注册用户<br>";
		while($row=$stmt->fetch()){
			echo $row['name']." " .$row['pass']." ".$row['email']." ".$row['phone']."<br>";
			// echo $row['0']." " .$row['1']." ".$row['2']." ".$row['3']."<br><br>";
		}
		//输出结果集中的行数
		echo "注册人数为:".$count=$stmt->rowcount()."<br>";
	}
	

	//关闭数据库连接,释放资源
	$conn=null;
	session_destroy();

?>
  1. login.html文件
    这里实现的是登陆界面
<meta charset="utf-8">
<!DOCTYPE html>
<html>
<head>
	<title>登陆页面</title>
</head>
<body>

	<header>
		<h2>
		&emsp;&emsp;<a href="regist.html">注册</a>
		&emsp;&emsp;<a href="login.html">登陆</a>
		</h2>
		&emsp;&emsp;&emsp;&emsp;<font size="4" face="隶书" color="red">* 必需字段</font>
	</header>
	<br>
	<form action="login.php" method="POST">
		姓名: <input type="text" name="username" placeholder="请输入姓名"><font color="red"> *</font>
		<br><br>
		密码: <input type="password" name="userpass" placeholder="请输入密码"><font color="red"> *</font>
		<br><br>
		&emsp;&emsp;<input type="submit" name="submit" value="登陆">
		&emsp;&emsp;<input type="reset" name="reset" value="重置">
	</form>

</body>
</html>

6.login.php文件
查询user表中的数据,判断是否含有该用户的信息,有则登陆成功,并跳转到pagehome.html (java学习网站界面)

<meta charset="utf-8">
<?php

	//先启动session
	session_start();
	
	//获取表单提交数据
	$username=$_POST['username'];
	$userpass=$_POST['userpass'];
	//判断提交信息是否为空
	if($username==""||$userpass==""){
		//弹出消息提示框
		echo "<script>alert('用户名或密码为空')</script>";
		die();
	}
?>
<?php
	//引用connection.php文件连接数据库
	include_once('connection.php');

	//预处理sql语句
	$stmt=$conn->prepare("select*from user where name=:name and pass=:pass");
	//使用bindParam()方法绑定参数
	$stmt->bindParam(':name',$name);
	$stmt->bindParam(':pass',$pass);
	//为绑定的参数赋值
	$name=$username;
	$pass=$userpass;
	//执行
	$stmt->execute();
	//判断结果集中的行数是否大于0
	if($count=$stmt->rowcount()>0){
		//弹出消息提示框
		echo "<script>alert('登陆成功!')</script>";
		//跳转到主页面
		include_once('homepage.html');
	}else{
		//弹出消息提示框
		echo "<script>alert('用户名或密码错误!')</script>";
		//跳转会登陆页面
		include_once('login.html');
	}

	//关闭数据库连接
	$conn=null;
	//删除session
	session_destroy();
?>
  1. pagehome.html文件
    这是用户登陆成功后跳转到的界面(java学习网站界面)
<meta charset="utf-8">
<!DOCTYPE html>
<html>
<head>
	<title>主页面</title>
</head>
<body>

<center><font face="隶书" size="7" color="gray">java学习网站</font></center>

<a href="https://www.bjsxt/download.html"><font face="隶书" size="5">北京尚学堂官网--【强烈推荐,视频均可免费下载而且很全】</font></a><br><br>

<a href="http://how2j/"><font face="隶书" size="5">how2j的java教程</font></a><br><br>

<a href="http://www.atguigu/download.shtml#semst"><font face="隶书" size="5">尚硅谷</font></a><br><br>

<a href="http://www.runoob"><font face="隶书" size="5">菜鸟教程</font></a><br><br>


<a href="https://github/"><font face="隶书" size="5">github开源社区</font></a><br><br>

<a href="https://blog.csdn/weixin_42950079"><font face="隶书" size="5">CD4356的博客</font></a><br><br>

<a href="https://www.liaoxuefeng/wiki/0013739516305929606dd18361248578c67b8067c8c017b000"><font face="隶书" size="5">缪雪峰的git教程</font></a><br><br>

<a href="https://github/CyC2018/CS-Notes"><font face="隶书" size="5"> 面试必备基础知识</font></a><br><br>

<a href="https://m.aliyun/jiaocheng/"><font face="隶书" size="5">阿里云教程</font></a><br><br>

</body>
</html>

完整代码可到此处下载

扩展:

php操作MySQL数据库的方法和解析

更多推荐

用户登陆注册功能(PHP)