【问题标题】:mail function doesn't work with condition邮件功能不适用于条件
【发布时间】:2017-10-09 07:11:55
【问题描述】:

我的站点中有一个联系表格,它使用 php 的邮件功能发送邮件。

这是我的代码:

	<?php
if(isset($_POST['your-email'])) {


$email_to = "felipepinoredes@gmail.com";
$email_subject = "Contacto Codelco";




$email_message = "Detalles del formulario de contacto:\n\n";
$email_message .= "Nombre: " . $_POST['your-name'] . "\n";
$email_message .= "E-mail: " . $_POST['your-email'] . "\n";
$email_message .= "Comentarios: " . $_POST['your-message'] . "\n\n";



$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);

echo "¡El formulario se ha enviado con éxito!";
}
?>

如果我就这样离开它,它不会发送电子邮件,但是,如果我删除 if 并像这样离开它,它会起作用:

$email_to = "felipepinoredes@gmail.com";
$email_subject = "Contacto Codelco";

// Aquí se deberían validar los datos ingresados por el usuario


$email_message = "Detalles del formulario de contacto:\n\n";
$email_message .= "Nombre: " . $_POST['your-name'] . "\n";
$email_message .= "E-mail: " . $_POST['your-email'] . "\n";
$email_message .= "Comentarios: " . $_POST['your-message'] . "\n\n";


// Ahora se envía el e-mail usando la función mail() de PHP
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);

echo "¡El formulario se ha enviado con éxito!";

但我需要条件,我不希望每次加载页面时都自动发送空白邮件。

请帮忙。

【问题讨论】:

  • 试试if(!empty($_POST['your-email']))
  • 嘿!这条评论回答解决了我的问题。我怎样才能投票给你?
  • 如果您想接受,我将其发布为答案;)

标签: php if-statement phpmailer


【解决方案1】:

当一个变量通过 POST 或 GET 发送到我们的脚本时,总是设置,如果没有输入值,它将被设置为一个空字符串。所以如果我们写如下语句:

if(isset($_POST['your-email'])) {}

将始终评估为 TRUE,即使未输入任何值。因此,为了验证我们需要一些值的输入,我们可以使用:

if(!empty($_POST['your-email'])) {}

if(isset($_POST['your-email']) && !empty($_POST['your-email'])) {} // Redundant

在问题的代码中,if(isset($_POST['your-email'])) {} 始终评估为 true,即使 $_POST['your-email'] 为空,导致 $email_message 不完整。

【讨论】:

  • 这解决了问题,谢谢。也感谢您对一个被视为“真实”的空字段的反馈,不知道。
【解决方案2】:

不确定是否有帮助。但是,如果它首先在 post 方法中,我会尝试该请求。也许你在 get 方法中。

if($_SERVER['REQUEST_METHOD'] === "POST"){
   if(isset($_POST['your-email'])) {
      ... your code ...
   }
}

而且我还会在发送之前验证输入。因为你打开了代码的后门。

if(filter_var($_POST['your-email'], FILTER_VALIDATE_EMAIL)){
   ... mail();. ..
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多