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
相关产品推荐
相关产品推荐

