PHP实现简单的登录以及注册

一、前言

手写的一个PHP登录验证,使用session鉴权。
对于密码进行了md5加密处理,用户名使用htmlspecialchars函数转化为html实体,在一定程度上避免了SQL注入。
连接数据库使用的myqli_connect函数,当然也可以选则使用PDO,关于PDO在我的另一篇博客中有讲解。

二、数据库创建

首先需要建立一个数据库,以便后面的数据存储。
建立数据库的方法多种多样,我选择用PHPstudy自带的myadmin直接建立数据库。
将数据库名设为exp4。据库exp4里建立一张user表,里面设如下几个字段,用于存放用户信息。

file

三、开工

index.php

这个页面是用户登录页面
file

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用户登录</title>
    <style type="text/css">
        @import url("index.css");
    </style>
</head>
<body background = 'background.jpg'>
    <form action="login.php" method="post" name ="login">
        <fieldset>
            <legend align = 'center'>用户登录</legend>
                <table align ="center">
                    <tr>
                        <td>用户名:</td>
                        <td><input type="text" name="username"></td>
                    </tr>
                    <tr>
                        <td>密  码:</td>
                        <td><input type="password" name="password"></td>
                    </tr>
                    <tr>
                        <td><input type="submit" value="提交"></td>
                        <td><input type="reset" value="重置"></td>
                    </tr>
                    <tr>
                        <td><a href="register.php">用户注册</a></td>
                    </tr>
            </table>
        </fieldset>
    </form>
</body>
</html>
login.php

用户登陆后数据将被提交到login.php页面进行处理,login.php处理登录逻辑。

<?php
    $username = htmlspecialchars($_POST['username']); //使用htmlspecialchars函数将用户名转为HTML实体
    $password = md5($_POST['password']); //md5加密密码
    //连接参数
    $host = '127.0.0.1';
    $db_username = 'root';
    $db_pwd = '123456';
    $db_name = 'exp4';
    //开始连接数据库
    $conn = mysqli_connect($host,$db_username,$db_pwd,$db_name);
    if(!$conn)
    {
        die("连接数据库失败!请检查数据库是否开启 ".mysqli_connect_error());
    }
    else
    {
        //echo '成功!';
        //数据库查询语句
        $check_query = mysqli_query($conn,"select id from user where username='$username' and password='$password'");
        $arr = mysqli_fetch_assoc($check_query); //获取结果集作为关联数组
        //print_r($arr); //打印数组看看
        if($arr)
        {
            //登陆成功
            session_start();//开启session会话
            $time = 2 * 60; //session过期时间为2分钟
            setcookie(session_name(),session_id(),time()+$time,"/"); //设置session过期时间
            $_SESSION['username'] = $username;
            $_SESSION['id'] = $arr['id'];
			//使用JS进行跳转
            echo "<script language='javascript'>alert('登陆成功!');
            location='welcome.php'</script>";
        }
        else{
            echo "<script language='javascript'>alert('用户名或密码错误!');location='index.php'</script>";
        }
    }
    mysqli_free_result($check_query); //释放内存
    mysqli_close($conn); //关闭连接
?>
个人信息页面welcome.php

登录成功后将会跳转到这个页面,展示用户的个人信息

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用户页面</title>
    <style type="text/css">
        @import url("table.css");
    </style>
</head>
<body background='background.jpg'>
    <?php
        session_start();
        $time = 5 * 60; //session过期时间
        setcookie(session_name(),session_id(),time()+$time,"/"); //手动设置session过期时间
        //检测是否登录,若没登录则转向登录界面
        if(!isset($_SESSION['id'])){
            echo "<script>alert('请先登录!');location='index.php'</script>";
            exit();
        }  
        //数据库连接
        //连接参数
        $host = 'localhost';
        $db_username = 'root';
        $db_pwd = '123456';
        $db_name = 'exp4';
        //开始连接数据库
        $conn = mysqli_connect($host,$db_username,$db_pwd,$db_name);
        if(!$conn)
        {
            die("连接数据库失败!请检查数据库是否开启 ".mysqli_connect_error());
        }
        else
        {
            $username = $_SESSION['username'];
            $check_query = mysqli_query($conn,"select * from user where username='$username' limit 1");
            $data = mysqli_fetch_assoc($check_query);
            //print_r($data); //显示出来看看
        }
        mysqli_free_result($check_query); //释放内存
        mysqli_close($conn); //关闭连接
    ?>
    <br/><br/><br/><br/><br/><br/><br/><br/>
    <h2 align = 'center'>欢迎你,<?php echo $username;?></h2>
    <table border = '1' class = 'table' align = 'center'>
    <th>用户名</th>
    <th>年龄</th>
    <th>性别</th>
    <th>自我介绍</th>
    <?php
        echo'<tr>';
        echo '<td>'.$username.'</td>';
        echo '<td>'.$data['age'].'</td>';
        echo '<td>'.$data['sex'].'</td>';
        echo '<td>'.$data['information'].'</td>';
        echo'</tr>';
    ?>
    <div align = 'center'>
        <a href = 'safe.php'>注销用户</a>
    </div>
    </table>
