You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化PHP中file_put_contents实现自增主键kodeBuku的代码

优化PHP文本存储图书库表单的简洁实现

需求说明

基于PHP的file_put_contents实现图书库表单,核心逻辑为:从dataBuku.txt中匹配所有Kode Buku值,取最大值加1生成新的自增编号(非按行数计数),同时完成图书信息写入及封面文件上传。

优化后代码

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $file = "dataBuku.txt";
    // 获取自增编号
    $kodeBuku = 1;
    if (file_exists($file) && filesize($file) > 0) {
        preg_match_all('/Kode Buku: (\d+)/', file_get_contents($file), $matches);
        $kodeBuku = ($matches[1] ? max($matches[1]) : 0) + 1;
    }

    // 接收表单数据并整理为数组
    $bookData = [
        "Kode Buku: $kodeBuku",
        "Judul Buku: {$_POST['judul']}",
        "Pengarang Buku: {$_POST['pengarang']}",
        "Tahun Terbit Buku: {$_POST['tahunTerbit']}",
        "Halaman Buku: {$_POST['halaman']}",
        "Penerbit Buku: {$_POST['penerbit']}",
        "Kategori Buku: {$_POST['kategori']}"
    ];

    // 处理封面上传
    $lokasiFile = '';
    if ($_FILES['cover']['error'] === UPLOAD_ERR_OK) {
        $ext = strtolower(pathinfo($_FILES['cover']['name'], PATHINFO_EXTENSION));
        $fileName = "{$kodeBuku}_{$_POST['pengarang']}_{$_POST['judul']}.$ext";
        $lokasiFile = "cover/$fileName";
        move_uploaded_file($_FILES['cover']['tmp_name'], $lokasiFile);
    }
    $bookData[] = "Cover Buku: $lokasiFile";
    $dataBuku = implode(PHP_EOL, $bookData) . PHP_EOL . PHP_EOL;

    // 写入总文件与单个图书文件
    $totalWriteSuccess = file_put_contents($file, $dataBuku, FILE_APPEND) !== false;
    echo "<p>总文件数据写入" . ($totalWriteSuccess ? "成功" : "失败") . "</p>";

    $indivFile = "{$kodeBuku} - {$_POST['judul']} - {$_POST['pengarang']}.txt";
    $indivWriteSuccess = file_put_contents($indivFile, $dataBuku) !== false;
    echo "<p>文件 $indivFile 写入" . ($indivWriteSuccess ? "成功" : "失败") . "</p>";
}
?>
<br><a href='tes.php'><button>返回</button></a>
<br><a href='cek.php'><button>查看数据</button></a>

优化要点

  • 简化编号生成逻辑:合并多层条件判断,直接通过正则匹配结果处理,减少代码嵌套层级
  • 数组拼接数据:用数组存储图书信息行,通过implode生成最终字符串,替代重复的.=拼接操作,提升代码可读性
  • 统一错误判断逻辑:用!== false替代>0作为写入成功的判断标准(file_put_contents写入空内容时返回0但属于正常情况),同时统一成功/失败提示的输出格式
  • 避免未定义变量:提前初始化$lokasiFile,防止封面上传失败时出现变量未定义的问题
  • 精简冗余代码:去除不必要的中间变量,让逻辑流程更紧凑清晰

预期输出示例

Kode Buku: 1 (auto_increment)

Judul Buku: Harga Sebuah Percaya

Pengarang Buku: Tere Liye

Tahun Terbit Buku: 2017

Halaman Buku: 302

Penerbit Buku: Mahaka Publishing

Kategori Buku: Novel

Cover Buku: cover/1_Tere Liye_Harga Sebuah Percaya.jpg


内容的提问来源于stack exchange,提问作者Faisal Wildan H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:39:57