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

PHP发票系统实现自动从MySQL数据库获取商品价格

解决方案

方法1:前端直接存储价格(简单快速)

适合商品价格不会频繁变动的场景,无需额外后端请求,直接在渲染下拉框时把价格存入选项的自定义属性:

修改PHP渲染下拉框代码

将<option>的value改为商品ID(避免同名商品冲突),同时添加data-price属性存储对应价格:

<div class="col-md-4 mb-3">
    <select name="product_name[]" id="live_search" class="form-control" placeholder="product name" required autocomplete="off">
        <option value="" selected="selected"></option>
        <?php 
        // 拉取商品数据
        $sqlCAT="SELECT * FROM  products";
        $queryCAT=mysqli_query($dbCon, $sqlCAT);
        while($result = mysqli_fetch_assoc($queryCAT))
        {
            $product = $result['product_name'];
            $id = $result['product_id'];
            $price = $result['product_price']; // 根据你的数据表字段名调整
            ?>
        <option value="<?php echo $id ?>" data-price="<?php echo $price ?>"><?php echo $product ?></option>
        <?php } ?>
    </select>
</div>
<div class="col-md-2 mb-3">
    <input type="number" name="product_price[]" id="search_result" class="form-control" placeholder="item price" required autocomplete="off">
</div>

添加JavaScript监听事件

在页面底部或独立JS文件中加入以下代码,监听下拉框选择变化并自动填充价格:

document.getElementById('live_search').addEventListener('change', function() {
    const selectedOption = this.options[this.selectedIndex];
    const price = selectedOption.getAttribute('data-price');
    document.getElementById('search_result').value = price || '';
});

方法2:AJAX异步请求后端获取价格(实时准确)

如果商品价格可能动态变动,或需要结合后端权限、折扣逻辑,推荐使用这种方式:

1. 创建后端接口文件(例:get_product_price.php)

负责接收商品ID,查询数据库返回对应价格:

<?php
// 引入你的数据库连接文件
include 'your_db_conn.php';

if(isset($_GET['product_id']) && is_numeric($_GET['product_id'])){
    $productId = intval($_GET['product_id']);
    // 用预处理语句避免SQL注入
    $sql = "SELECT product_price FROM products WHERE product_id = ?";
    $stmt = mysqli_prepare($dbCon, $sql);
    mysqli_stmt_bind_param($stmt, "i", $productId);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $row = mysqli_fetch_assoc($result);
    
    echo $row ? $row['product_price'] : '';
    mysqli_stmt_close($stmt);
} else {
    echo '';
}
mysqli_close($dbCon);
?>

2. 修改前端下拉框代码

确保下拉框value为商品ID:

<div class="col-md-4 mb-3">
    <select name="product_name[]" id="live_search" class="form-control" placeholder="product name" required autocomplete="off">
        <option value="" selected="selected"></option>
        <?php 
        // 拉取商品数据
        $sqlCAT="SELECT * FROM  products";
        $queryCAT=mysqli_query($dbCon, $sqlCAT);
        while($result = mysqli_fetch_assoc($queryCAT))
        {
            $product = $result['product_name'];
            $id = $result['product_id'];
            ?>
        <option value="<?php echo $id ?>"><?php echo $product ?></option>
        <?php } ?>
    </select>
</div>
<div class="col-md-2 mb-3">
    <input type="number" name="product_price[]" id="search_result" class="form-control" placeholder="item price" required autocomplete="off">
</div>

3. 添加AJAX逻辑的JavaScript

document.getElementById('live_search').addEventListener('change', function() {
    const productId = this.value;
    const priceInput = document.getElementById('search_result');
    
    if(!productId){
        priceInput.value = '';
        return;
    }
    
    const xhr = new XMLHttpRequest();
    xhr.open('GET', 'get_product_price.php?product_id=' + productId, true);
    xhr.onload = function() {
        if(this.status === 200){
            priceInput.value = this.responseText || '';
        }
    };
    xhr.send();
});

注意事项

  • 请根据实际数据表字段名调整代码中的product_price字段
  • 多商品行场景下,需将ID改为类名,循环处理每一行的下拉框与价格输入框
  • 方法2使用了预处理语句,可有效防范SQL注入风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:13:28