php实现记账本
实现记账本的基本功能
PHP实现记账本需要结合数据库操作、表单处理和用户界面设计。以下是一个简单的实现方案:
数据库设计
创建MySQL数据库表存储记账信息:
CREATE TABLE transactions (
id INT AUTO_INCREMENT PRIMARY KEY,
amount DECIMAL(10,2) NOT NULL,
category VARCHAR(50) NOT NULL,
description TEXT,
transaction_date DATE NOT NULL,
type ENUM('income', 'expense') NOT NULL
);
连接数据库
创建数据库连接文件db_connect.php:
<?php
$host = 'localhost';
$dbname = 'account_book';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
?>
添加记账记录
创建表单页面add_transaction.php:
<?php include 'db_connect.php'; ?>
<form method="post" action="save_transaction.php">
<select name="type" required>
<option value="income">收入</option>
<option value="expense">支出</option>
</select>
<input type="number" name="amount" step="0.01" placeholder="金额" required>
<input type="text" name="category" placeholder="类别" required>
<textarea name="description" placeholder="备注"></textarea>
<input type="date" name="transaction_date" required>
<button type="submit">保存</button>
</form>
处理表单提交save_transaction.php:
<?php
include 'db_connect.php';
$stmt = $pdo->prepare("INSERT INTO transactions
(amount, category, description, transaction_date, type)
VALUES (?, ?, ?, ?, ?)");
$stmt->execute([
$_POST['amount'],
$_POST['category'],
$_POST['description'],
$_POST['transaction_date'],
$_POST['type']
]);
header("Location: view_transactions.php");
exit();
?>
查看记账记录
创建查看页面view_transactions.php:
<?php include 'db_connect.php'; ?>
<table border="1">
<tr>
<th>日期</th>
<th>类型</th>
<th>类别</th>
<th>金额</th>
<th>备注</th>
</tr>
<?php
$stmt = $pdo->query("SELECT * FROM transactions ORDER BY transaction_date DESC");
while ($row = $stmt->fetch()) {
echo "<tr>
<td>{$row['transaction_date']}</td>
<td>{$row['type']}</td>
<td>{$row['category']}</td>
<td>{$row['amount']}</td>
<td>{$row['description']}</td>
</tr>";
}
?>
</table>
统计功能
添加统计页面stats.php:
<?php include 'db_connect.php'; ?>
<h3>收支统计</h3>
<?php
// 总收入
$stmt = $pdo->query("SELECT SUM(amount) FROM transactions WHERE type='income'");
$total_income = $stmt->fetchColumn();
// 总支出
$stmt = $pdo->query("SELECT SUM(amount) FROM transactions WHERE type='expense'");
$total_expense = $stmt->fetchColumn();
echo "总收入: $total_income<br>";
echo "总支出: $total_expense<br>";
echo "结余: " . ($total_income - $total_expense);
?>
安全增强措施
实现用户认证系统:
// login.php
session_start();
if ($_POST['username'] === 'admin' && $_POST['password'] === 'password123') {
$_SESSION['loggedin'] = true;
header("Location: view_transactions.php");
exit();
} else {
echo "登录失败";
}
在所有管理页面开头添加:
session_start();
if (!isset($_SESSION['loggedin'])) {
header("Location: login.php");
exit();
}
扩展功能建议
- 添加分类管理功能
- 实现数据导出为Excel或CSV
- 添加图表可视化
- 实现多用户支持
- 添加预算设置功能
- 实现数据备份恢复
这个基础实现可以满足简单的记账需求,根据实际需要可以进一步扩展功能和完善界面设计。







