HTML表单数据存入MySQL遇HTTP ERROR 405错误求助
解决表单提交出现HTTP ERROR 405的问题
HTTP 405错误表示服务器不允许使用当前请求方法(此处为POST)访问目标资源,结合你的代码,可能的原因和解决方法如下:
1. 检查PHP文件路径是否正确
确保applications.php文件和你的HTML表单页面在同一目录下,若不在同一目录,需修正表单的action属性为正确的相对路径或绝对路径。比如PHP文件在api子目录下,应改为:
<form class="form__filling contacts" action="api/applications.php" method="post">
2. 确认服务器配置支持PHP和POST请求
- 检查服务器(如Apache、Nginx)是否正确配置了PHP解析模块,若未配置,服务器会将PHP文件作为静态文件返回,无法处理POST请求。
- 排查服务器是否有拦截POST请求的规则:比如
.htaccess文件中的限制、安全插件(如ModSecurity)的拦截策略,可暂时关闭相关规则测试是否恢复正常。
3. 修正表单输入控件的错误用法
你当前使用<textarea>收集姓名、电话、邮箱,不符合常规输入场景,建议替换为对应的<input>类型(虽不是405错误直接原因,但可避免潜在输入格式问题):
<div class="contacts__container flex"> <label class="contacts__label" for="name" > <input class="contacts__input" type="text" name="name" placeholder="Введите ваше имя" id="name"> </label> <label class="contacts__label" for="phone"> <input class="contacts__input form__input" type="tel" name="phone" id="phone" placeholder="Введите ваш телефон"> </label> <label class="contacts__label form__label" for="email" > <input class="contacts__input form__input" type="email" name="email" id="email" placeholder="Введите ваш email"> </label> </div>
4. 修复PHP代码的SQL注入漏洞(关键)
你的PHP代码直接将用户输入拼接到SQL语句中,存在严重SQL注入风险,同时可能因特殊字符导致SQL执行错误。改用预处理语句重构代码:
<?php // Подключение к базе данных $servername = "localhost"; $username = "root"; $password = "admin"; $dbname = "englishTochka"; $conn = new mysqli($servername, $username, $password, $dbname); // Проверка подключения if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 检查是否为POST请求 if ($_SERVER['REQUEST_METHOD'] !== 'POST') { die("Недопустимый метод запроса"); } // 获取并过滤表单数据 $name = trim($_POST['name'] ?? ''); $phone = trim($_POST['phone'] ?? ''); $email = trim($_POST['email'] ?? ''); // 使用预处理语句插入数据 $sql = "INSERT INTO applications (timestamp, name, phone, email) VALUES (NOW(), ?, ?, ?)"; $stmt = $conn->prepare($sql); $stmt->bind_param("sss", $name, $phone, $email); if ($stmt->execute()) { echo "Запись успешно сохранена"; } else { echo "Ошибка: " . $stmt->error; } // 关闭资源 $stmt->close(); $conn->close(); ?>
内容的提问来源于stack exchange,提问作者byuHblu
相关产品推荐
相关产品推荐

