为何未提交form表单时无法展示database数据库的表格数据
问题根因
- 菜单列表查询逻辑被包裹在
if(isset($_POST['submit']))判断内,只有触发表单POST提交时才会执行查询并给$menus变量赋值 - 刷新页面、新开页面访问均为GET请求,不会进入上述判断分支,
$menus变量未定义,遍历的时候自然无法渲染数据表格
修复方案
把查询菜单列表的逻辑从POST判断分支中移出来,不管请求类型是GET还是POST都执行查询即可,修改后的SQL、数据库连接部分代码如下:
<?php include '../../database/db.php'; if(isset($_POST['submit'])){ $title = $_POST['title']; $sort = $_POST['sort']; $result = $conn->prepare("INSERT INTO menu SET title=?, sort=?"); $result->bindValue(1, $title); $result->bindValue(2, $sort); $result->execute(); } // 列表查询逻辑移到POST判断外,所有请求场景都会执行 $all = $conn->prepare("SELECT * FROM menu"); $all->execute(); $menus = $all->fetchAll(PDO::FETCH_ASSOC); ?>
额外优化建议
- 遍历
$menus之前可以加一层非空判断,避免变量未定义抛出警告:
<?php if (!empty($menus)): ?> <?php foreach ($menus as $menu): ?> <tr> <td><?php echo $menu['title']; ?></td> <td><?php echo $menu['sort']; ?></td> </tr> <?php endforeach; ?> <?php endif; ?>
- 表单提交后建议加302重定向到当前页,避免用户刷新页面重复提交数据:插入数据执行成功后添加
header('Location: '.$_SERVER['REQUEST_URI']);exit;即可。
内容的提问来源于stack exchange,提问作者source changer
相关产品推荐
相关产品推荐

