如何简化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
相关产品推荐
相关产品推荐

