我一直在尝试为我正在构建的简单电子邮件表单 HTML 网站放置 PHP 表单验证,但我不知道 PHP 是如何工作的。
<div class="contacto_main">
<div class="form">
<form action="PHP/send_email.php" method="post">
<label style="padding-right: 7.55%;" for="firstName">Nombre:</label>
<input style="padding-right: 25%;" placeholder="Su Nombre" type="text" id="firstName"
name="firstName" required>
<br>
<label style="padding-right: 0.1%;" for="email">Email de retorno:</label>
<input style="padding-right: 25%;" placeholder="Su Email" type="email" id="email"
name="email" required>
<br>
<label style="padding-right: 10.2%;" for="Casa">Casa:</label>
<input style="padding-right: 25%;" placeholder="Casa" type="Casa" id="Casa" name="Casa"
required>
<br>
<label style="padding-right: 1%;" for="Propietario">Tipo de propietario</label>
<select style="padding-right: 20%;" name="Propietario" id="Propietario" required>
<option value="Seleccionar"></option>
<option value="Propietario Residente">Propietario Residente</option>
<option value="Propietario no Residente">Propietario no Residente</option>
<option value="Arrendatario">Arrendatario</option>
</select>
<br>
<label style="padding-right: 3.5%;" for="Tipo">Tipo de Solicitud</label>
<select style="padding-right: 29.9%;" name="Tipo" id="Tipo" required>
<option value="Seleccionar"></option>
<option value="Sugerencia">Sugerencia</option>
<option value="Felicitación">Felicitación</option>
</select>
<br>
<div style="width: 20%;"><label style="padding-right: 3.9%;" for="message">Message:
</label></div>
<div style="width: 70%;"><textarea style="padding-right: 62%; padding-bottom: 60%;"
placeholder="Su mensaje" id="message" name="message" required></textarea></div>
<br>
<input type="submit" value="Send">
</form>
</div>
</div>
在看了很多帖子和解释后,我才编写了如下的 PHP
<?php
$errors = [];
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Get POST data
$name = isset($_POST['name']) ? strip_tags(trim($_POST['name'])) : '';
$email = isset($_POST['email']) ? trim($_POST['email']) : '';
$Casa = isset($POST['Casa']) ? strip_tags(trim($_POST['Casa'])) : '';
$Propietario = isset($POST['Propietario']) ? strip_tags(trim($POST['Propietario'])) : '';
$Tipo = isset($POST['Tipo']) ? strip_tags(trim($POST['Tipo'])) : '';
$message = isset($_POST['message']) ? strip_tags(trim($_POST['message'])) : '';
// Validate form fields
if (empty($name)) {
$errors[] = 'Name is empty';
}
if (empty($email)) {
$errors[] = 'Email is empty';
} else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Email is invalid';
}
if (empty($Casa)) {
$error[] = 'Casa is empty';
}
if (empty($_POST[$Propietario])) {
$error[] ='Seleccione una opcion';
}
if (empty($_POST[$Tipo])) {
$error[] ='Seleccione una opcion';
}
if (empty($message)) {
$errors[] = 'Message is empty';
}
// If no errors, send email
if (empty($errors)) {
// Recipient email address (replace with your own)
$recipient = "[email protected]";
// Additional headers
$headers = "From: $name <$email>";
// Send email
if (mail($recipient, $message, $headers, $Casa, $Propietario, $Tipo)) {
echo "Email sent successfully!";
} else {
echo "Failed to send email. Please try again later.";
}
} else {
// Display errors
echo "The form contains the following errors:<br>";
foreach ($errors as $error) {
echo "- $error<br>";
}
}
else {
// Not a POST request, display a 403 forbidden error
header("HTTP/1.1 403 Forbidden");
echo "You are not allowed to access this page.";
}
?>
尽管单击发送按钮时,会显示 PHP 文件,而不是验证数据并发送电子邮件。
任何人有任何想法。
PS:这对某些人来说可能看起来很基础,但我不知道 PHP 是如何工作的,所以提前感谢您的帮助。
您遇到的问题(显示 PHP 文件而不是处理表单)可能是由于以下原因造成的:
不正确的表单操作路径:确保表单的
action
属性中的路径正确并指向服务器上的 PHP 文件。表单应该提交给包含验证逻辑的 PHP 脚本,而不是在浏览器中显示 PHP 脚本。
表单字段名称不匹配:您在 PHP 脚本中用于表单字段的名称不匹配。在 HTML 表单中,您使用
name="firstName"
,但在 PHP 脚本中,您尝试访问 $_POST['name']
。同样,对于其他字段,如 Casa
、Propietario
等,请确保 HTML 中的 name
属性与 PHP 脚本中使用的键匹配。
$_POST
变量问题:您在某些地方引用了$POST
而不是$_POST
。在 PHP 中,访问 POST 数据的正确全局变量是 $_POST
。
邮件函数调用:传递给 PHP 脚本中
mail()
函数的参数不正确。 mail()
函数需要以下参数:to
、subject
、message
和 headers
。 $Casa
、$Propietario
和 $Tipo
变量不应作为附加参数传递给 mail()
函数。您需要将它们包含在消息内容或标题中。
<?php
$errors = [];
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Get POST data
$name = isset($_POST['firstName']) ? strip_tags(trim($_POST['firstName'])) : '';
$email = isset($_POST['email']) ? trim($_POST['email']) : '';
$Casa = isset($_POST['Casa']) ? strip_tags(trim($_POST['Casa'])) : '';
$Propietario = isset($_POST['Propietario']) ? strip_tags(trim($_POST['Propietario'])) : '';
$Tipo = isset($_POST['Tipo']) ? strip_tags(trim($_POST['Tipo'])) : '';
$message = isset($_POST['message']) ? strip_tags(trim($_POST['message'])) : '';
// Validate form fields
if (empty($name)) {
$errors[] = 'Name is empty';
}
if (empty($email)) {
$errors[] = 'Email is empty';
} else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Email is invalid';
}
if (empty($Casa)) {
$errors[] = 'Casa is empty';
}
if (empty($Propietario)) {
$errors[] = 'Please select a Propietario option';
}
if (empty($Tipo)) {
$errors[] = 'Please select a Tipo option';
}
if (empty($message)) {
$errors[] = 'Message is empty';
}
// If no errors, send email
if (empty($errors)) {
// Recipient email address (replace with your own)
$recipient = "[email protected]";
// Subject of the email
$subject = "New Contact Form Submission";
// Prepare the email content
$emailMessage = "Name: $name\n";
$emailMessage .= "Email: $email\n";
$emailMessage .= "Casa: $Casa\n";
$emailMessage .= "Propietario: $Propietario\n";
$emailMessage .= "Tipo: $Tipo\n";
$emailMessage .= "Message: $message\n";
// Additional headers
$headers = "From: $name <$email>";
// Send email
if (mail($recipient, $subject, $emailMessage, $headers)) {
echo "Email sent successfully!";
} else {
echo "Failed to send email. Please try again later.";
}
} else {
// Display errors
echo "The form contains the following errors:<br>";
foreach ($errors as $error) {
echo "- $error<br>";
}
}
} else {
// Not a POST request, display a 403 forbidden error
header("HTTP/1.1 403 Forbidden");
echo "You are not allowed to access this page.";
}
?>
$_POST['firstName']
、$_POST['email']
等)。$_POST
的使用(而不是 $POST
)。mail()
函数现在接收正确的参数(to
、subject
、message
、headers
)。$Casa
、$Propietario
、$Tipo
)。ini_set('display_errors', 1);
error_reporting(E_ALL);
mail()
功能。某些本地开发环境可能需要配置才能发送电子邮件。这应该有助于您的表单验证按预期工作!