前后端
实例一 html
<body>
<!-- 登录效果 -->
<!-- 登录页面,使用post方式传参
将账号,密码两个input标签的数据,传参给php文件
-->
<form action="./02_login.php" method="post">
账号: <input type="text" name="username" placeholder="请您输入账号"><br>
密码: <input type="password" name="userpwd" placeholder="请您输入密码"><br>
<button>登录</button>
</form>
</body>
实例一 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);
*/
前端传参总结1
form表单传参
1,form标签设定
要定义好三个属性
2,标签设定
必须要有name属性
必须要正确设定数据参数
如果name相同,value不同,要给name添加[]
超链接传参
1,只能是以get方式传参
2,必须严格遵守语法规范
3,如果键名是重复键名,必须要添加[]
<a href="url地址?键名=数值&键名=数值&..."></a>
PHP程序
1,接收参数的变量,是PHP程序定义好的,专门接收参数的变量,称为预定义变量
$_GET 接收前端get方式传参的数据
$_POST 接收前端post方式传参的数据
$_FILES 接收前端上传文件数据
实例二html
<!-- 注册功能
输入,账号,密码,完成注册功能
之前,写过,账号,密码,确认密码,验证码,都正确,才执行form表单提交
submit事件
暂时写一个简单的注册,验证等这些功能,有待之后再完善
-->
<form action="./02_reg.php" method="post">
注册账号: <input type="text" name="regname" placeholder="请您输入注册账号"><br>
注册密码: <input type="password" name="regpwd" placeholder="请您输入注册密码"><br>
<button>注册</button>
</form>
实例二php
<?php
// 1,接收前端的参数
// echo '<pre>';
// print_r($_POST);
// echo '</pre>';
$regname = $_POST['regname'];
$regpwd = $_POST['regpwd'];
// 2,通过mysqli操作数据库,写入数据
// 链接数据库
$link = mysqli_connect('127.0.0.1' , 'root' , 'root' , 'nz2002' , 3306);
// 定义SQL语句,写入操作
// 向nz2002库中,user表结构中,
// username 字段写入数据,前端参数$regname
// userpwd 字段写入数据,前端参数$regpwd
$sql = "INSERT INTO `user` (`username` , `userpwd`) VALUES ( '{$regname}' , '{$regpwd}')";
// 执行SQL语句
// 执行的是非查询语句,是数据写入数据
// 执行结果,如果写入数据成功$result 是 true
// 执行结果,如果写入数据失败$result 是 false;
$result = mysqli_query($link,$sql);
// 第一次写入,如果账号没有重复,会写入成功,结果是true
// 如果账号重复,会写入失败,结果是false
// var_dump($result);
// 根据 $result 结果,判断写入数据,也就是注册是成功还是失败
if($result === true){
echo '恭喜您,注册成功';
}else{
echo '您注册的账号重复,请您重新注册';
}
// 关闭数据库
mysqli_close($link);
// 总结
// 登录是数据查询操作,根据数组长度来判断是否登录成功
// 注册是数据写入操作,根据写入结果来判断是否注册成功
// 1,html部分
// 定义form表单,输入注册账号和密码
// 2,php部分
// 接收前端参数
// 通过预定义变量, $_POST[索引键名] 来获取具体的数据
// 索引键名是前端input标签,name属性的属性值
// 根据参数,对数据库进行操作
// 链接数据库
// $link = mysqli_connect('127.0.0.1' , 'root' , 'root' , 'nz2002' , 3306);
// 定义SQL语句
// $sql = "INSERT INTO `表名` (`账号字段名`,`密码字段名`) VALUES ( '{$注册账号数据}' , '{$注册密码数据}' )"
// 执行SQL语句
// $result = mysqli_query($link , $sql);
// 注册成功,$result --- true
// 注册失败,$result --- false
// 根据结果,设定if判断
// if($result === true){
// echo '恭喜您,注册成功';
// }else{
// echo '您注册的账号重复,请您重新注册';
// }
// 关闭数据库
// mysqli_close($link);
//
<!--
前端传参总结2
1,基本步骤
(1),前端部分
定义HTML中,form表单的属性
action : 定义好路径
method : 定义好传参方式
定义HTML中,传参标签的属性
name : 传参键名,必须严格遵守项目规范手册中的命名规范
value : 确保输入的数据内容正确
定义HTML中的验证
可以通过js对前端标签输入的数据做格式内容的验证
虽然前端的验证,啥用没有,但是我们该写还是要写的
(2),后端部分
接收前端参数
$_GET 接收前端get方式传参
$_POST 接收前端post方式传参
$_FILES 接收前端上传文件内容
通过mysqli或者pdo方式操作数据库
链接数据库
定义SQL语句
执行SQL语句
查询语句---结果集对象---抽取结果集对象,组成二维数组
非查询语句---成功true,失败false
根据结果,执行if语句
2,问题
不管是form表单,还是超链接跳转
都会从前端页面,跳转是PHP程序页面
实际项目中,很多效果是没有页面跳转
而是在当前页面显示数据库执行的结果
没有页面跳转的数据交互,要通过 ajax 来实现
封装获取cookie
// 设定cookie函数
function mySetCookie(key,value,time){
// JavaScript中,时间单位默认是毫秒
// 获取当前时间对象
const nowTime = new Date();
// 当前时间的时间戳和服务器时间,有8个小时的时差 -8小时的毫秒数
// 设定cookie时效时间 + 时间的毫秒数
let t = nowTime.getTime() - (8*60*60*1000) + time*1000;
// 将新的时间戳,设定给 时间对象
nowTime.setTime(t);
// 通过三元运算符,给 expires 赋值 如果没有时间参数,赋值空字符串,有时间参数,赋值时间对象
document.cookie = `${key}=${value};expires=${time === undefined ? '' : nowTime }`;
}
// 获取cookie函数
function myGetCookie(cookieStr){
const obj = {};
const arr1 = cookieStr.split('; ');
arr1.forEach((item)=>{
const newArr = item.split('=');
obj[newArr[0]] = newArr[1];
})
return obj;
}