2012-01-06 2 views
0

Привет, я редактировал код, который я нашел он-лайн, и все работает помимо проверки. Кажется, что он отправляет электронное письмо даже тогда, когда все поля пустые в форме контакта, которую я создал. Это, безусловно, легкое решение, но я новичок в этом, поэтому любая помощь для меня очень важна!PHP Email Script Issue

Спасибо.

Heres код Im используя для PHP скрипт:

//////////////////////////////// /////////////////////

<?php 
// Contact subject 
$subject ="$Email Enquiry"; 
// Details 
$message=("$cComment") ; 

// Mail of sender 
$mail_from="$cEmail"; 
// From 
$header="from: $cName <$mail_from>"; 

// Enter your email address 
$to ='[email protected]'; 

$send_contact=mail($to,$subject,$message, $header); 

// Check, if message sent to your email 
// display message "We've recived your information" 
if($mail_from != "Email"){ 
header('Location:thanksemail.php'); 
} 
else { 
header('Location:emailfail.php'); 
} 
?> 

ответ

0

У вас нет кода проверки. Код, отправляющий почту, - $ send_contact = mail ($ to, $ subject, $ message, $ header); Проверка должна быть перед этим кодом

Попробуйте

if($subject!="" && $cComment!="" && $cEmail!="" && $cName!="" && $mail_from!=""){ 
$send_contact=mail($to,$subject,$message, $header); 

if($mail_from != "Email"){ 
header('Location:thanksemail.php'); 
} 
else { 
header('Location:emailfail.php'); 
} 


}else{ 
header('Location:emailfail.php'); 
} 
3

Необходимо указать, пусты ли переменные перед отправкой электронной почты. Вы можете сделать это следующим образом:

if(!empty($variable) and 
    !empty($variable2)) { 
    // send the email out here 
} 

Я использую функцию empty() здесь, чтобы обнаружить, если значения являются пустыми или нет. Следующие значения считаются пустыми значениями:

"" (an empty string) 
0 (0 as an integer) 
0.0 (0 as a float) 
"0" (0 as a string) 
NULL 
FALSE 
array() (an empty array) 
var $var; (a variable declared, but without a value in a class) 

Я также хотел бы избежать с помощью стандартной функции PHP почты и вместо того, чтобы использовать библиотеку, такие как PHPMailer или SwiftMailer, чтобы отправить ваши электронные письма вместо этого. Они дают вам большую гибкость, и у них есть гораздо более удобный API для работы.

+0

Необходимо убедиться, что вы не делаете почту ($ к, $ предмет, $ сообщение, $ заголовка) вызов, если $ и т. д. равны ""/null – BeRecursive

+1

@BeRecursive Я не уверен, что вы получаете. Для получения дополнительной информации о том, что считается пустым значением, см. Страницу руководства для функции 'empty()' http://php.net/empty. – Treffynnon

+0

Простите, что было довольно неясно - я просто хотел подчеркнуть, что вызов функции mail() фактически отправил электронное письмо и что то, что должно было быть в ваших хорошо объясненных if-statement – BeRecursive

0

Так же, как примечание стороны, вы можете сэкономить одну или две строки кода, проверяя, если электронная почта была отправлена, как:

if(mail($to,$subject,$message, $header)){ 
    header('Location:thanksemail.php'); 
}else { 
    header('Location:emailfail.php'); 
} 

Если он возвращается правда, оно было отправлено. Если false, оно не было отправлено.

0

Вы поставили почты() функции за пределами если() заявление.

Просто переместите его (и завершить, если с другими полями):

<?php 
if(!empty($mail_from) && !empty($Email)) { 
    mail($to, $subject, $message, $header); 
    header('Location:thanksemail.php'); 
} else { 
header('Location:emailfail.php'); 
}