PHP与HTML中如何显示关联数组内同键对应的多行独立数据
PHP与HTML中如何显示关联数组内同键对应的多行独立数据
嘿,我来帮你解决这个问题!你遇到的核心问题是当前代码每次循环都会覆盖$document_title变量,最后只能拿到最后一条文档的标题,没法把所有文档标题分别放到独立的输入框里。咱们一步步来调整:
首先,先修正你SQL语句里的一个错误——JOIN用户表的时候,关联条件写错了,应该是i.user_id = u.user_id,而不是i.user_id = datat.item_number,不然查询大概率会出错。
接下来,修改PHP部分的逻辑:不要直接把查询结果的键值对赋值成单个变量,而是把所有文档标题收集到一个数组里,同时保存item标题和用户名(因为item_id=1对应的用户和item信息是唯一的,直接赋值就行)。
<?php // 修正后的SQL语句 $sql = "SELECT i.item_title, d.document_title, u.user_name FROM items as i INNER JOIN documents as d ON i.item_id = d.item_id INNER JOIN users as u ON i.user_id = u.user_id WHERE i.item_id = 1;"; $result = mysqli_query($db_server, $sql); // 初始化变量:保存item标题、用户名,以及所有文档标题的数组 $item_title = ''; $user_name = ''; $document_titles = []; while($row = mysqli_fetch_assoc($result)) { // 因为item_id固定为1,所以item_title和user_name每次循环都是相同的 $item_title = $row['item_title']; $user_name = $row['user_name']; // 把每个文档标题添加到数组中,这样就能保存所有结果了 $document_titles[] = $row['document_title']; } ?>
然后是HTML部分,不要手动写三个输入框,而是通过循环$document_titles数组来自动生成对应的输入框——这样不管数据库里有多少条文档数据,都能准确生成对应数量的输入框。另外,记得用htmlspecialchars()转义输出内容,避免XSS攻击或者破坏HTML结构:
<form method="POST" action="updateItem.php"> <p> <textarea name="item_title"><?php echo htmlspecialchars($item_title); ?></textarea> </p> <p> <input type="text" name="user_name" value="<?php echo htmlspecialchars($user_name); ?>" /> </p> <!-- 循环文档标题数组,生成每个独立的输入框 --> <?php foreach($document_titles as $title): ?> <p> <input type="text" name="document_title[]" value="<?php echo htmlspecialchars($title); ?>" /> </p> <?php endforeach; ?> <!-- 别忘了加提交按钮,不然没法提交表单哦 --> <p> <button type="submit">保存修改</button> </p> </form>
如果你确实需要固定显示3个输入框(哪怕数据库里的文档数量不足3条),可以在PHP里补充数组元素,确保至少有3个值:
// 确保数组至少有3个元素,不足的补空字符串 while(count($document_titles) < 3) { $document_titles[] = ''; }
这样调整后,所有文档标题就能分别显示在独立的输入框里啦,再也不会被覆盖啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

