下拉列表的 PHP 表单帖子

问题描述 投票:0回答:1

我一直在尝试为我正在构建的简单电子邮件表单 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 html forms validation
1个回答
0
投票

您遇到的问题(显示 PHP 文件而不是处理表单)可能是由于以下原因造成的:

  1. 不正确的表单操作路径:确保表单的

    action
    属性中的路径正确并指向服务器上的 PHP 文件。表单应该提交给包含验证逻辑的 PHP 脚本,而不是在浏览器中显示 PHP 脚本。

  2. 表单字段名称不匹配:您在 PHP 脚本中用于表单字段的名称不匹配。在 HTML 表单中,您使用

    name="firstName"
    ,但在 PHP 脚本中,您尝试访问
    $_POST['name']
    。同样,对于其他字段,如
    Casa
    Propietario
    等,请确保 HTML 中的
    name
    属性与 PHP 脚本中使用的键匹配。

  3. $_POST
    变量问题:您在某些地方引用了
    $POST
    而不是
    $_POST
    。在 PHP 中,访问 POST 数据的正确全局变量是
    $_POST

  4. 邮件函数调用:传递给 PHP 脚本中

    mail()
    函数的参数不正确。
    mail()
    函数需要以下参数:
    to
    subject
    message
    headers
    $Casa
    $Propietario
    $Tipo
    变量不应作为附加参数传递给
    mail()
    函数。您需要将它们包含在消息内容或标题中。

这是 PHP 脚本的修订版本:

<?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.";
}
?>

所做的更改:

  1. 修复了变量名称以匹配表单字段名称(
    $_POST['firstName']
    $_POST['email']
    等)。
  2. 更正了
    $_POST
    的使用(而不是
    $POST
    )。
  3. mail()
    函数现在接收正确的参数(
    to
    subject
    message
    headers
    )。
  4. 传递到电子邮件的消息现在包含所有表单字段的信息(
    $Casa
    $Propietario
    $Tipo
    )。

进一步建议:

  • PHP 错误报告:如果您仍然遇到问题,可以启用错误报告来帮助调试。将其添加到 PHP 脚本的顶部:
ini_set('display_errors', 1);
error_reporting(E_ALL);
  • 测试电子邮件功能:确保您的服务器支持
    mail()
    功能。某些本地开发环境可能需要配置才能发送电子邮件。

这应该有助于您的表单验证按预期工作!

© www.soinside.com 2019 - 2024. All rights reserved.