博客列表 >1122_ SESSION小练习 九期第20课

1122_ SESSION小练习 九期第20课

叮叮当当
叮叮当当原创
2019年11月24日 00:43:01590浏览

1 SESSION 登录

连接:con.php

  1. # 数据库连接参数
  2. $db = [
  3. 'type' => 'mysql',
  4. 'host' => '127.0.0.1',
  5. 'dbname' => 'SqlTest',
  6. 'username' => 'root',
  7. 'password' => 'root',
  8. 'port' => 3306,
  9. 'charset' => 'utf8'
  10. ];
  11. $dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']};charset={$db['charset']}";
  12. # 连接数据库
  13. try{
  14. $pdo = new PDO($dsn, $db['username'], $db['password']);
  15. }
  16. catch(PDOException $e){
  17. die('Connection Failed: ' . $e->getMessage() );
  18. }

首页:index.php

  1. <?php
  2. # 开启会话
  3. session_start();
  4. if( isset($_SESSION['name']) ){
  5. # 1 已登录: 显示出用户的登录信息, 显示退出按钮
  6. echo '用户: ' . $_SESSION['name'] . ' 已登录<br>';
  7. echo '<a href="dispatch.php?action=logout">退出</a>';
  8. }
  9. else{
  10. # 2 未登录,就跳转到登录页面
  11. echo '<a href="dispatch.php?action=login">请登录</a>';
  12. }

中间处理层:dispatch.php

  1. # 连接数据库
  2. require __DIR__ . '/con.php';
  3. # 获取请求参数
  4. $action = isset($_GET['action']) ? $_GET['action'] : 'login';
  5. $action = htmlentities( strtolower(trim($action)) );
  6. # 请求分发
  7. switch ($action) {
  8. # 1. 登录页面
  9. case 'login':
  10. # 加载登录表单
  11. include __DIR__ . '/login.php';
  12. break;
  13. # 2. 验证登录
  14. case 'check':
  15. include __DIR__ . '/check.php';
  16. break;
  17. # 3. 退出登录
  18. case 'logout':
  19. include __DIR__ . '/logout.php';
  20. break;
  21. # 默认操作
  22. default:
  23. header('Location: index.php');
  24. echo '<script>location.assign("index.php");</script>';
  25. }

登录:login.php

  1. <?php
  2. # 防止用户重复登录
  3. if( isset($_SESSION['name']) ){
  4. echo '<script>alert("不要重复登录");location.assign("index.php");</script>';
  5. }
  6. ?>
  7. <!doctype html>
  8. <html lang="en">
  9. <head>
  10. <meta charset="UTF-8">
  11. <title>用户登录</title>
  12. </head>
  13. <body>
  14. <h3>用户登录</h3>
  15. <form action="dispatch.php?action=check" method="post">
  16. <p>
  17. <label for="phone">手机:</label>
  18. <input type="phone" name="phone" id="phone" required>
  19. </p>
  20. <p>
  21. <label for="pwd">密码:</label>
  22. <input type="password" name="pwd" id="pwd" required>
  23. </p>
  24. <p><button>提交</button></p>
  25. </form>
  26. </body>
  27. </html>

验证:check.php

  1. <?php
  2. # 1 判断用户的请求类型是否正确
  3. if($_SERVER['REQUEST_METHOD'] === 'POST'){
  4. # 2 获取表单数据
  5. $phone = $_POST['phone'];
  6. $pwd = md5($_POST['pwd']);
  7. # 3 用用户表user.dbf进行验证
  8. $sql = 'SELECT * FROM `user_info` WHERE `phone` = :phone AND `pwd` = :pwd LIMIT 1';
  9. $stmt = $pdo->prepare( $sql );
  10. $stmt->execute( ['phone'=>$phone, 'pwd'=>$pwd] );
  11. $user = $stmt->fetch(PDO::FETCH_ASSOC);
  12. # 4 判断验证的结果
  13. if( false === $user ){
  14. # 验证失败,返回上一下页面
  15. echo '<script>alert("未找到用户");history.back();</script>';
  16. die;
  17. }
  18. # 验证成功,将用户的信息写进来
  19. $_SESSION['name'] = $user['name'];
  20. echo '<script>alert("登录成功");location.assign("index.php");</script>';
  21. exit;
  22. }
  23. else {
  24. die('请求类型错误');
  25. }

登出:logout.php

  1. <?php
  2. # 必须在用户已经登录的情况下再退出
  3. if( isset($_SESSION['name']) ){
  4. session_destroy();
  5. echo '<script>alert("退出成功");location.assign("index.php");</script>';
  6. }
  7. else{
  8. echo '<script>alert("请先登录");location.assign("login.php");</script>';
  9. }

2 练熟pdo操作,增删查改(手写)

增删改查上节课已做,这里练习bindColumn

  1. <?php
  2. # (1) 连接数据库
  3. require __DIR__ . '/con.php';
  4. # (2) 创建SQL语句模板,相当于占位
  5. $sql = 'SELECT * FROM `zsgc` WHERE `sex`=:sex';
  6. # (3) 创建SQL语句对象
  7. $stmt = $pdo->prepare( $sql );
  8. # (4) 将变量绑定到SQL语句模板的命名占位符上
  9. $sex = 1;
  10. $stmt->bindParam( 'sex', $sex, PDO::PARAM_INT);
  11. # (5) 执行SQL操作
  12. $select = $stmt->execute();
  13. # 将结果集中的记录中的字段, 绑定到指定的变量上
  14. $stmt->bindColumn('user_name', $name);
  15. $stmt->bindColumn('sex', $sex);
  16. $stmt->bindColumn('desc', $desc);
  17. $stmt->bindColumn('hobby', $hobby);
  18. # $stmt->fetch( PDO::FETCH_ASSOC );
  19. #单条取出数据,它是有指针的,取出一条数据,指针会往下指向
  20. # PDO::FETCH_ASSOC: 获取结果集中的关联部分
  21. while( $stmt->fetch( PDO::FETCH_ASSOC ) ){
  22. #因已绑定,无需之前那样遍历
  23. echo '姓名:' . $name .'<br>';
  24. echo '性别:' ;
  25. if( !$sex ){
  26. echo '女<br>';
  27. }
  28. else{
  29. echo '男<br>';
  30. }
  31. echo '描述:' . $desc .'<br>';
  32. echo '爱好:' . $hobby .'<br>';
  33. echo '<hr>';
  34. }
  35. # (6) 销毁pdo, 关闭连接
  36. $pdo = null; //unset($pdo);

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议