</body>
</html>
注册页面register.php

注册页面,用于新用户注册
file

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用户注册</title>
</head>
<body background = "background.jpg">
    <form action = "doregister.php" method = "post" name = "register">
    <h3 align = "center">用户注册</h3>
    <table align = "center">
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密  码:</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td>确认密码:</td>
            <td><input type="password" name="repassword"></td>
        </tr>
        <tr>
            <td> 年  龄:</td>
            <td><input type="text" name="age"></td>
        </tr>
        <tr>
            <td>性  别:</td>
            <td><input type="radio" name="sex" value = "男"></td>
            <td><input type="radio" name="sex" value = "女"></td>
        </tr>
        <tr>
            <td>个人介绍(50字以内):</td>
            <td><input type="text" cols= "50" name="information"></td>
        </tr>
        <tr>
            <td><input type="submit" value="提交"></td>
            <td><input type="reset" value="重置"></td>
        </tr>
            <td><a href = "index.php">返回登陆</a></td>
        <tr>
        </tr>
    </table>
    </form>
</body>
</html>
登录处理页面doregister.php

doregister.php页面连接数据库使用PDO,这样比较简单一点,如果用mysqli_connect连接,很多地方要手动释放内存。
doregister.php页面对前端提交的密码做了md5加密,用户名等做了html实体转化。
并且判断了注册用户名是否被占用。如果用户名被占用,则取消此次注册跳转到主页面。
判断了两次输入密码是否相同,以及用户名或密码输入是否为空。

<?php
		//接受前端数据
        $data = [];
        $data['username'] = htmlspecialchars($_POST['username']);
        $data['password'] = md5($_POST['password']);
        $data['age'] = htmlspecialchars($_POST['age']);
        $data['sex'] = $_POST['sex'];
        $data['information'] = htmlspecialchars($_POST['information']);
        $username = $data['username'];
        $data['repassword'] = md5($_POST['repassword']);
        //print_r($data);
        //连接参数
        $host = '127.0.0.1';
        $db_username = 'root';
        $db_pwd = '123456';
        $db_name = 'exp4';
        $dbms = 'mysql';
        $dsn = "$dbms:host=$host;dbname=$db_name";
        //开始连接数据库
        try
        {
            $conn = new PDO($dsn, $db_username, $db_pwd);
        }
        catch(Exception $e)
        {
            die('连接失败!');
        }
        if($data['repassword'] != $data['password'])//判断两次密码是否相同
        {
            echo "<script language='javascript'>alert('两次密码不同!');location='register.php';</script>";
        }
        else
        {
            //准备SQL语句
            $sql_select = "select id from user where username = '$username'";
            $select = $conn->prepare($sql_select);
            $select->execute();//执行SQL语句
            $arr = $select->fetch(PDO::FETCH_BOUND); //返回布尔类型
            if($arr)//检测用户名是否存在
            {
                echo "<script language='javascript'>alert('该用户名已存在!');location='register.php';</script>";
            }
            else
            {
                //验证用户名或密码是否为空
                if(empty($data['username']) || empty($data['password'] || empty($data['repassword'])))
                {
                    echo "<script language='javascript'>alert('用户名或密码不能为空!');location='register.php';</script>";
                }
                else
                {
                    $sql_insert = "insert into user values(NULL,'".$data['username']."','".$data['password']."','".$data['age']."',
                    '".$data['information']."','".$data['sex']."')"; //插入数据库SQL语句
                    $arr2 = $conn->exec($sql_insert); //执行插入语句,返回受影响行数
                    print_r($arr2);
                    if($arr2)
                    {
                        echo "<script language='javascript'>alert('注册成功');location='index.php';</script>";
                    }
                    else
                    {
                        echo "<script language='javascript'>alert('注册失败');location='index.php';</script>";
                    }
                }
            }
        }
    ?>
表格美化table.css
.table{
    text-align:center;
    width:70%;
    padding:15px;
    background-color:skyblue;
    border:5px solid green;
    border-collapse:collapse;
}
实现注销
<?php
    session_start(); //开启会话
    unset($_SESSION['username']); //删除session
    unset($_SESSION['id']); //删除session
    session_destroy(); //销毁会话
    echo '<script language="javascript">alert("注销成功");location="index.php";</script>'
?>

当然我这个登录功能并不完美,前端实在丑得可怕。以后学了一些前端美化再来优化一下。

转载至本人小网站:我的博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值