如何通过form标签将数据库数据传递至其他PHP页面?代码问题求助
解决表单传递数据库数据的问题
我来帮你搞定这个问题,你的代码里有几个明显的结构和语法错误,导致数据没法正常传递,咱们一步步梳理并修正:
先说说你的代码里的核心问题:
- 你把
<form>和<select>放在了while循环内部,这会循环生成多个表单和下拉框,结构完全混乱——正确的做法应该是一个表单包裹一个下拉框,然后在下拉框里循环生成<option>选项。 action属性里的变量没有输出,而且语法错误:你没写echo来输出$row['model'],另外enctype的正确写法是multipart/form-data(你少了个横杠)。<option>里的href属性是无效的,下拉框的选项是通过value属性传递选中值的,提交表单时会把选中的value以name="role"的参数名传递到目标页面。- 代码外层还有一个多余的
</select>标签,导致HTML结构不闭合,这也会影响页面功能。
修正后的完整代码:
<?php require "pages/header.php" ?> <?php // 如果header.php里没启动session,记得打开这行 // session_start(); $servername = "localhost"; $username = "root"; $password = ""; $dbname = "apple"; // 创建数据库连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } include "navbar.php"; $sql = "SELECT * FROM `table_3`"; $result = $conn->query($sql); ?> <link rel="canonical" href="https://getbootstrap.com/docs/4.3/examples/sign-in/"> <!-- Bootstrap核心CSS --> <link href="https://getbootstrap.com/docs/4.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link href="https://getbootstrap.com/docs/4.3/examples/sign-in/signin.css" rel="stylesheet"> <!-- 只创建一个表单,包裹整个下拉选择器 --> <form action="repaired.php" method="GET" enctype="multipart/form-data"> <!-- 一个下拉选择器,name="role"用来标识传递的参数 --> <select id="role" name="role" class="form-signin form-control"> <?php if ($result->num_rows > 0) { // 循环生成每个选项,把数据库里的model作为value和显示文本 while($row = $result->fetch_assoc()) { echo '<option value="'.$row['model'].'">'.$row['model'].'</option>'; } } else { echo '<option value="">暂无数据</option>'; } $conn->close(); ?> </select> <!-- 必须添加提交按钮,用户才能触发表单提交 --> <button class="btn btn-lg btn-primary btn-block mt-3" type="submit">提交</button> </form>
如何在目标页面接收数据:
在repaired.php中,你可以通过$_GET['role']获取用户选中的型号值:
<?php // 先判断参数是否存在,避免报错 if(isset($_GET['role']) && !empty($_GET['role'])){ $selectedModel = $_GET['role']; echo "你选中的型号是:".$selectedModel; } else { echo "请选择一个型号"; } ?>
额外说明:
如果你的需求是每个选项对应直接跳转到带model参数的页面,而不是通过表单提交,那可以不用表单,直接在循环里生成带链接的选项(不过原生select不支持点击选项跳转,需要配合JS),但从你的代码来看,你更倾向于用表单提交选中值,所以上面的方案更适合你。
内容的提问来源于stack exchange,提问作者Dharmendra Soni
相关产品推荐
相关产品推荐

