【问题标题】:i cant connect my php to my html form. the form action is not working我无法将我的 php 连接到我的 html 表单。表单操作不起作用
【发布时间】:2020-02-24 20:24:50
【问题描述】:

我创建了一个简单的消息表单,每当我测试它时,表单操作似乎都不起作用。它只会让我进入错误页面

<div class="form">
    <form action="connect.php" method="post">
        <input id="name" name="name" type="text" class="form-control" placeholder="Your Name" required>
        <br>
        <textarea name="message" id="message" class="form-control message" placeholder="Message" rows="4" required></textarea> <br>
        <input type="submit" class="form-control submit" value="SEND MESSAGE" name="submit">
    </form>
</div>

这里是php

<?php

    $name = $_POST['name'];
    $message = $_POST['message'];

    $conn = new mysqli ('localhost','root','','messg');
    if($conn->connect_error){
        die('Connection Failed : ' .$conn->connect_error);

    }else{

        $stmt = $conn->prepare("insert into mesages(name, message) values(?, ?)");
        $stmt->bind_param("ss",$name, $message);

        $stmt->execute();

        echo "Message Sent!";

        $stmt->close();
        $conn->close();
    }

?>  

【问题讨论】:

  • 错误页面说什么?还发现Should we check mysql errors manually对我有用。
  • 请把你的错误也贴出来,让我们更好地理解
  • 它会导致一个页面显示:此页面无法正常工作如果问题仍然存在,请联系网站所有者。 HTTP 错误 405
  • 打开 PHP 错误以获取实际错误:error_reporting(E_ALL); ini_set('display_errors', 1);
  • HTTP 405Method Not Allowed ...看起来您的服务器不接受 POST 请求...这将非常非常奇怪。

标签: php html mysql forms


【解决方案1】:

超文本传输​​协议 (HTTP) 405 Method Not Allowed 响应状态码表示服务器知道请求方法,但目标资源不支持。

服务器必须在 405 响应中生成 Allow 标头字段,其中包含目标资源当前支持的方法列表。

如何解决不允许的 405 方法

这听起来可能有点过于简单,但导致 405 Method Not Allowed 错误的最常见原因是输入了错误的 URL。大多数网络服务器都受到严格保护,旨在禁止访问不正确的 URL,以防止用户访问错误的页面(或尝试访问不存在的页面)。

因此,在继续之前,请仔细检查以确保您已正确输入要访问的文件的 URL。犯错比你想象的要容易——比如忘记一个字母或拼错一个词。您可能还会发现,只需刷新页面即可提示它正确加载。

connect.php 听起来像是一个无法访问或设置不正确的数据库连接页面,请检查您是否将表单重定向到正确的页面。

Mysqli 连接应该是这样的:

$host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
    $mysqli = new mysqli($host, $user, $pass, $db);
    $mysqli->set_charset($charset);
} catch (\mysqli_sql_exception $e) {
     throw new \mysqli_sql_exception($e->getMessage(), $e->getCode());
}

然后像这样查询:

$stmt = $mysqli->prepare("insert into mesages(name, message) values(?, ?)");
$stmt->bind_param("ss",$name, $message);
if($stmt->execute()){
echo "Message Sent!";
}
$stmt->close();
$conn->close();

See here for further details

到允许标头lists the set of methods supported by a resource

【讨论】:

  • 这是一个很好的回应,但即使 OP 使用的连接字符串并不完全遵循 MySQLi php 文档,我真的不明白为什么它不起作用 - 这可能值得注意到一些廉价/免费的托管网站不允许 POST 请求 - 引用评论真的很奇怪。
  • 是的,也可以这样! 405 Method Not Allowed 响应的原因可能难以追踪和修复。潜在的 50 多个状态代码池代表客户端、Web 应用程序、Web 服务器以及通常多个第三方 Web 服务之间的复杂关系,确定特定状态代码的原因可能是一个挑战的情况。 OP 需要调试应用程序代码或脚本,查看服务器端日志,确认服务器的配置等。对我来说,这是由于混合连接 mysqli OOP 和程序和查询而发生的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 2013-03-03
  • 2015-03-10
相关资源
最近更新 更多