2016-10-09 4 views
1

У меня есть HTML-форма, которая работает с PHP-кодом, и я получаю письма, отправленные мне, однако я могу получить электронное письмо, если нет темы, нет электронной почты и нет сообщения. Может быть, кто-нибудь знает, как это исправить? Вот код PHP:HTML-форму для электронной почты PHP

<?php 
$field_name = $_POST['cf_name']; 
$field_email = $_POST['cf_email']; 
$field_message = $_POST['cf_message']; 

$mail_to = '[email protected]'; 
$subject = 'Message from a site visitor '.$field_name; 

$body_message = 'From: '.$field_name."\n"; 
$body_message .= 'E-mail: '.$field_email."\n"; 
$body_message .= 'Message: '.$field_message; 

$headers = 'From: '.$field_email."\r\n"; 
$headers .= 'Reply-To: '.$field_email."\r\n"; 

$mail_status = mail($mail_to, $subject, $body_message, $headers); 

if ($mail_status) { ?> 
    <script language="javascript" type="text/javascript"> 
     alert('Thank you for the message. We will contact you shortly.'); 
     window.location = 'index.html'; 
    </script> 
<?php 
} 
else { ?> 
    <script language="javascript" type="text/javascript"> 
     alert('Message failed. Please, send an email to [email protected]'); 
     window.location = 'index.html'; 
    </script> 
<?php 
} 
?> 
<?php 
function IsInjected($str) 
{ 
    $injections = array('(\n+)', 
      '(\r+)', 
      '(\t+)', 
      '(%0A+)', 
      '(%0D+)', 
      '(%08+)', 
      '(%09+)' 
      ); 

    $inject = join('|', $injections); 
    $inject = "/$inject/i"; 

    if(preg_match($inject,$str)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

if(IsInjected($visitor_email)) 
{ 
    echo "Bad email value!"; 
    exit; 
} 
?> 
+2

Вы спрашиваете, как _not_ отправлять электронную почту, если тема/сообщение/сообщение пустые? Должен быть простой набор условий 'if'. С чем вы застряли? –

+0

Не запускайте 'mail ($ mail_to, $ subject, $ body_message, $ headers)' сначала проверяйте. Также 'isinjected' не используется до тех пор, пока сообщение не отправлено, возможно, захочет исправить это. Также непонятно, почему определенные пробелы делают электронную почту «введенной». – chris85

+0

Кроме того, используйте [header] (http://php.net/header) перенаправления, а не довольно неприятный JS-хак. –

ответ

-1

перед вызовом функции mail() вы должны проверить, скомпилированы ли поля.

Это только проект пример, потому что я предлагаю вам использовать более сложные проверки, чем просто пустой функции(), EXPECIALLY на $ field_email, например:

if (empty($field_name) || !filter_var($field_email, FILTER_VALIDATE_EMAIL) || empty($field_message)) { 
    ?> 
    <script language="javascript" type="text/javascript"> 
     alert('All fields must be correctly compiled'); 
     window.location = 'index.html'; 
    </script> 
<?php 

} else { 


$mail_status = mail($mail_to, $subject, $body_message, $headers); 

if ($mail_status) { ?> 
    <script language="javascript" type="text/javascript"> 
     alert('Thank you for the message. We will contact you shortly.'); 
     window.location = 'index.html'; 
    </script> 
<?php 
} 
else { ?> 
    <script language="javascript" type="text/javascript"> 
     alert('Message failed. Please, send an email to [email protected]'); 
     window.location = 'index.html'; 
    </script> 
<?php 
} 
} 
+0

Это похоже на работу. спасибо –

-1

Попробуйте добавить заголовки и используя почту() функция:

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; 
$headers .= 'From: Mail <[email protected]>'; 

mail($mail_to, $subject, $body_message, $headers); 
Смежные вопросы