在网站上提交表单时出现 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
,因为您的表单方法也无效(同样的原因 - 错误的引号)。
我正在尝试构建一个使用 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
,因为您的表单方法也无效(同样的原因 - 错误的引号)。