PHP+MySQL制作简单的用户注册登录界面(注释超详细~附源代码)

成果

网站能实现判断账户信息是否合法,同时附带验证码验证登录。在用户输入正确的用户名与密码后会有登录成功的弹窗,若输入的账户不存在,则会跳转至注册页面。

be9763a682424fe5a4b8476a9b3c456d.png

 4719364cd26b4f28b99984132965aac6.png

 实现过程

项目文件分配:

1ce61647bac94dcdb03ffae4ebbea31d.png

1.首先创建login.html

实现的是用户登录的界面,可以自定义css美化页面,这里主要目的是功能的实现而非界面美观。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<link href=../css/login.css rel="stylesheet"/>
</head>

<body background="./images/loginbg.png" style="background-size: 100% 100%;background-attachment: fixed;">
<div class=box>
	<div class=title>用户登录</div>
	<form action="../login.php" method="post">
		<table class=login>
			<tr><th>用户名:</th><td><input type="text" name="username"/></td></tr>
			<tr><th>密码:</th><td><input type="password" name="password"/></td></tr>
			<tr><th>验证码:</th><td><input type="text" name="captcha"/></td></tr>
			<tr><th></th><td><img src="../code.php"/></td></tr>
			<tr><th></th><td><input type="submit" value="登录"/><a href="register.php"><input type="button" value='前往注册'></a></td>
						
			</tr>
			
		</table>
	
	</form>
</div>
</body>
</html>

2.创建login.php,将其与login.html关联

<?php
header('content-type:text/html;charset=utf-8');
//登录界面
require 'login_db_connect.php';//连接数据库


//判断表单是否提交,用户名密码是否提交
if (isset($_POST['username'])&&isset($_POST['password'])){//登录表单已提交
    
    //获取用户输入的验证码
    $captcha = isset($_POST['captcha']) ? trim($_POST['captcha']) : '';
    //获取Session中的验证码
    session_start();
    if(empty($_SESSION['captcha'])){  //如果Session中不存在验证码,则退出
        exit('验证码已经过期,请返回并刷新页面重试。');
    }
    //获取验证码并清除Session中的验证码
    $true_captcha = $_SESSION['captcha'];
    unset($_SESSION['captcha']); //限制验证码只能验证一次,防止重复利用
    //忽略字符串的大小写,进行比较
    if(strtolower($captcha) !== strtolower($true_captcha)){
        exit('您输入的验证码不正确!请返回并刷新页面重试。');
    }
    //验证码验证通过,继续判断用户名和密码
    //获取用户输入的用户名密码
    $username=$_POST["username"];
    $pwd=$_POST["password"];
    $sql="select id,username,password from user where username='$username' and password='$pwd';";
    $result=mysqli_query($con, $sql);//执行sql语句
    $row=mysqli_num_rows($result);//返回值条目
    if (!$row){//若返回条目不存在则证明该账号不存在或者密码输入错误
        echo "<script>alert('账号不存在或密码错误,点击前往注册');location='./register.php'</script>";
        //exit('账号或密码错误');
    }else{//存在返回条目证明用户账号密码匹配,进入主页面
        session_start();
        $_SESSION['username']=$_POST['username'];
        echo "<script>alert('欢迎');location='./index.php'</script>";
    }   
}


require './view/login.html';

3.注册页面register.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户注册</title>
<link href=../css/login.css rel="stylesheet"/>
</head>

<body background="./images/loginbg.png" style="background-size: 100% 100%;background-attachment: fixed;">
<div class=box>
	<div class=title>用户注册</div>
	<form action="../register.php" method="post">
		<table class=login>
			<tr><th>用户名:</th><td><input type="text" name="username"/></td></tr>
			<tr><th>密码:</th><td><input type="password" name="pwd"/></td></tr>
			<tr><th></th><td><input type="submit" value="注册"/></td>
			</tr>
			
		</table>
	
	</form>
