登录与注册模块

1.前言

其实登录和注册模块,最重要的是对sessioncookie的应用,一般来说,我们都是通过这个来进行用户是否登录判断的,下面我们直接对判断条件和数据库的建立进行说明(省略前端文件)

2.数据库的建立

名称

字段

字符

是否为空

是否为主键

备注

ID编号

id

int(11)

 

用户名

username

varchar(30)

 

用户密码

userpwd

varchar(32)

 

创建时间

createtime

int(11)

 

创建IP

createip

int(11)

 

 

DROP DATABASE IF EXISTS userdb;

CREATE DATABASE userdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

USE userdb;

CREATE TABLE user(

id int(11) NOT NULL AUTO_INCREMENT,

username varchar(30) DEFAULT NULL,

userpwd varchar(32) DEFAULT NULL,

createtime int(11) NOT NULL,

createip int(11) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

insert into user(username,userpwd) values('admin','admin');

3.注册条件判断文件

//注册的处理文件样板

<?php  

session_start();

//注册处理界面 regcheck.php

    if(isset($_POST["hidden"]) && $_POST["hidden"] == "hidden")  

    {  

        $user = trim($_POST["username"]);//trim()函数移除字符串两侧的空白字符

        $psw = md5(trim($_POST["userpwd"]));  

        $psw_confirm = md5(trim($_POST["confirm"]));

        $code = $_POST["code"];

        if($user == "" || $psw == "" || $psw_confirm == "")  

        {  

            echo "<script>alert('请确认信息完整性!'); history.go(-1);</script>";  

        }

        else if($code != $_SESSION[' ver_code']){

            echo "<script>alert('验证码不正确,请重新输入!'); history.go(-1);</script>";

        }  

        else   

        {  

            if($psw == $psw_confirm)  

            {  

                $conn = mysqli_connect("localhost","root","root");   //连接数据库,帐号密码为自己数据库的帐号密码  

                if(mysqli_errno($conn)){

                    echo mysqli_error($conn);

                    exit;

                }

                mysqli_select_db($conn,"userdb");  //选择数据库  

                mysqli_set_charset($conn,'utf8'); //设定字符集  

                $sql = "select username from user where username = '$user'"; //SQL语句

                $result = mysqli_query($conn,$sql);    //执行SQL语句  

                $num = mysqli_num_rows($result); //统计执行结果影响的行数  

                

                if($num)    //如果已经存在该用户  

                {  

                    echo "<script>alert('用户名已存在'); history.go(-1);</script>";  

                }  

                else    //不存在当前注册用户名称  

                {   

                    $ip=ip2long($_SERVER['REMOTE_ADDR']); // ip地址转换成整型

                    $time=time();

                    $sql_insert = "insert into `user` (`username`,`userpwd`,`createtime`,`createip`) values('" . $user . "','" . $psw ."','".$time."','".$ip."')";

                    $res_insert = mysqli_query($conn,$sql_insert);  

                    if($res_insert)  

                    {  

                        echo "<script>alert('注册成功!');window.location.href='login.php';</script>";  

                    }  

                    else  

                    {  

                        echo "<script>alert('系统繁忙,请稍候!'); history.go(-1);</script>";  

                    }  

                }  

            }  

            else  

            {  

                echo "<script>alert('密码不一致!'); history.go(-1);</script>";  

            }  

        }  

    }  

    else  

    {  

        echo "<script>alert('提交未成功!');</script>";  

    }  

?>

4.登录条件判断文件

//登陆时候处理文件

<?php

session_start();

//登录处理界面 logincheck.php

//判断是否按下提交按钮

    if(isset($_POST["hidden"]) && $_POST["hidden"] == "hidden")  

    {  

    //将用户名和密码存入变量中,供后续使用

        $user = trim($_POST["username"]);//trim()函数移除字符串两侧的空白字符

        $psw = md5(trim($_POST["userpwd"]));//密码使用md5()加密一次,存入数据库

        $code = $_POST["code"];

        if($user == "" || $psw == "")  

        {

        //用户名或者密码其中之一为空,则弹出对话框,确定后返回当前页的上一页  

            echo "<script>alert('请输入用户名或者密码!'); history.go(-1);</script>";  

        }else if($code != $_SESSION[' ver_code']){

            echo "<script>alert('验证码不正确,请重新输入!'); history.go(-1);</script>";

        }  

        else  

        {  //确认用户名密码验证码不为空,则连接数据库

            $conn = mysqli_connect("localhost","root","root");//数据库帐号密码为安装数据库时设置

             if(mysqli_errno($conn)){

                echo mysqli_errno($conn);

                exit;

             }

            mysqli_select_db($conn,"userdb");  

            mysqli_set_charset($conn,'utf8');

            $sql = "select username,userpwd from user where username = '$user' and userpwd = '$psw'";  

            $result = mysqli_query($conn,$sql);  

            $num = mysqli_num_rows($result);  

            if($num)  

            {  

                echo "<script>alert('成功登录'); window.location.href='index.php';</script>";  

            }  

            else  

            {  

                echo "<script>alert('用户名或密码不正确!');history.go(-1);</script>";  

            }  

        }  

    }  

    else  

    {  

        echo "<script>alert('提交未成功!');</script>";  

    }  

  

?>

 

5.登录预处理(另一种登录判断)

//login.php

<?php

@session_start();//开启session

header("Content-type:text/html;charset=utf-8");

$link = mysqli_connect('localhost','root','root','login');  //链接数据库

 mysqli_set_charset($link ,'utf8'); //设定字符集

//获得传递过来的数据

$name=$_POST['username'];

$pwd=$_POST['password'];

$yzm=$_POST['yzm'];

    if($name==''){

        echo "<script>alert('请输入用户名');location='" . $_SERVER['HTTP_REFERER'] . "'</script>";

        exit;

    }

    if($pwd==''){

 

        echo "<script>alert('请输入密码');location='" . $_SERVER['HTTP_REFERER'] . "'</script>";

        exit;

 

    }

    if($yzm!=$_SESSION['VCODE']){

        echo"<script>alert('你的验证码不正确,请重新输入');location='".$_SERVER['HTTP_REFERER']. "'</script>";

        exit;

 

    }

$sql_select="select id,username,password from user where username= ?";      

//从数据库查询信息

//MySQLi预处理语句编译SQL语句

$stmt=mysqli_prepare($link,$sql_select);

//绑定参数

mysqli_stmt_bind_param($stmt,'s',$name);

//执行编译好的SQL语句

mysqli_stmt_execute($stmt);

//将返回的数据绑定到变量上

    $result=mysqli_stmt_get_result($stmt);

    $row=mysqli_fetch_assoc($result);

    if($row){

        if($pwd !=$row['password'] || $name !=$row['username']){

            echo "<script>alert('密码错误,请重新输入');location.href='login.html'</script>";

            exit;

        }

        else{

            $_SESSION['username']=$row['username'];

            $_SESSION['id']=$row['id'];

            echo "<script>alert('登录成功');location.href='first.html'</script>";

        }

    }else{

        echo "<script>alert('您输入的用户名不存在');location.href='login.html'</script>";

        exit;

    }

?>

 

6.MySQLi预处理语句总结

6.1优势

- 安全

- 效率高

 

 

6.2编译SQL语句

mysqli_prepare(mysqli $link,string $query)

功能:MySQLi预处理语句编译SQL语句

参数:

link mysqli_connect()产生的mysqli对象

query 编译的SQL语句

返回:mysqli_stmt 对象

 

 

6.3绑定参数(可选)

mysqli_stmt_bind_param(mysqli_stmt $stmt,string $type,

mixed $var[,....])

功能:绑定参数

参数:

stmt mysqli_prepare 产生的 mysqli_stmt 对象

type 参数的数据类型

i 整型

s 字符串

d 浮点型

b blob 数据类型

var 具体变量,变量一定要以变量形式传递。

 

 

6.4执行

mysqli_stmt_execute(mysqli_stmt $stmt)

功能:执行编译好的SQL语句

参数:

stmt mysqli_prepare 产生的 mysqli_stmt 对象

返回:布尔值

 

 

6.5获取被影响行数

mysqli_stmt_affected_rows(mysqli_stmt $stmt)

功能:获取被影响的行数

参数:

stmt mysqli_prepare 产生的 mysqli_stmt 对象

返回:成功:被影响的行数。

失败:-1

 

6.6获取自增ID

mysqli_stmt_insert_id(mysqli_stmt $stmt)

功能:获取最近一次insert产生的自增ID

参数:

stmt mysqli_prepare 产生的 mysqli_stmt 对象

返回:自增id

 

 

6.7将返回数据赋值给变量

mysqli_stmt_bind_result(mysqli_stmt $stmt,mixed $var1[,...])

功能:将返回的数据绑定到变量上

参数:

stmt mysqli_prepare 产生的 mysqli_stmt 对象

var1 返回的数据绑定到变量上

 

 

 

 

6.8从结果集中获取数据

mysqli_stmt_fetch(mysqli_stmt $stmt)

功能:从结果集中获取数据

参数:

stmt mysqli_prepare 产生的 mysqli_stmt 对象

返回:一次获取一行数据,拿不到时返回NULL

 

 

6.9将获取的结果集缓存到客户端

mysqli_stmt_store_result(mysqli_stmt $stmt)

功能:将获取的结果集缓存到客户端

参数:

stmt mysqli_prepare 产生的 mysqli_stmt 对象

 

6.10获取结果集行数

mysqli_stmt_num_rows(mysqli_stmt $stmt)

功能:获取结果集中的行数

参数:

stmt mysqli_prepare 产生的 mysqli_stmt 对象

返回:行数

 

 

6.11释放预处理对象

mysqli_stmt_close(mysqli_stmt $stmt)

功能:释放mysqli_prepare产生的mysqli_stmt 对象

参数:

stmt mysqli_prepare 产生的 mysqli_stmt 对象

返回:布尔值

 

7.本文总结

登录与注册模块本质上并不难,主要是对用户输入信息的判断、对数据库数据获取的并与用户输入进行对比,而要长期保留用户登录的信息,则使用session保存,而要使用户下次登录免输入则使用cookie长期保存,而在这里我们要注意的知识点上MySQL的预处理、IP地址的获取、输入信息的处理等。

// ip地址转换成整型

$ip_int=ip2long($_SERVER['REMOTE_ADDR']);

// 把整型转换成ip地址

$int_ip=long2ip($ip_int);

//密码使用md5()加密

$psw = md5(trim($_POST["userpwd"]));

 

其他的一些模块和知识点,比如验证码模块、加密技术等等,我会在其他文章详细解读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值