2016-02-12 4 views
0

Прежде всего, спасибо всем, кто помогал в прошлом с вопросами.
У меня есть веб-страница PHP, которая отправляет форму заявки на адрес электронной почты, а в конце у меня есть функция IF, чтобы отправить пользователя либо success.html, если письмо отправлено, либо error.html, если нет.PHP, если почта отправляется, перейдите на страницу успеха, если не перейдите на страницу с ошибкой

ли посылает по электронной почте или нет, пользователь всегда берется в error.html

Мой код выглядит следующим образом:

require '/PHPMailer-master/PHPMailerAutoload.php'; 
    require '/PHPMailer-master/class.phpmailer.php'; 

    $mail = new PHPMailer; 

    if(isset($_POST['submit'])){ 
     $to = "[email protected]"; 
     $from = $_POST['text_96']; 
     $fullname = $_POST['text_95']; 
     $email = $_POST['text_96']; 
     $dob = $_POST['date_12']; 
     $addr = $_POST['textarea_31']; 
     $maths = $_POST['text_93']; 
     $english = $_POST['text_31']; 
     $holidayst = $_POST['date_74']; 
     $holidayend = $_POST['date_91']; 
     $distance = $_POST['number_58']; 
     $awayhome = $_POST['selectlist_90']; 

     foreach($_POST['checkbox'] as $key=>$val){$apprent .= $val.' ';} 
     //$fileatt = $_POST['file']; 
     $reasontext = $_POST['textarea_60']; 
     $message = "Message"; 

     $mail->setFrom($from, $fullname); 
     $mail->addAddress('[email protected]'); 
     $mail->addAttachment($_FILES['file']['name']); 

     if (isset($_FILES['file']) && 
     $_FILES['file']['error'] == UPLOAD_ERR_OK) { 
     $mail->AddAttachment($_FILES['file']['tmp_name'], 
        $_FILES['file']['name']); 
     } 

     $mail->Subject = 'subject'; 
     $mail->Body = $message; 

    if(!$mail->send()) { 
     $message = NULL; 
     $headers = NULL; 
     header('Location: success.html'); 
    } else { 
     $message = NULL; 
     $headers = NULL; 
     header('Location: error.html'); 
    } 

Я использую PHPMailer, чтобы отправить электронную почту, когда кнопка щелкнул.
Часть У меня возникли проблемы с заключается в следующем:

if(!$mail->send()) { 
     $message = NULL; 
     $headers = NULL; 
     header('Location: success.html'); 
    } else { 
     $message = NULL; 
     $headers = NULL; 
     header('Location: error.html'); 
    } 

Я надеюсь, что это имеет смысл, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Любая помощь приветствуется.

+0

'if (! $ Mail-> send()) {' означает, что он потерпел неудачу ('!'). Поэтому вам, вероятно, нужно удалить это. Какова ваша точная проблема, хотя, что происходит - или не происходит? – Qirel

+0

Я думаю, что вам нужно инвертировать условие: 'if ($ mail-> send()) {success} else {error}' (удалить восклицательный знак) – fusion3k

ответ

1

это не должно быть:

if($mail->send()) { 
     $message = NULL; 
     $headers = NULL; 
     header('Location: success.html'); 
    } else { 
     $message = NULL; 
     $headers = NULL; 
     header('Location: error.html'); 
    } 

?

$ mail-> send() возвращает true в случае успеха, а не наоборот.

+0

Как мне это не заметить? Честно! Свежий набор глаз всегда делает это, а? Спасибо за помощь :) – Aaron

+0

@ Аарон Добро пожаловать, Аарон! :) –

1

В соответствии с исходным кодом PHPMailer (https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php) метод send() возвращает false при ошибке или true, если он был успешно отправлен. Глядя на ваш код, который вы отправляете пользователей на success.html странице при посыла() возвращает ложь

В вашем изменении кода:

if(!$mail->send()) { 
    $message = NULL; 
    $headers = NULL; 
    header('Location: success.html'); 

К (т.е. удалить «!»)

if($mail->send()) { 
    $message = NULL; 
    $headers = NULL; 
    header('Location: success.html'); 

Вы также должны обернуть вызов send() в блок try {} catch {}, чтобы поймать все исключения, которые он может выбросить, чтобы вы могли контролировать отправку пользователя на страницу с ошибкой.

+0

Это также [документально] (http://phpmailer.github.io/PHPMailer/classes/PHPMailer.html#method_send). PHPMailer генерирует исключения только в том случае, если вы включите их, передав конструктору конструкцию «true». – Synchro

+0

Ах да, хорошее место! –

0

Это должно сработать для вас.

require '/PHPMailer-master/PHPMailerAutoload.php'; 
require '/PHPMailer-master/class.phpmailer.php'; 

$mail = new PHPMailer(true); 

if(isset($_POST['submit'])){ 
    $to = "[email protected]"; 
    $from = $_POST['text_96']; 
    $fullname = $_POST['text_95']; 
    $email = $_POST['text_96']; 
    $dob = $_POST['date_12']; 
    $addr = $_POST['textarea_31']; 
    $maths = $_POST['text_93']; 
    $english = $_POST['text_31']; 
    $holidayst = $_POST['date_74']; 
    $holidayend = $_POST['date_91']; 
    $distance = $_POST['number_58']; 
    $awayhome = $_POST['selectlist_90']; 

    foreach($_POST['checkbox'] as $key=>$val){$apprent .= $val.' ';} 
    //$fileatt = $_POST['file']; 
    $reasontext = $_POST['textarea_60']; 
    $message = "Message"; 

    $mail->setFrom($from, $fullname); 
    $mail->addAddress('[email protected]'); 
    $mail->addAttachment($_FILES['file']['name']); 

    if (isset($_FILES['file']) && 
    $_FILES['file']['error'] == UPLOAD_ERR_OK) { 
    $mail->AddAttachment($_FILES['file']['tmp_name'], 
       $_FILES['file']['name']); 
    } 

    $mail->Subject = 'subject'; 
    $mail->Body = $message; 
    try{ 
     $mail->send()) { 
     header('Location: success.html'); 
    }catch(Exception $e) 
    { 
     header('Location: error.html'); 
    } 
    finally{ 
     $message = NULL; 
     $headers = NULL; 
    } 
} 
Смежные вопросы