实验15:账户的登录和注销(数据库版)

简单实验 飞快学 826浏览

演示页面: 帐户登录保护个人核心信息

本实验是在上个实验的基础上的改进。

我们要访问的存储关键个人信息的页面文件名为 093.php,登录页面名为 091.php,注销页面名为 092.php

存储关键个人信息的页面文件的功能:首先检测用户是否登录,如果未登录,则跳转到登录页面 091.php,登录成功后再跳转会093.php页面。登录后,显示用户名和关键信息,并显示“注销”链接。

用户点击“注销”后,销毁Session内的数据。

ex015

从数据库中通过学号获得用户信息,文件名命名为 090.php,演示页面: 获得用户信息

建议将从数据库中读取信息写出单独的功能模块:函数。

function get_student($sid, $conn)
{
    $sql = "select * from student where student_id='$sid'";
    $result= mysqli_query($conn, $sql);   
    $student =  mysqli_fetch_array($result);
    return $student;
}

学生表的结构

CREATE TABLE IF NOT EXISTS `student` (
  `student_id` varchar(30) NOT NULL,
  `password` varchar(32) NOT NULL,
  `name` varchar(50) NOT NULL,
  `sex` varchar(8) DEFAULT NULL,
  `phone1` varchar(20) DEFAULT NULL,
  `phone2` varchar(20) DEFAULT NULL,
  `dorm` varchar(40) DEFAULT NULL,
  `note` varchar(255) DEFAULT NULL,
  `banji_id` smallint(5) unsigned NOT NULL,
  `banji_name` varchar(50) NOT NULL,
  `hidden` int(11) NOT NULL DEFAULT '0',
  `last_update` timestamp NOT NULL 
     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`student_id`),
  KEY `idx_fk_banji_id` (`banji_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

参考答案

function get_student($sid, $conn)
{
    $sql = "select * from student where student_id='$sid'";
     // echo $sql;
    $result= mysqli_query($conn, $sql);   
    $student =  mysqli_fetch_array($result);
    return $student;
}

require_once 'db_config.php';

header("Content-type:text/html;charset=utf-8"); 
$conn = mysqli_connect($host, $user, $pass, $db);
if (!$conn)
    die("Connection failed: " . mysqli_connect_error());
mysqli_set_charset($conn, "utf8");

   ob_start();
   session_start();
   $msg = '';
   if (isset($_POST['login']) && !empty($_POST['username']) 
      && !empty($_POST['password'])) {
     $student = get_student($_POST['username'], $conn);	
     var_dump($student);
     echo md5($_POST['password']);
      if ($student && $_POST['username'] == $student['student_id'] && 
         md5($_POST['password']) == $student['password']) {
         $_SESSION['valid'] = true;
         $_SESSION['timeout'] = time();
         $_SESSION['username'] = $_POST['username'];
         $_SESSION['student'] = $student;
         $msg = '你已经成功登陆!';
         if (isset($_SESSION['url'])) 
             header("location: ".$_SESSION['url']);
      } else {
         $msg = '错误的用户名或者密码,请重新输入';
      }
   }   
?>