php - 这段代码中间的重复密码验证能否精简

查看:88
本文介绍了php - 这段代码中间的重复密码验证能否精简的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

这中间密码验证重复出现了3次,我本来想用function解决,但是用function的话里面的$row数组还得要重新查询。主要我担心的时后期维护的时候3段代码都要修改,这样比较麻烦,有没有什么好的办法可以只要修改一个地方可以同时修改3个地方用function实现,或者其他功能调用验证密码那个环节。

<?php
$action = $_GET['action'];
session_start();
require_once('db_config_loverun.php');
require_once('functions.php');
if ($action == 'login') { //登录
    $username = stripslashes(trim($_POST['username'])); 
    $password = stripslashes(trim($_POST['password'])); 
    $salt = 'shengtian';
    $md5pass = md5($password.$salt);
    $sql = "select Nickname, Password, LoginTimes, LastTime, LastIP, err, errTime from members where name=?";
    //绑定变量并预处理
    $result = $db->prepare($sql);
    $result->bind_param("s", $username);
    $result->execute();
    //输出结果
    $row = array();
    $result->bind_result($row['Nickname'],$row['Password'],$row['LoginTimes'],$row['LastTime'],$row['LastIP'],$row['err'],$row['errTime']);
    $result->fetch(); //获取数据
    $result->close(); //释放资源占用
    if($row['Nickname']!="") { //判断用户是否存在
        if ($row['err']>5 and $row['err'] <20) {//判断错误次数
            $errTime = floor((time()-strtotime($row['errTime']))/60);
            if($errTime>60) {
                //验证密码程序
                if ($md5pass == $row['Password']) {
                    $counts = $row['LoginTimes'] + 1;
                    $_SESSION['user'] = $row['Nickname'];
                    $_SESSION['LastTime'] = $row['LastTime'];
                    $ip = get_client_ip();
                    $LastTime = date('Y-m-d H:i:s',time());
                    $result = $db->query("update members set LastTime='$LastTime', LastIP='$ip', LoginTimes='$counts', err=0 where name='$username'");
                    if ($result) {
                        $res['success'] = 1; //帐号密码正确
                        $res['user'] = $_SESSION['user'];
                        $res['LastTime'] = $_SESSION['LastTime'];
                    } else {
                        $res['success'] = 0; //密码错误
                    }
                } else {
                    $res['success'] = 0; //密码错误
                    $errCounts = $row['err'] + 1;
                    $errT = date('Y-m-d H:i:s',time());
                    $result = $db->query("update members set err='$errCounts', errTime='$errT' where name='$username'");
                }
            } else {
                $res['success'] = 3; //1小时内禁止登录。
            }
        } elseif($row['err']>=20) {
            $errTime = floor((time()-strtotime($row['errTime']))/60);
            if($errTime>1440) {
                //验证密码程序
                if ($md5pass == $row['Password']) {
                    $counts = $row['LoginTimes'] + 1;
                    $_SESSION['user'] = $row['Nickname'];
                    $_SESSION['LastTime'] = $row['LastTime'];
                    $ip = get_client_ip();
                    $LastTime = date('Y-m-d H:i:s',time());
                    $result = $db->query("update members set LastTime='$LastTime', LastIP='$ip', LoginTimes='$counts', err=0 where name='$username'");
                    if ($result) {
                        $res['success'] = 1; //帐号密码正确
                        $res['user'] = $_SESSION['user'];
                        $res['LastTime'] = $_SESSION['LastTime'];
                    } else {
                        $res['success'] = 0; //密码错误
                    }
                } else {
                    $res['success'] = 0; //密码错误
                    $errCounts = $row['err'] + 1;
                    $errT = date('Y-m-d H:i:s',time());
                    $result = $db->query("update members set err='$errCounts', errTime='$errT' where name='$username'");
                }
            } else {
                $res['success'] = 4; //24小时内禁止登录。
            }
        } else {
            //验证密码程序
            if ($md5pass == $row['Password']) {
                $counts = $row['LoginTimes'] + 1;
                $_SESSION['user'] = $row['Nickname'];
                $_SESSION['LastTime'] = $row['LastTime'];
                $ip = get_client_ip();
                $LastTime = date('Y-m-d H:i:s',time());
                $result = $db->query("update members set LastTime='$LastTime', LastIP='$ip', LoginTimes='$counts', err=0 where name='$username'");
                if ($result) {
                    $res['success'] = 1; //帐号密码正确
                    $res['user'] = $_SESSION['user'];
                    $res['LastTime'] = $_SESSION['LastTime'];
                } else {
                    $res['success'] = 0; //密码错误
                }
            } else {
                $res['success'] = 0; //密码错误
                $errCounts = $row['err'] + 1;
                $errT = date('Y-m-d H:i:s',time());
                $result = $db->query("update members set err='$errCounts', errTime='$errT' where name='$username'");
            }
        }
    } else {
        $res['success'] = 2; //用户不存在
    }
    echo json_encode($res);
} elseif ($action == 'logout') { //退出
    unset($_SESSION);
    session_destroy();
} else {
    header("location: ./");
    exit;
}
?>

