在网站上提交表单时出现 404 Not Found 错误

404 Not Found Error when submitting form on website

我正在尝试构建一个使用 bootstrap 表单 HTML 结构和 PHP 来控制后端验证并将表单信息发送到我的电子邮件的联系表单。

现在,每当我点击提交按钮时,我都会收到 404 未找到错误,我认为这与 HTML 没有以正确的方式与我的 PHP 代码通信有关。我的网站 100% 可用(通过 NameCheap 托管),并且一直在使用 cPanel 的文件管理器上传所有 HTML、CSS、图像和 PHP 文件。我遵循了 Youtube 教程,了解 PHP 应该是什么样子来验证我的表单数据并将其发送到我的电子邮件。

我还没有尝试过代码的 $invalid_class_name 方面,因为我试图让数据首先成功通过。我的 contact-form.php 文件与我的 HTML 文件位于同一位置,但我想知道是否需要将我的 index.html 文件另存为 PHP 文件来制作这项工作或我网站上的额外 PHP 插件。

我在表单代码

的正上方 HTML 中包含此 PHP 代码
<?php 
      if($message_sent);
      ?>
      
        <h3>Thanks,we'll be in touch</h3>
      
      <?php
      else:
      ?>

HTML

<form name=”contact_form” action=”contact-form.php” method=”POST” class="row g-4">
        <div class="col-md-6">
          <label for="first-name" class="form-label">First Name</label>
          <input type="text" name="first-name" class="form-control" id="first-name" placeholder="John" required>
        </div>
        <div class="col-md-6">
          <label for="last-name" class="form-label">Last Name</label>
          <input type="text" name="last-name" class="form-control" id="last-name" placeholder="Smith" required>
        </div>
        <div class="col-md-6">
          <label for="email" class="form-label">Email</label>
          <input type="email" name="email" class="form-control" id="email-address" required>
        </div>
        <div class="col-md-12">
          <label for="notes" class="form-label">Notes</label>
          <textarea class="form-control" name="notes" id="notes" rows="4" placeholder="Include any additional information"></textarea>
        </div>
        <div class="col-12">
          <button type="submit" class="pcs-cta-button form-submit-button">Submit</button>
        </div>
      </form>

      
        
     

PHP

<?php
$message_sent = false;
if (isset($_POST['email'])) && $_POST['email'] !='') {
  if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ){
    //submit the form
    $userFirstName = $_POST['first-name'];
    $userLastName = $_POST['last-name'];
    $userEmail = $_POST['email'];
    $message = $_POST['notes'];

    $to = "myemail@gmail.com";
    $body = "";

    $body .= "From: ".$userFirstName." ".$userLastName "\r\n";
    $body .= "Email: ".$userFirstName. "\r\n";
    $body .= "Notes: ".$message. "\r\n";

    mail($to, $messageSubject, $body);
    $message_sent = true;
  }
  else {
    $invalid_class_name = "form-invalid";
  }
}
?>

这是因为您在 form(通常是 form 属性)的操作中使用 而不是 "

改变这个:

<form name=”contact_form” action=”contact-form.php” method=”POST” class="row g-4">

对此:

<form name="contact_form" action="contact-form.php" method="POST" class="row g-4">

现在您的浏览器会尝试 GET%E2%80%9Dcontact-form.php%E2%80%9D”而不是“contact-form.php”。是的,它尝试 GET(默认方法)而不是 POST,因为您的表单方法也无效(同样的原因 - 错误的引号)。