<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="01_filter.php" method="post">
用户名: <input type="text" name="uname">
<br>
密码: <input type="password" name="upwd">
<br>
<input type="submit" value="登录">
</form>
</body>
</html>
<?php
header('Content-type:text/html;charset=utf-8');
// 接收用户传递的数据
// var_dump($_POST);
// 获取用户名和密码
$uname = $_POST['uname'];
$upwd = $_POST['upwd'];
// echo '用户名:' . $uname;
// echo '<br>';
// echo '密码:' . $upwd;
// trim(字符串):可以将字符串左右两侧的空格,tab,回车字符去掉
// 查看服务器端接收的数据:
// 网页中鼠标右键单击->选择页面源代码方式打开
// echo $uname;
// echo '<br>';
// echo trim($uname);
// stripslashes(字符串):将字符串中的反斜线\ 去除掉
// zhangsa\n:反斜线加上正常的字符会变成一些具有特殊功能的字符
// 如果要过滤所有的反斜杠,可以使用正则规则去进行过滤处理
// echo $uname;
// echo '<br>';
// echo stripslashes($uname);
// 用户名输入:<script>alert(123)</script>
// echo '<script>alert(123)</script>';
// 不想让以上的脚本代码执行,将<>功能性去掉
// htmlspecialchars(字符串):将字符串中的预定义字符转换成实体字符
// < => <
// > => >
// 看起来就像是直接打印到页面,无法被浏览器执行
// echo $uname;
// echo htmlspecialchars($uname);
// 既对用户输入的用户名左右两侧的空格过滤
// 也去掉用户名中的反斜杠
// 也处理掉用户名输入的预定义字符,将他们转换成实体字符
echo htmlspecialchars(stripslashes(trim($uname)));
?>
$_COOKIE 和$_SESSION
都是为了保存回话状态的 (我们在访问在线网页,b站我们登录了自己的账号,下次进时就不需要输入)
那么区别是什么呢?
cookie是保存在客户端
而session是保存在服务器端 相对安全
怎么使用这俩个技术呢? 话不多说,直接上代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="login.php" method="post">
用户名: <input type="text" name="uname">
<br>
密码: <input type="password" name="upwd">
<br>
<input type="submit" value="登录">
</form>
</body>
</html>
login.php
<?php
header('Content-type:text/html;charset=utf-8');
$uname = $_POST['uname'];
$upwd = $_POST['upwd'];
// echo $uname . '<br>' . $upwd;
// 用户名:张三丰 密码:123456
if($uname == '张三丰' && $upwd == '123456'){
// echo '登录成功!';
// 将用户的数据保存在COOKIE中
// setcookie(name,value,expire):
// 将数据保存在cookie中,cookie的名是name,值是value,
// expire设置的是过期时间
// time():返回当前的时间戳
// 时间戳:现在的时间距离格林威治时间1970年1月1日 00:00:00所经过的秒数
// 3600(秒) : 60分钟 => 1小时
// time()+3600 : 一小时后过期
// 查看cookie的方式:F12->存储->Cookie->http://127.0.0.1
setcookie('uname',$uname,time()+3600);
// 显示登录的用户
// $_COOKIE:保存着COOKIE数据
// var_dump($_COOKIE);
echo '欢迎:' . $_COOKIE['uname'];
echo "<a href='news.php'>新闻页面</a>";
}else{
die('登录失败!');
}
?>
news.php
<?php
header('Content-type:text/html;charset=utf-8');
echo '<h1>世界杯正在举行!</h1>';
// 显示登录的用户
// 如果用户是登录的,显示欢迎xxx
// 如果用户是没有登录,显示请重新登录!
// isset(数组[键名]):判断数组的键名是否存在/是否设置
// 如果存在,返回true
// 不存在返回false
// 如果存在缓存,使用ctrl + F5强制刷新
if(isset($_COOKIE['uname'])){
echo '欢迎:' . $_COOKIE['uname'];
echo "<a href='logout.php'>退出登录</a>";
}else{
echo '请重新登录!';
}
?>
logout.php
<?php
header('Content-type:text/html;charset=utf-8');
// 删除cookie中的数据
// setcookie(name,value,expire)
// name:名称
// value:值
// expire:过期时间
// time()-3600 : 一小时前过期
setcookie('uname','',time()-3600);
?>
这些操作就在模拟用户在该网站下跳转不同页面,并保持登录信息的作用。
接下来session练习
<?php
header('Content-type:text/html;charset=utf-8');
// 将登录的用户数据保存在session中
// 先开启session,才能使用session
session_start();
// $_SESSION:存储SESSION数据
// 数组[键名] = 值;
$_SESSION['uname'] = 'tony';
// 查看session保存的位置:
// phpStudy/tmp/tmp
// 以sess_xxxx是session文件
// 可通过时间去找,直接用记事本打开
// 也可以将所有的session文件删除,再次执行03_login.php文件
// 重新生成session文件
?>
<?php
header('Content-type:text/html;charset=utf-8');
// 删除session中的数据
// 先关掉打开session文件
// 开启session
session_start();
// unset(数组[键]) : 销毁
unset($_SESSION['uname']);
// session_destroy():删除session文件
session_destroy();
?>
<?php
header('Content-type:text/html;charset=utf-8');
// 判断用户是否登录
// 如果登录,提示 欢迎xxx
// 如果没有登录,提示 请重新登录
session_start();
if(isset($_SESSION['uname'])){
echo '欢迎:' . $_SESSION['uname'];
}else{
echo '请重新登录!';
}
?>
<?php
header('Content-type:text/html;charset=utf-8');
// 记录文章的浏览量
echo '<h1>文章</h1>';
echo '<br>';
// echo '浏览量:0';
// 可以将文章的浏览量保存在session中
// 判断这篇文章是否被人浏览过
// 如果这篇文章是第一次被人浏览(之前没有被浏览过)
// 在session中设置浏览量为1
// 如果在session中已经存在浏览量数据(代表文章已经被浏览过)
// 在原来文章浏览量的基础上+1
session_start();
if(isset($_SESSION['views'])){
$_SESSION['views']++;
}else{
$_SESSION['views'] = 1;
}
echo '浏览量:' . $_SESSION['views'];
// 修改文章的浏览量:
// phpStudy/tmp/tmp
// session文件中数字部分修改为你想要的浏览量数据
// 注意:不要修改其他部分
// COOKIE和SESSION的区别:
// COOKIE和SESSION都属于会话技术,都可以保存会话状态
// COOKIE:数据保存在客户端浏览器上,相对不安全,保存数据大小有一定限制,占用服务器资源相对较少
// SESSION:数据保存在服务器上,相对更安全,保存数据相对较大,占用服务器资源相对较多
?>
Mysqli介绍(有了Mysqli 就可以通过PHP来操作Mysql数据库):
Mysqli extension(“ i ”意为improve)Mysql的扩展
Mysqli 只针对Mysql数据库
Mysqli是面向对象的,但也提供了API接口
Mysqli支持预处理语句
连接数据库:
先进行查看,在我们之前使用SQL_front时。
弹出这个页面
点击属性
先放着,我们用PHP程序连接数据库
<?php
header('Content-type:text/html;charset=utf-8');
$host = 'localhost'; // 数据库服务器地址 输入本机的Ip也行
$user = 'root'; // 用户名
$pwd = 'root'; // 密码
// 连接数据库
// mysqli_connect(主机地址,用户名,密码)
$conn = mysqli_connect($host,$user,$pwd);
// var_dump($conn);
// 如果连接数据库的结果是bool值false,代表数据库连接失败
// 如果不是false,数据库连接成功
if($conn == false){
die('数据库连接失败!');
}else{
echo '数据库连接成功!';
}
?>
<?php
header('Content-type:text/html;charset=utf-8');
// 连接数据库
$conn = mysqli_connect('localhost','root','root');
if($conn == false){
die('数据库连接失败!');
}else{
echo '数据库连接成功!';
}
// 书写SQL语句
$sql = 'CREATE DATABASE myDD';
// 执行SQL
// 数据库连接对象->query(sql语句) : 执行一条sql语句
// 执行的结果如果为true,执行成功
// 执行的结果如果为false,执行失败
$res = $conn->query($sql);
if($res){
echo '数据库创建成功!';
}else{
die('数据库创建失败!');
}
// 可以通过SQL_front工具查看创库是否成功
// 关闭数据库连接
$conn->close();
?>
这里可以逐条验证
<?php
header('Content-type:text/html;charset=utf-8');
// 连接数据库
$conn = mysqli_connect('localhost','root','root');
if($conn == false){
die('数据库连接失败!');
}else{
echo '数据库连接成功!';
}
// 使用数据库
$sql = 'USE myDD';
// 执行sql
$conn->query($sql);
// 创建数据表
$sql = "CREATE TABLE IF NOT EXISTS myuser(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
uname VARCHAR(200) NOT NULL,
upwd VARCHAR(200) NOT NULL,
PRIMARY KEY(id)
)";
// 执行sql
$res = $conn->query($sql);
if($res){
echo '数据表创建成功!';
}else{
die('数据表创建失败!');
}
// 书写新增数据SQL
$sql = "INSERT myDD.myuser(uname,upwd) VALUES('tony','123456')";
// 执行SQL
$res = $conn->query($sql);
if($res){
echo '数据新增成功!';
}else{
echo '数据新增失败!';
}
// 修改id为1的数据,用户名修改为张三
// 书写SQL语句
$sql = "UPDATE myDD.myuser SET uname='张三' WHERE id=1";
// 执行SQL
$res = $conn->query($sql);
if($res){
echo '数据修改成功!';
}else{
die('数据修改失败!');
}
// 删除id=1的数据
$sql = 'DELETE FROM myDD.myuser WHERE id=1';
// 执行SQL
$res = $conn->query($sql);
if($res){
echo '数据删除成功!';
}else{
die('数据删除失败!');
}
// 查询数据前确保数据表中有数据
// 执行php文件,每执行一次,就会新增一条数据,多执行几次
// 查询SQL
$sql = "SELECT * FROM myDD.myuser";
// 执行sql
$res = $conn->query($sql);
// var_dump($res);
// foreach(对象 as 变量a=>变量b) : 遍历 可以遍历可迭代对象
foreach($res as $a=>$b){
// var_dump($a);
// $b变量中存储的就是遍历之后数据表中的每一条数据
// $b是一个数组,如果进行数组取值:数组[键名]
// var_dump($b['id']);
// var_dump($b['uname']);
var_dump($b);
}
// 关闭数据库连接
$conn->close();
?>