嵌入HTML的PHP代码点击按钮无响应问题求助
问题分析与解决方案
我一眼就揪出了几个关键问题,这就是你点击按钮后页面毫无反应的根源,咱们逐个解决:
1. 表单按钮类型错误(最核心原因)
你用了 <input type="button">,这只是个普通按钮,完全不会触发表单提交!必须改成 type="submit",才能让浏览器把表单数据发送到服务器处理。
2. 表单action属性的两处错误
你写的 <?php $_PHP_SELF ?> 有两个问题:
- 变量名写错了,正确的超全局变量是
$_SERVER['PHP_SELF'] - 没有用
echo输出变量,导致action属性为空(浏览器虽会默认提交到当前页面,但规范写法要正确输出)
修正后应为:
action="<?php echo $_SERVER['PHP_SELF']; ?>"
3. 查询结果取值方式错误
你用了 mysqli_fetch_row(),它返回的是索引数组(比如$row[0]、$row[1]),但你却用关联数组的方式($row['emp_name'])取值,这会导致隐性报错。改成 mysqli_fetch_assoc() 就能正常获取关联数组了。
4. 拼写错误
代码里的 $row['emp_joindare'] 多写了一个r,正确的字段名是 $row['emp_joindate']。
5. 细节优化建议
mysqli_error()需要传入数据库连接对象,写成mysqli_error($conn)才能正确输出错误信息- 可以把数据库连接和选择数据库合并成一行,代码更简洁
- 你定义了
$tablename = $_POST['table_name'];但SQL里没用到它,如果想根据输入的表名动态查询,记得替换SQL中的employee(注意要做SQL注入防护,比如用预处理语句)
修正后的完整代码
<html> <header> <title>View Table!</title> </header> <body> <?php if(isset($_POST['button_view'])) { // 合并数据库连接与选择操作 $conn = mysqli_connect("localhost", "root", "", "hello"); if (!$conn) { die("Connection not established! " . mysqli_connect_error()); } $tablename = $_POST['table_name']; // 若需动态查询表名,可将employee替换为$tablename(需做SQL注入防护) $sql = "SELECT emp_name,emp_address,emp_salary,emp_joindate FROM employee"; $retval = mysqli_query($conn, $sql); if (!$retval) { die("Error in SQL: " . mysqli_error($conn)); } // 使用mysqli_fetch_assoc获取关联数组 while ($row = mysqli_fetch_assoc($retval)) { echo "Employee name: {$row['emp_name']}<br>"; echo "Employee address: {$row['emp_address']}<br>"; echo "Employee Salary: {$row['emp_salary']}<br>"; echo "Employee Joindate: {$row['emp_joindate']}<br><br>"; } echo("All queries done!"); mysqli_close($conn); } else { ?> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <table> <tr> <td>Enter Table Name:</td> <td><input type="text" name="table_name" id="table_name"></td> </tr> <tr> <td><input type="submit" name="button_view" id="button_view" value="View Table!" /></td> </tr> </table> </form> <?php } ?> </body> </html>
额外提醒
如果你的需求是根据用户输入的表名动态查询,直接替换SQL中的表名会有SQL注入风险,建议使用预处理语句或者严格校验表名(比如限制只能是预设的合法表名列表)。
内容的提问来源于stack exchange,提问作者Karl Chertoff
相关产品推荐
相关产品推荐