</div>
</body>
</html>

4.创建register.php,与register.html关联。

<?php
header('content-type:text/html;charset=utf-8');
//注册页面
require 'login_db_connect.php';//连接数据库

//判断表单是否提交,用户名密码是否提交
if (isset($_POST['username'])&&isset($_POST['pwd'])){//登录表单已提交
    //获取用户输入的用户名密码
    $user=$_POST["username"];
    $pwd=$_POST["pwd"];
    //判断提交账号密码是否为空
    if ($user=='' || $pwd==''){
        exit('账号或密码不能为空');
    }else {
        $sql="insert into user(username,password) values ('$user','$pwd');";//添加账户sql语句
        $select="select username from user where username='$user'";
        $result=mysqli_query($con, $select);//执行sql语句
        $row=mysqli_num_rows($result);//返回记录数
        if(!$row){//记录数不存在则说明该账户没有被注册过
            if (mysqli_query($con,$sql)){//查询insert语句是否成功执行,成功将返回 TRUE。如果失败,则返回 FALSE。
                //跳转登录页面
                echo "<script>alert('注册成功,请登录');location='./login.php'</script>";
            }else{//失败则重新跳转注册页面
                echo "<script>alert('注册失败,请重新注册');location='./regsiter.php'</script>";
            }
        }else{//存在记录数则说明注册的用户已存在
            echo "<script>alert('该用户已经存在,请直接登录');location='./login.php'</script>";
        }
    }  
}


require './view/register.html';

5.创建code.php,用于生成验证码

<?php
//用于生成验证码
//创建验证码画布
$img_w = 100;  //验证码的宽度
$img_h = 30;   //验证码的高度
$img = imagecreatetruecolor($img_w, $img_h);         //创建画布
$bg_color = imagecolorallocate($img,0xcc,0xcc,0xcc); //画布颜色
imagefill($img,0,0,$bg_color);                       //背景色

//生成验证码文本
$count = 4; //验证码位数
$charset = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; //随机因子
$charset_len = strlen($charset)-1; //计算随机因子长度(作为取出时的索引)
$code = ''; //保存生成的验证码
for($i=0; $i<$count; ++$i) {
//通过索引取出字符,mt_rand()用于获取指定范围内的随机数
    $code .= $charset[mt_rand(0,$charset_len)];
}

//将生成的文本保存到Session中
session_start();//启动session
$_SESSION['captcha'] = $code;

//在画布中绘制验证码文本
$fontSize = 16;    //文字大小
$fontStyle = './fonts/SourceCodePro-Bold.ttf'; //字体样式
//生成指定长度的验证码
for($i=0; $i<$count; ++$i){
    //随机生成字体颜色
    $fontColor = imagecolorallocate($img,mt_rand(0,100),mt_rand(0,50),mt_rand(0,255));
    imagettftext (
        $img,        //画布资源
        $fontSize,  //文字大小
        mt_rand(0,20) - mt_rand(0,25),            //随机设置文字倾斜角度
        $fontSize*$i+20,mt_rand($img_h/2,$img_h), //随机设置文字坐标,并自动计算间距
        $fontColor,  //文字颜色
        $fontStyle,  //文字字体
        $code[$i] 	 //文字内容
        );
}

//为验证码图片生成彩色噪点
for($i=0; $i<300; ++$i){
    //随机生成颜色
    $color = imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
    //随机绘制干扰点
    imagesetpixel($img,mt_rand(0,$img_w),mt_rand(0,$img_h),$color);
}

//绘制干扰线
for($i=0; $i<10; ++$i){
    //随机生成干扰线颜色
    $color = imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
    //随机绘制干扰线
    imageline($img,mt_rand(0,$img_w),0,mt_rand(0,$img_h*5),$img_h,$color);
}

header('Content-Type: image/gif'); //输出图像
imagegif($img);

6.创建login_db_connect.php,用于数据库连接

