当前位置:首页 > PHP

php怎么实现记账功能实现

2026-01-30 05:56:51PHP

数据库设计

创建数据库表存储记账数据,通常需要包含以下字段:

  • id:唯一标识
  • amount:金额
  • type:收支类型(收入/支出)
  • category:分类(餐饮、交通等)
  • date:日期
  • description:备注
CREATE TABLE transactions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    amount DECIMAL(10,2) NOT NULL,
    type ENUM('income', 'expense') NOT NULL,
    category VARCHAR(50) NOT NULL,
    date DATE NOT NULL,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

表单处理

创建HTML表单用于数据录入:

<form action="add_transaction.php" method="post">
    <label>金额: <input type="number" step="0.01" name="amount" required></label>
    <label>类型: 
        <select name="type" required>
            <option value="income">收入</option>
            <option value="expense">支出</option>
        </select>
    </label>
    <label>分类: <input type="text" name="category" required></label>
    <label>日期: <input type="date" name="date" required></label>
    <label>备注: <textarea name="description"></textarea></label>
    <button type="submit">保存</button>
</form>

数据存储

add_transaction.php处理表单提交:

php怎么实现记账功能实现

<?php
$conn = new mysqli('localhost', 'username', 'password', 'accounting_db');

$amount = $_POST['amount'];
$type = $_POST['type'];
$category = $_POST['category'];
$date = $_POST['date'];
$description = $_POST['description'];

$stmt = $conn->prepare("INSERT INTO transactions (amount, type, category, date, description) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("dssss", $amount, $type, $category, $date, $description);
$stmt->execute();
header('Location: index.php');
?>

数据展示

创建页面显示记账记录:

<?php
$conn = new mysqli('localhost', 'username', 'password', 'accounting_db');
$result = $conn->query("SELECT * FROM transactions ORDER BY date DESC");
?>

<table>
    <tr>
        <th>日期</th>
        <th>类型</th>
        <th>分类</th>
        <th>金额</th>
        <th>备注</th>
    </tr>
    <?php while($row = $result->fetch_assoc()): ?>
    <tr>
        <td><?= $row['date'] ?></td>
        <td><?= $row['type'] == 'income' ? '收入' : '支出' ?></td>
        <td><?= $row['category'] ?></td>
        <td><?= $row['amount'] ?></td>
        <td><?= $row['description'] ?></td>
    </tr>
    <?php endwhile; ?>
</table>

统计功能

添加统计功能计算收支情况:

php怎么实现记账功能实现

<?php
$income = $conn->query("SELECT SUM(amount) as total FROM transactions WHERE type='income'")->fetch_assoc()['total'];
$expense = $conn->query("SELECT SUM(amount) as total FROM transactions WHERE type='expense'")->fetch_assoc()['total'];
$balance = $income - $expense;
?>

<h3>统计</h3>
<p>总收入: <?= $income ?></p>
<p>总支出: <?= $expense ?></p>
<p>结余: <?= $balance ?></p>

分类统计

按分类统计支出:

<?php
$categories = $conn->query("SELECT category, SUM(amount) as total FROM transactions WHERE type='expense' GROUP BY category");
?>

<h3>支出分类统计</h3>
<ul>
<?php while($row = $categories->fetch_assoc()): ?>
    <li><?= $row['category'] ?>: <?= $row['total'] ?></li>
<?php endwhile; ?>
</ul>

安全增强

添加输入验证和防SQL注入措施:

$amount = filter_input(INPUT_POST, 'amount', FILTER_VALIDATE_FLOAT);
$type = in_array($_POST['type'], ['income', 'expense']) ? $_POST['type'] : null;
$category = htmlspecialchars(trim($_POST['category']));
$date = filter_input(INPUT_POST, 'date', FILTER_SANITIZE_STRING);
$description = htmlspecialchars(trim($_POST['description']));

if(!$amount || !$type || !$category || !$date) {
    die('无效输入');
}

文件导出

实现导出为CSV功能:

<?php
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="transactions.csv"');

$output = fopen('php://output', 'w');
fputcsv($output, ['日期', '类型', '分类', '金额', '备注']);

$result = $conn->query("SELECT * FROM transactions");
while($row = $result->fetch_assoc()) {
    fputcsv($output, [
        $row['date'],
        $row['type'] == 'income' ? '收入' : '支出',
        $row['category'],
        $row['amount'],
        $row['description']
    ]);
}
fclose($output);
exit;
?>

标签: 功能php
分享给朋友:

相关文章

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

vue实现用户添加功能

vue实现用户添加功能

实现用户添加功能的步骤 表单设计与数据绑定 在Vue组件中设计一个表单,包含用户名、邮箱、密码等字段。使用v-model指令实现双向数据绑定,将表单输入与组件的数据属性关联起来。 <temp…

vue实现功能

vue实现功能

Vue 实现功能的方法 Vue.js 是一个流行的前端框架,用于构建用户界面。以下是几种常见的功能实现方法: 数据绑定 Vue 提供了双向数据绑定,可以通过 v-model 指令实现表单输入和应用状…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('lo…

php实现留言板功能

php实现留言板功能

PHP 留言板功能实现 数据库设计 创建数据库表 messages,包含以下字段: id:自增主键 name:留言者姓名(VARCHAR) email:留言者邮箱(VARCHAR) content:…