2017-10-08 89 views
1

我在我的网站有一个联系表单,它使用php的邮件功能发送邮件。邮件功能不符合条件

这是我的代码:

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

 

 
$email_to = "[email protected]"; 
 
$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!"; 
 
} 
 
?>

,如果我离开它就像这样,它不会发送电子邮件,但是,如果,如果我删除,并把它像这样,它的工作原理:

$email_to = "[email protected]"; 
 
$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!";

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

请帮忙。

+0

尝试'if(!empty($ _ POST ['your-email']))' – MarioZ

+0

嘿!这个评论回答了我的问题。我怎么能给你投票? –

+0

如果您要接受它,我将其作为答案发布;) – MarioZ

回答

1

当一个变量通过POST发送到我们的脚本或得到的是始终设置,如果没有输入值,将其设置为空字符串。因此,如果我们编写以下语句:

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'])) {}始终判断为真,即使$_POST['your-email']为空,导致$email_message是不完整的。

+0

这解决了问题,谢谢。也感谢关于一个空白字段的反馈,这个字段被认为是“真实的”,但是不知道这一点。 –

0

不知道它是否有帮助。但如果它是在post方法中,我会尝试请求。也许你正在得到方法。

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

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

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