1 SESSION 登录
连接:con.php
# 数据库连接参数
$db = [
'type' => 'mysql',
'host' => '127.0.0.1',
'dbname' => 'SqlTest',
'username' => 'root',
'password' => 'root',
'port' => 3306,
'charset' => 'utf8'
];
$dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']};charset={$db['charset']}";
# 连接数据库
try{
$pdo = new PDO($dsn, $db['username'], $db['password']);
}
catch(PDOException $e){
die('Connection Failed: ' . $e->getMessage() );
}
首页:index.php
<?php
# 开启会话
session_start();
if( isset($_SESSION['name']) ){
# 1 已登录: 显示出用户的登录信息, 显示退出按钮
echo '用户: ' . $_SESSION['name'] . ' 已登录<br>';
echo '<a href="dispatch.php?action=logout">退出</a>';
}
else{
# 2 未登录,就跳转到登录页面
echo '<a href="dispatch.php?action=login">请登录</a>';
}
中间处理层:dispatch.php
# 连接数据库
require __DIR__ . '/con.php';
# 获取请求参数
$action = isset($_GET['action']) ? $_GET['action'] : 'login';
$action = htmlentities( strtolower(trim($action)) );
# 请求分发
switch ($action) {
# 1. 登录页面
case 'login':
# 加载登录表单
include __DIR__ . '/login.php';
break;
# 2. 验证登录
case 'check':
include __DIR__ . '/check.php';
break;
# 3. 退出登录
case 'logout':
include __DIR__ . '/logout.php';
break;
# 默认操作
default:
header('Location: index.php');
echo '<script>location.assign("index.php");</script>';
}
登录:login.php
<?php
# 防止用户重复登录
if( isset($_SESSION['name']) ){
echo '<script>alert("不要重复登录");location.assign("index.php");</script>';
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<h3>用户登录</h3>
<form action="dispatch.php?action=check" method="post">
<p>
<label for="phone">手机:</label>
<input type="phone" name="phone" id="phone" required>
</p>
<p>
<label for="pwd">密码:</label>
<input type="password" name="pwd" id="pwd" required>
</p>
<p><button>提交</button></p>
</form>
</body>
</html>
验证:check.php
<?php
# 1 判断用户的请求类型是否正确
if($_SERVER['REQUEST_METHOD'] === 'POST'){
# 2 获取表单数据
$phone = $_POST['phone'];
$pwd = md5($_POST['pwd']);
# 3 用用户表user.dbf进行验证
$sql = 'SELECT * FROM `user_info` WHERE `phone` = :phone AND `pwd` = :pwd LIMIT 1';
$stmt = $pdo->prepare( $sql );
$stmt->execute( ['phone'=>$phone, 'pwd'=>$pwd] );
$user = $stmt->fetch(PDO::FETCH_ASSOC);
# 4 判断验证的结果
if( false === $user ){
# 验证失败,返回上一下页面
echo '<script>alert("未找到用户");history.back();</script>';
die;
}
# 验证成功,将用户的信息写进来
$_SESSION['name'] = $user['name'];
echo '<script>alert("登录成功");location.assign("index.php");</script>';
exit;
}
else {
die('请求类型错误');
}
登出:logout.php
<?php
# 必须在用户已经登录的情况下再退出
if( isset($_SESSION['name']) ){
session_destroy();
echo '<script>alert("退出成功");location.assign("index.php");</script>';
}
else{
echo '<script>alert("请先登录");location.assign("login.php");</script>';
}
2 练熟pdo操作,增删查改(手写)
增删改查上节课已做,这里练习bindColumn
<?php
# (1) 连接数据库
require __DIR__ . '/con.php';
# (2) 创建SQL语句模板,相当于占位
$sql = 'SELECT * FROM `zsgc` WHERE `sex`=:sex';
# (3) 创建SQL语句对象
$stmt = $pdo->prepare( $sql );
# (4) 将变量绑定到SQL语句模板的命名占位符上
$sex = 1;
$stmt->bindParam( 'sex', $sex, PDO::PARAM_INT);
# (5) 执行SQL操作
$select = $stmt->execute();
# 将结果集中的记录中的字段, 绑定到指定的变量上
$stmt->bindColumn('user_name', $name);
$stmt->bindColumn('sex', $sex);
$stmt->bindColumn('desc', $desc);
$stmt->bindColumn('hobby', $hobby);
# $stmt->fetch( PDO::FETCH_ASSOC );
#单条取出数据,它是有指针的,取出一条数据,指针会往下指向
# PDO::FETCH_ASSOC: 获取结果集中的关联部分
while( $stmt->fetch( PDO::FETCH_ASSOC ) ){
#因已绑定,无需之前那样遍历
echo '姓名:' . $name .'<br>';
echo '性别:' ;
if( !$sex ){
echo '女<br>';
}
else{
echo '男<br>';
}
echo '描述:' . $desc .'<br>';
echo '爱好:' . $hobby .'<br>';
echo '<hr>';
}
# (6) 销毁pdo, 关闭连接
$pdo = null; //unset($pdo);