数据库连接方式有多种,例如PDO连接,有兴趣的朋友可以自行了解

<?php
//用于登录界面数据库连接
//设置字符集
header('Content-type:text/html;charset=utf8');

//连接数据库
$con=mysqli_connect("localhost","root","Huawei@123","LMS");//此处root为登录mysql的用户名,其后依此是密码与数据库名称
if (mysqli_connect_errno($con))
{
    echo "连接 MySQL 失败: " . mysqli_connect_error();
} 
R

*注意:篇幅有限,具体详见源代码,仅供学习参考,转载请注明出处。感谢支持。

源代码下载

链接:https://pan.quark.cn/s/0c31932c8b16
提取码:f7vM

  • 97
    点赞
  • 834
    收藏
    觉得还不错? 一键收藏
  • 37
    评论
以下是一个简单PHP + MySQL 用户注册登录验证的示例代码: 注册页面(register.php) ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body> <h2>用户注册</h2> <form action="register.php" method="post"> <label for="username">用户名:</label> <input type="text" name="username" id="username"><br> <label for="password">密码:</label> <input type="password" name="password" id="password"><br> <label for="confirm_password">确认密码:</label> <input type="password" name="confirm_password" id="confirm_password"><br> <input type="submit" value="注册"> </form> </body> </html> ``` register.php 处理用户提交的注册信息 ```php <?php // 连接 MySQL 数据库 $mysqli = new mysqli('localhost', 'root', 'password', 'test'); if ($mysqli->connect_errno) { echo '连接 MySQL 失败:' . $mysqli->connect_error; exit(); } // 处理用户提交的注册信息 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 获取表单提交的数据 $username = $_POST['username']; $password = $_POST['password']; $confirm_password = $_POST['confirm_password']; // 验证密码是否相等 if ($password !== $confirm_password) { echo '两次输入的密码不相等'; exit(); } // 查询用户名是否已经存在 $sql = "SELECT * FROM users WHERE username='$username'"; $result = $mysqli->query($sql); if ($result->num_rows > 0) { echo '用户名已经存在'; exit(); } // 插入新用户数据到数据库 $hashed_password = password_hash($password, PASSWORD_DEFAULT); $sql = "INSERT INTO users (username, password) VALUES ('$username', '$hashed_password')"; if ($mysqli->query($sql)) { echo '注册成功'; } else { echo '注册失败:' . $mysqli->error; } } // 关闭数据库连接 $mysqli->close(); ``` 登录页面(login.php) ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户登录</title> </head> <body> <h2>用户登录</h2> <form action="login.php" method="post"> <label for="username">用户名:</label> <input type="text" name="username" id="username"><br> <label for="password">密码:</label> <input type="password" name="password" id="password"><br> <input type="submit" value="登录"> </form> </body> </html> ``` login.php 处理用户提交的登录信息 ```php <?php // 启动会话 session_start(); // 连接 MySQL 数据库 $mysqli = new mysqli('localhost', 'root', 'password', 'test'); if ($mysqli->connect_errno) { echo '连接 MySQL 失败:' . $mysqli->connect_error; exit(); } // 处理用户提交的登录信息 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 获取表单提交的数据 $username = $_POST['username']; $password = $_POST['password']; // 查询用户数据 $sql = "SELECT * FROM users WHERE username='$username'"; $result = $mysqli->query($sql); if ($result->num_rows > 0) { $user = $result->fetch_assoc(); // 验证密码是否正确 if (password_verify($password, $user['password'])) { // 登录成功,保存用户信息到会话 $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; echo '登录成功'; } else { echo '密码错误'; } } else { echo '用户名不存在'; } } // 关闭数据库连接 $mysqli->close(); ``` 注销页面(logout.php) ```php <?php // 启动会话 session_start(); // 删除保存用户信息 unset($_SESSION['user_id']); unset($_SESSION['username']); echo '注销成功'; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值