解决方案

<?php
$action = $_GET['action'];
session_start();
require_once('db_config_loverun.php');
require_once('functions.php');
if ($action == 'login') { //登录
    $username = stripslashes(trim($_POST['username'])); 
    $password = stripslashes(trim($_POST['password'])); 
    $salt = 'shengtian';
    $md5pass = md5($password.$salt);
    $sql = "select Nickname, Password, LoginTimes, LastTime, LastIP, err, errTime from members where name=?";
    //绑定变量并预处理
    $result = $db->prepare($sql);
    $result->bind_param("s", $username);
    $result->execute();
    //输出结果
    $row = array();
    $result->bind_result($row['Nickname'],$row['Password'],$row['LoginTimes'],$row['LastTime'],$row['LastIP'],$row['err'],$row['errTime']);
    $result->fetch(); //获取数据
    $result->close(); //释放资源占用
    if($row['Nickname']!="") { //判断用户是否存在
        $res = validate($md5pass,$row,$username);
    } else {
        $res['success'] = 2; //用户不存在
    }
    echo json_encode($res);
} elseif ($action == 'logout') { //退出
    unset($_SESSION);
    session_destroy();
} else {
    header("location: ./");
    exit;
}

function validate($md5pass,$row,$username){
    if($row['err'] > 5){
        $errTime = floor((time()-strtotime($row['errTime']))/60);
        if($row['err'] <20 && $errTime < 60){
            $res['success'] = 3;
            return $res;
        }elseif($row['err'] >=20 && $errTime < 1440){
            $res['success'] = 4;
            return $res;
        }
    }

    if ($md5pass == $row['Password']) {
        $counts = $row['LoginTimes'] + 1;
        $_SESSION['user'] = $row['Nickname'];
        $_SESSION['LastTime'] = $row['LastTime'];
        $ip = get_client_ip();
        $LastTime = date('Y-m-d H:i:s',time());
        $result = $db->query("update members set LastTime='$LastTime', LastIP='$ip', LoginTimes='$counts', err=0 where name='$username'");
        if ($result) {
            $res['success'] = 1; //帐号密码正确
            $res['user'] = $_SESSION['user'];
            $res['LastTime'] = $_SESSION['LastTime'];
        } else {
            $res['success'] = 0; //密码错误
        }
    } else {
        $res['success'] = 0; //密码错误
        $errCounts = $row['err'] + 1;
        $errT = date('Y-m-d H:i:s',time());
        $result = $db->query("update members set err='$errCounts', errTime='$errT' where name='$username'");
    }

    return $res;
}


?>

这篇关于php - 这段代码中间的重复密码验证能否精简的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