一.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);
*/