简介:本文详细介绍了基于PHP的简单图书管理系统的开发过程,涵盖用户认证(登录、注册、退出)、MySQL数据库操作(增删改查)及Session管理,适合初学者和开发者参考。
开发基于PHP的图书管理系统需准备以下环境:
系统核心表结构如下:
-- 用户表CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL, -- 存储加密后的密码created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- 图书表CREATE TABLE books (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(100) NOT NULL,author VARCHAR(50) NOT NULL,isbn VARCHAR(20) UNIQUE,status TINYINT DEFAULT 1 -- 1:可借 0:已借出);
设计要点:
UNIQUE约束避免重复数据password_hash()结果)
// register.phpif ($_SERVER['REQUEST_METHOD'] === 'POST') {$username = trim($_POST['username']);$password = $_POST['password'];// 验证输入if (empty($username) || empty($password)) {die("用户名和密码不能为空");}// 密码加密(推荐使用password_hash)$hashedPassword = password_hash($password, PASSWORD_DEFAULT);try {$pdo = new PDO("mysql:host=localhost;dbname=library", "root", "");$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (?, ?)");$stmt->execute([$username, $hashedPassword]);header("Location: login.php?register=success");} catch (PDOException $e) {if ($e->getCode() == 23000) { // 唯一约束冲突die("用户名已存在");}die("数据库错误: " . $e->getMessage());}}
安全建议:
password_hash()
// login.phpsession_start();if ($_SERVER['REQUEST_METHOD'] === 'POST') {$username = trim($_POST['username']);$inputPassword = $_POST['password'];$pdo = new PDO("mysql:host=localhost;dbname=library", "root", "");$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");$stmt->execute([$username]);$user = $stmt->fetch();if ($user && password_verify($inputPassword, $user['password'])) {$_SESSION['user_id'] = $user['id'];$_SESSION['username'] = $user['username'];header("Location: dashboard.php");} else {die("用户名或密码错误");}}
Session管理要点:
session_start()session_regenerate_id(true)防止会话固定攻击
// logout.phpsession_start();// 清除所有Session变量$_SESSION = array();// 销毁Sessionif (ini_get("session.use_cookies")) {$params = session_get_cookie_params();setcookie(session_name(), '', time() - 42000,$params["path"], $params["domain"],$params["secure"], $params["httponly"]);}session_destroy();header("Location: login.php");
// add_book.phpif ($_SERVER['REQUEST_METHOD'] === 'POST') {$title = trim($_POST['title']);$author = trim($_POST['author']);$isbn = trim($_POST['isbn']);try {$pdo = new PDO("mysql:host=localhost;dbname=library", "root", "");$stmt = $pdo->prepare("INSERT INTO books (title, author, isbn) VALUES (?, ?, ?)");$stmt->execute([$title, $author, $isbn]);echo "图书添加成功";} catch (PDOException $e) {die("添加失败: " . $e->getMessage());}}
// search_books.php$searchTerm = isset($_GET['q']) ? $_GET['q'] : '';$pdo = new PDO("mysql:host=localhost;dbname=library", "root", "");$sql = "SELECT * FROM books WHERE title LIKE ? OR author LIKE ?";$params = ["%$searchTerm%", "%$searchTerm%"];$stmt = $pdo->prepare($sql);$stmt->execute($params);$books = $stmt->fetchAll(PDO::FETCH_ASSOC);// 显示结果foreach ($books as $book) {echo "<div>{$book['title']} - {$book['author']}</div>";}
// update_book.phpif ($_SERVER['REQUEST_METHOD'] === 'POST') {$id = (int)$_POST['id'];$status = (int)$_POST['status'];$pdo = new PDO("mysql:host=localhost;dbname=library", "root", "");$stmt = $pdo->prepare("UPDATE books SET status = ? WHERE id = ?");$stmt->execute([$status, $id]);echo "状态更新成功";}// delete_book.php$id = (int)$_GET['id'];$pdo = new PDO("mysql:host=localhost;dbname=library", "root", "");$stmt = $pdo->prepare("DELETE FROM books WHERE id = ?");$stmt->execute([$id]);
// auth_check.phpfunction checkLogin() {session_start();if (!isset($_SESSION['user_id'])) {header("Location: login.php");exit;}}// 在需要认证的页面顶部调用checkLogin();
$stmt = $pdo->prepare(“SELECT * FROM books LIMIT ? OFFSET ?”);
$stmt->execute([$perPage, $offset]);
2. **输入验证**:所有用户输入必须验证```phpfunction validateInput($data) {$data = trim($data);$data = stripslashes($data);$data = htmlspecialchars($data);return $data;}
set_error_handler(function($errno, $errstr) {error_log("Error [$errno]: $errstr");http_response_code(500);echo "系统错误,请稍后再试";exit;});
生产环境必须:
display_errors = Off)性能优化:
该系统实现了图书管理的核心功能,包括完整的用户认证流程和数据库操作。通过预处理语句、密码哈希和Session管理确保了基本安全性。开发者可在此基础上扩展借阅记录、分类管理、数据统计等高级功能。