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

如何用PHP和HTML实现一对多关系表单的多条形码录入

嘿,我来帮你搞定这个单个Item的多条形码录入需求!下面是一套完整的PHP+HTML实现方案,包含前端交互和后端数据处理:

实现单个Item的多条形码录入表单

整体思路

我们要做一个无需刷新页面的交互表单:用户先指定目标Item的编号,然后可以反复录入条形码,每次提交后自动清空输入框并聚焦,方便继续录入;直到点击「完成」按钮,结束当前Item的条形码录入流程。核心用前端JS处理交互逻辑,后端PHP负责把条形码数据插入数据库。

1. 前端HTML+JavaScript代码

这个页面包含Item编号输入、条形码录入框、已添加条形码展示区,以及对应的交互逻辑:

<!DOCTYPE html>
<html>
<head>
    <title>Item条形码批量录入</title>
    <style>
        .form-group { margin: 15px 0; }
        label { display: inline-block; width: 100px; }
        input { padding: 5px; width: 250px; }
        button { padding: 6px 12px; margin-left: 10px; }
        #addedBarcodes { list-style: none; padding-left: 0; }
        #addedBarcodes li { margin: 5px 0; padding: 4px; background: #f5f5f5; border-radius: 3px; }
    </style>
    <script>
        // 存储已录入的条形码,用于前端展示
        let recordedBarcodes = [];

        function submitBarcode() {
            const itemNumInput = document.getElementById('itemNumber');
            const barcodeInput = document.getElementById('barcodeNumber');
            const itemNum = itemNumInput.value.trim();
            const barcode = barcodeInput.value.trim();

            // 校验输入完整性
            if (!itemNum || !barcode) {
                alert('请填写完整的Item编号和条形码!');
                return;
            }

            // 异步提交数据到后端
            const xhr = new XMLHttpRequest();
            xhr.open('POST', 'save_barcode.php', true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xhr.onload = function() {
                if (xhr.status === 200) {
                    const res = JSON.parse(xhr.responseText);
                    if (res.success) {
                        // 更新前端已录入列表
                        recordedBarcodes.push(barcode);
                        document.getElementById('addedBarcodes').innerHTML += `<li>${barcode}</li>`;
                        // 清空条形码输入框并自动聚焦
                        barcodeInput.value = '';
                        barcodeInput.focus();
                    } else {
                        alert('添加失败:' + res.message);
                    }
                } else {
                    alert('服务器请求出错,请稍后再试');
                }
            };
            xhr.send(`itemNumber=${encodeURIComponent(itemNum)}&barcodeNumber=${encodeURIComponent(barcode)}`);
        }

        function finishEntry() {
            // 完成录入后重置表单和展示区
            alert('当前Item的条形码录入已完成!');
            document.getElementById('entryForm').reset();
            document.getElementById('addedBarcodes').innerHTML = '';
            recordedBarcodes = [];
        }

        // 给条形码输入框添加回车提交功能,提升录入效率
        document.getElementById('barcodeNumber').addEventListener('keypress', function(e) {
            if (e.key === 'Enter') {
                submitBarcode();
            }
        });
    </script>
</head>
<body>
    <h2>为Item录入条形码</h2>
    <form id="entryForm">
        <div class="form-group">
            <label>Item编号:</label>
            <input type="text" id="itemNumber" placeholder="请输入Item编号" required>
            <!-- 可选:可以加AJAX自动拉取Item的title/subject,让用户确认 -->
        </div>
        <div class="form-group">
            <label>条形码:</label>
            <input type="text" id="barcodeNumber" placeholder="请输入条形码" required>
            <button type="button" onclick="submitBarcode()">添加条形码</button>
        </div>
        <div class="form-group">
            <h3>已添加的条形码:</h3>
            <ul id="addedBarcodes"></ul>
        </div>
        <button type="button" onclick="finishEntry()">完成当前Item录入</button>
    </form>
</body>
</html>

2. 后端PHP处理代码(save_barcode.php)

负责接收前端提交的数据,校验合法性后插入到Barcodes表,同时处理异常情况:

<?php
// 替换为你的数据库连接信息
$dbHost = 'localhost';
$dbName = 'your_database_name';
$dbUser = 'your_db_username';
$dbPass = 'your_db_password';

try {
    // 初始化PDO连接(防SQL注入,更安全)
    $pdo = new PDO(
        "mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4",
        $dbUser,
        $dbPass,
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
    );

    // 获取POST参数
    $itemNumber = $_POST['itemNumber'] ?? '';
    $barcodeNumber = $_POST['barcodeNumber'] ?? '';

    // 参数校验
    if (empty($itemNumber) || empty($barcodeNumber)) {
        echo json_encode(['success' => false, 'message' => 'Item编号和条形码不能为空']);
        exit;
    }

    // 先校验Item是否存在(避免插入无效的外键)
    $checkItemStmt = $pdo->prepare("SELECT itemNumber FROM Items WHERE itemNumber = ?");
    $checkItemStmt->execute([$itemNumber]);
    if (!$checkItemStmt->rowCount()) {
        echo json_encode(['success' => false, 'message' => '该Item编号不存在']);
        exit;
    }

    // 插入条形码数据(dateAdded自动用当前时间)
    $insertStmt = $pdo->prepare(
        "INSERT INTO Barcodes (barcodeNumber, dateAdded, itemNumber) VALUES (?, NOW(), ?)"
    );
    $insertStmt->execute([$barcodeNumber, $itemNumber]);

    echo json_encode(['success' => true, 'message' => '条形码添加成功']);
} catch (PDOException $e) {
    // 处理主键重复(条形码已存在)的情况
    if ($e->getCode() === '23000') {
        echo json_encode(['success' => false, 'message' => '该条形码已被录入']);
    } else {
        echo json_encode(['success' => false, 'message' => '数据库错误:' . $e->getMessage()]);
    }
}
?>

3. 额外优化建议

  • Item信息自动填充:用户输入itemNumber后,通过AJAX请求Items表,自动展示对应的title和subject,让用户确认是否选对了Item。
  • 批量导入:如果需要一次性录入大量条形码,可以添加CSV文件上传功能,后端解析后批量插入。
  • 扫码枪适配:大部分扫码枪会自动在条形码后加回车,我们已经做了回车提交的适配,刚好可以直接用。

内容的提问来源于stack exchange,提问作者Fquintero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:01:16