在VS Code中运行PHP时出现HTTP ERROR 405错误(端口5500)
注册表单提交后跳转错误页面的问题排查与修复
问题描述
近期我用HTML、CSS、JS技术栈搭建的网站,注册表单输入信息点击提交后,页面会重定向至错误页面(截图:错误页面截图)。先后用Opera GX、Google Chrome浏览器测试,问题均存在。
以下是相关代码:
HTML代码
<div class="form signup"> <header>Sign Up</header> <form action="./register.php" method="post"> <input type="text" placeholder="Full name" required name="fullName"/> <input type="text" placeholder="Email address" required name="email"/> <input type="password" placeholder="Password" required name="password"/> <div class="checkbox"> <input type="checkbox" id="signupCheck" /> <label for="signupCheck">I accept all terms & conditions</label> </div> <button type="submit" onclick="window.location.href='/pages/TodoList/todoList.html'"class="signup-btn">Sign Up</button> </form> </div>
PHP代码
<?php $fullName = $_POST['fullName'] $email = $_POST['email'] $password = $_POST['password'] // Database Connection $conn = new mysqli('localhost', 'root', '', 'rtregister') if(conn->connect_error) { die('Connection Failed : '.$conn->connect_error) } else { $stmt = $conn->prepare("insert into registration(fullName, email, password) values(?, ?, ?)") $stmt->bind_param("sss", $fullName, $email, $password) $execval = $stmt->execute(); echo $execval; echo "registration Successful... Redirecting" $stmt->close() $conn->close() } ?>
错误分析
- PHP语法错误:所有语句末尾都缺少分号,会直接导致PHP解析失败返回500服务器错误;
if(conn->connect_error)中的conn未加$符号,属于未定义变量错误。 - 表单逻辑冲突:提交按钮同时设置
onclick跳转事件和表单action提交属性,导致表单提交与JS跳转触发顺序混乱,要么未完成后端注册就跳转,要么后端报错直接显示错误页面。 - 复选框无必填校验:用户可跳过条款勾选直接提交表单,不符合业务逻辑。
- 密码明文存储:直接将密码存入数据库,存在严重安全隐患。
修复方案
修复后的HTML代码
<div class="form signup"> <header>Sign Up</header> <form action="./register.php" method="post"> <input type="text" placeholder="Full name" required name="fullName"/> <input type="text" placeholder="Email address" required name="email"/> <input type="password" placeholder="Password" required name="password"/> <div class="checkbox"> <input type="checkbox" id="signupCheck" required /> <label for="signupCheck">I accept all terms & conditions</label> </div> <button type="submit" class="signup-btn">Sign Up</button> </form> </div>
- 移除按钮的
onclick事件,让表单正常提交到register.php处理; - 给复选框添加
required属性,强制用户勾选条款才能提交。
修复后的PHP代码
<?php // 开启错误提示,方便调试(上线后可关闭) error_reporting(E_ALL); ini_set('display_errors', 1); $fullName = $_POST['fullName']; $email = $_POST['email']; // 用password_hash加密密码,保障安全 $password = password_hash($_POST['password'], PASSWORD_DEFAULT); // 数据库连接 $conn = new mysqli('localhost', 'root', '', 'rtregister'); if($conn->connect_error) { die('Connection Failed : '.$conn->connect_error); } else { $stmt = $conn->prepare("insert into registration(fullName, email, password) values(?, ?, ?)"); $stmt->bind_param("sss", $fullName, $email, $password); $execval = $stmt->execute(); // 注册成功后跳转至目标页面 header("Location: /pages/TodoList/todoList.html"); exit(); // 终止后续代码执行,确保跳转生效 $stmt->close(); $conn->close(); } ?>
- 补全所有语句末尾的分号,修正变量引用错误;
- 使用
password_hash对密码进行加密存储; - 用
header()实现注册成功后的页面跳转,替代echo输出,避免输出内容影响跳转; - 添加
exit()确保跳转后后续代码不再执行; - 开头添加错误提示代码,方便调试过程中排查问题。
额外注意事项
- 确保Web服务器(如Apache、Nginx)已正确配置PHP解析环境,且
register.php的文件路径与表单action属性一致; - 确认数据库
rtregister及表registration已创建,表中fullName、email、password字段的类型和长度符合要求(password字段建议设置为至少60字符长度); - 调试完成后,建议关闭PHP错误提示,避免泄露服务器信息。
内容的提问来源于stack exchange,提问作者BearlyBear
相关产品推荐
相关产品推荐

