如何用PHP在表格中提交动态下拉列表并传递sbranch_name
解决POST传递下拉列表值的问题
你的问题核心出在下拉列表的name属性写错了,还有一些小细节需要调整,下面一步步给你修正:
1. 修正下拉列表的name属性
你写的是<select name1='sbranch_name'>,但表单元素是通过name属性来标识字段的,PHP的$_POST数组只会识别带有name属性的表单控件,所以要把name1改成name。
2. 调整session_start()的位置
session_start()必须放在所有输出(包括HTML标签)之前,否则会触发"headers already sent"的错误,所以要把它移到PHP代码的最开头。
3. 修正处理页面的冗余代码
你的processstaffb.php里有个无意义的echo "$name1";,这个变量没定义,可以删掉;另外$check变量也未定义,建议改成明确的成功提示。
修改后的下拉列表代码:
<?php session_start(); ?> <form action="processstaffb.php" method="post"> <table id="t01"> <h2> Add Staff User </h2> <tr> <th width="1%">Branch</th> </tr> <tr> <td width="1%"> <?php $mysqli = new mysqli(spf, dbuser, dbpw, db); $sql="Select sbranch_name from branches"; $result = $mysqli->query($sql); if ($result->num_rows > 0) { echo "<select name='sbranch_name'>"; while($row = $result->fetch_assoc()) { echo "<option value='" . htmlspecialchars($row['sbranch_name']) . "'>" . htmlspecialchars($row['sbranch_name']) . "</option>"; } echo "</select>"; } $mysqli->close(); ?> </td> </tr> </table> <br> <br> <input type="submit" id="button2" name="submit" value="Add staff" /> <input type="reset" id="button2" value="Clear"/> </form>
额外加了htmlspecialchars()来防止XSS攻击,让代码更安全
修改后的processstaffb.php代码:
<?php session_start(); // 如果不需要会话功能可以去掉 if (!empty($_POST['sbranch_name'])) { $sbranch_name = $_POST["sbranch_name"]; } else { $sbranch_name = null; echo '<p><font color="red">You forgot to enter the branch of the officer!</font></p>'; echo "$sbranch_name"; // 用于测试值是否传递成功 } if ($sbranch_name) { $mysqli = new mysqli(spf, dbuser, dbpw, db); $stmt = $mysqli->prepare("INSERT INTO staffbranch (sbranch_name) VALUES (?)"); $stmt->bind_param("s", $sbranch_name); $result = $stmt->execute(); if ($result == true && $stmt->affected_rows>0) { echo "<b>Branch added successfully!</b><br>"; } else { echo '<p>Please <a href="addstaffb.php">Click Here</a> to return</p>'; } $stmt->close(); $mysqli->close(); } else { echo '<p>Please <a href="addstaffb.php">Click Here</a> to return</p>'; } ?>
现在点击提交按钮,sbranch_name的值就能通过POST正确传递到processstaffb.php完成插入操作了。
内容的提问来源于stack exchange,提问作者Wen Qing
相关产品推荐
相关产品推荐

