php怎么实现记账功能实现
数据库设计
创建数据库表存储记账数据,常用字段包括:id(主键)、type(收入/支出)、amount(金额)、category(分类)、date(日期)、description(备注)。MySQL示例:
CREATE TABLE transactions (
id INT AUTO_INCREMENT PRIMARY KEY,
type ENUM('income', 'expense') NOT NULL,
amount DECIMAL(10,2) NOT NULL,
category VARCHAR(50) NOT NULL,
date DATE NOT NULL,
description TEXT
);
表单处理
创建HTML表单提交记账数据,使用POST方法防止重复提交。前端示例:
<form action="add_transaction.php" method="post">
<select name="type">
<option value="income">收入</option>
<option value="expense">支出</option>
</select>
<input type="number" name="amount" step="0.01" required>
<input type="text" name="category" required>
<input type="date" name="date" required>
<textarea name="description"></textarea>
<button type="submit">提交</button>
</form>
数据存储
PHP处理表单提交并存入数据库,注意防SQL注入:
$pdo = new PDO('mysql:host=localhost;dbname=accounting', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO transactions
(type, amount, category, date, description)
VALUES (?, ?, ?, ?, ?)");
$stmt->execute([
$_POST['type'],
$_POST['amount'],
$_POST['category'],
$_POST['date'],
$_POST['description']
]);
数据展示
查询并展示记账记录,可按日期筛选:
$stmt = $pdo->query("SELECT * FROM transactions ORDER BY date DESC");
while ($row = $stmt->fetch()) {
echo "{$row['date']} {$row['type']} {$row['amount']} {$row['category']}";
}
统计功能
实现收支统计和分类统计:
// 月度统计
$stmt = $pdo->query("SELECT
SUM(CASE WHEN type='income' THEN amount ELSE 0 END) AS total_income,
SUM(CASE WHEN type='expense' THEN amount ELSE 0 END) AS total_expense
FROM transactions WHERE date BETWEEN '2023-01-01' AND '2023-01-31'");
$stats = $stmt->fetch();
echo "收入: {$stats['total_income']} 支出: {$stats['total_expense']}";
// 分类统计
$stmt = $pdo->query("SELECT category, SUM(amount)
FROM transactions WHERE type='expense'
GROUP BY category");
while ($row = $stmt->fetch()) {
echo "{$row['category']}: {$row['SUM(amount)']}";
}
安全增强
添加CSRF防护和输入验证:

session_start();
// 生成token
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
// 验证token
if ($_POST['token'] !== $_SESSION['token']) {
die('非法请求');
}
// 验证金额
if (!is_numeric($_POST['amount']) || $_POST['amount'] <= 0) {
die('金额必须为正数');
}






