js登录效果+php

98 阅读2分钟

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

在这里插入图片描述

==一.html==

在这里插入图片描述

==二.php==

<?php

// 后台PHP以post方式,接收前端传递参数

// 在$_POST中,以数组的形式存储
// echo '<pre>';
// print_r($_POST);
// echo '</pre>';

// 从数据中获取相应的数据

// 通过[索引键名]的形式,从数据中,获取具体的参数数据
// 就是PHP的数组的操作

$username = $_POST['username'];
$userpwd = $_POST['userpwd'];

// echo $username , $userpwd ;

// 根据前端的参数,在数据库查询是否有账号和密码都符合输入的数据
// nz2002中,有user表结构,存储账号密码,可以在user表结构中,做数据查询操作

// 通过PHP对数据库进行查询操作

// 1,链接登录数据库
$link = mysqli_connect('127.0.0.1','root','root','nz2002',3306);

// 2,定义SQL语句
// 查询user表结构中
// username字段存储的数据,等于 前端传参的 $username参数
// userpwd字段存储的数据,等于 前端传参的 $userpwd参数
// SQL语句中,与php,JavaScript不同,判断是否相等,也是 = 一个等号
// = 既是赋值操作,也是比较等于操作
// WHERE 等约束条件中, = 是比较等于运算符
// 其他,都是赋值操作
// 账号密码都是字符串,要添加,单引号
$sql = "SELECT * FROM `user` WHERE `username` = '{$username}' AND `userpwd` = '{$userpwd}'";
echo $sql;
// 3,执行查询语句,结果是,结果集对象
$result = mysqli_query($link , $sql);


// 4,获取结果集对象
// 如果有符合的数据,数组中会有内容
// 如果没有符合的数据,数组中是一个空数组

// count(数组); 获取数组中单元的个数
// 也就相当于 length属性 
// count(数组) 相当于 JavaScript中 数组.length

// 如果有内容,length不是0  count(数组)不是0
// 如果空数组,length就是0  count(数组)也是0

$arr = mysqli_fetch_all($result , MYSQLI_ASSOC);

// echo count($arr);
// echo '<pre>';
// print_r($arr);
// echo '</pre>';

// 如果 count($arr) 不是 0 ,证明有符合的账号密码,登录成功
// 如果 count($arr)  是 0 , 证明没有符合的账号密码,登录不成功

if(count($arr) == 0){
    echo '您登录失败了';
}else {
    echo '您登录成功了';
}

// 关闭数据库
mysqli_close($link);

/*
总结

要正确验证的前提:

    1,数据库的编码格式要是uft8
      如果是其他编码格式,虽然在数据库中,使用MySQL-front,看上去都一样
      但是编码格式不同,查询比对的结果,就是空数组
      如果数据库编码格式不是utf8,查询结果有可能是空数组

    2,数据库的引擎必须是innoDB
      数据库建立时,引擎是innoDB,如果我们设定的数据库引擎,不是innoDB,执行时有可能也是空数组

    3,怎么判断是引擎和编码格式造成的问题
      在php中echo 输出 $sql 定义的SQL语句
      复制粘贴,输出的内容,到 SQL编辑器
      点击 绿色箭头 执行SQL语句
      如果有执行结果,证明 SQL语句,没有问题
      如果有报错,证明是 SQL语句的问题

1,前端页面部分
    定义form表单,通过form表单,向后台程序传参
        action : 属性值 是传参的PHP程序
        method : post方式
     
    input标签
        必须定义name属性,才能正常传参
        实际项目中,前端传参标签,name的属性值,不能随便定义,必须按照项目文档规定的内容来定义

2,php部分
    接收前端参数
        以post方式传参,PHP必须用 预定义变量 $_POST 来存储接收前端参数
        通过 $_POST[索引键名] 的方式,获取具体的数据内容
        前端传参的索引键名,就是input标签name属性的属性值

    通过数据库操作,来查询比对账号密码
        (1),链接数据库
            $link = mysqli_connect('127.0.0.1','root','root','nz2002',3306);

        (2),定义SQL语句
            $sql = "SELECT * FROM `表名` WHERE `账号字段` = '{$账号变量}' AND `密码字段` = '{$密码变量}' ";

            注意: 外层使用 双引号,解析变量
                  账号字段存储的数据 等于 前端传参账号变量中存储的数据
                  密码字段存储的数据 等于 前端传参密码变量中存储的数据
                  逻辑与 AND 关系
                  如果数据是字符串形式, 必须要添加 单引号 '{$账号变量}'   '{$密码变量}'

        (3),执行SQL语句
            $result = mysqli_query($link , $sql);

        (4),获取结果集对象中的数据,存储成新的二维数组
            $arr = mysqli_fetch_all($result , MYSQLI_ASSOC);


        (5),判断
            如果 count(数组) 获取的数组长度为 0 ,证明是空数组,没有符合条件的数据,登录失败
            如果 count(数组) 获取的数组长度不是0 ,证明不是空数组,有符合条件的数据,登录成功

            if(count($arr) == 0){
                echo '您登录失败了';
            }else {
                echo '您登录成功了';
            }

        (6),关闭数据库
            mysqli_close($link);
        
    
    
*/

在这里插入图片描述