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

PHP求助:如何调用MySQL表中同一invoice_no下的各列数据?

问题分析与解决方案

看起来你现在的问题出在循环逻辑和输出时机上,我来帮你拆解并修复:

问题根源

  1. 你的while循环里每次都用$product_name = $row['product_name'];覆盖变量,循环结束后$product_name只保留最后一条记录的产品名,再用$product_name[0]自然只会取这个字符串的第一个字符。
  2. 你只在循环外写了一行<tr>,没有根据查询到的记录数量生成对应行数的输入框。

修复后的代码

我会把逻辑调整为在循环内部逐行生成表格内容,同时填充从数据库取出的对应数据,还顺便帮你优化了SQL安全(避免注入风险):

<table align="center" style="width:800px;">
<thead>
<tr>
<th>#</th>
<th style="text-align:center;">Item Name</th>
<th style="text-align:center;">Total Quantity</th>
<th style="text-align:center;">Quantity</th>
<th style="text-align:center;">Buy Price</th>
<th>Total</th>
</tr>
</thead>
<tbody id="invoice_item">
<?php
// 用预处理语句防止SQL注入,更安全
$query1 = "SELECT * FROM purchase_details WHERE invoice_no = ?";
$stmt = mysqli_prepare($connect, $query1);
mysqli_stmt_bind_param($stmt, "i", $id); // 假设$id是整数类型,字符串的话用"s"
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

$counter = 1; // 用于序号计数
while($row = mysqli_fetch_array($result)){
    // 从当前行取出数据,替换成你表中实际的字段名
    $product_name = $row['product_name'];
    $total_quantity = $row['total_quantity']; 
    $quantity = $row['quantity'];
    $buy_price = $row['buy_price'];
    $total = $row['total']; 
?>
<tr>
<td><b id="number"><?php echo $counter++; ?></b></td>
<td>
<select name="pid[]" class="form-control form-control-sm" required>
<!-- 如果需要默认选中对应产品,这里可以补充产品列表的查询逻辑 -->
<option selected=""><?php echo $product_name; ?></option>
</select>
</td>
<td><input name="tqty[]" readonly type="text" class="form-control form-control-sm" value="<?php echo $total_quantity; ?>"></td>
<td><input name="qty[]" type="text" class="form-control form-control-sm" required value="<?php echo $quantity; ?>"></td>
<td><input name="price[]" type="text" class="form-control form-control-sm" readonly value="<?php echo $buy_price; ?>"></td>
<td><?php echo $total; ?></td>
</tr>
<?php
}
// 关闭预处理语句
mysqli_stmt_close($stmt);
?>
</tbody>
</table>

关键说明

  1. 循环内生成行:把<tr>的代码放到while循环内部,这样每查询到一条记录就生成一行输入框,数量自然和记录数匹配。
  2. SQL安全优化:用mysqli_prepare预处理语句绑定参数,避免直接把$id拼进SQL语句导致注入风险。
  3. 数据填充:把从数据库取出的每个字段值,用<?php echo ... ?>填充到对应的输入框、下拉框或单元格中。
  4. 序号计数:用$counter变量实现每行的递增序号。

如果你的表字段名和我假设的不一样,记得替换成你实际的字段名哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:03:46