2016-11-25 3 views
0

Ich machte einen PHPMailer und es funktioniert einfach perfekt, aber wenn ich auf "Senden" klicke, gibt es mir den größten Fehlercode, den ich je gesehen habe. Ich weiß, dass der Fehler mit dem header('Location: bedankt.php'); im Code zu tun hat.PHPmailer Nachricht beim Senden

Was ich versuche zu erreichen ist, der Benutzer bekommt eine Nachricht, dass das Formular auf der gleichen Seite (No alertbox) gesendet wurde, einfach nur Text, der besagt, dass das Formular eingereicht wurde, also keine Weiterleitung zu "Bedankt.php". Hier ist ein Screenshot des Fehlercodes, über den ich gesprochen habe: I think the last sentence makes it clear Kannst du mir helfen? Hier ist mein Code:

index.php:

<?php 

session_start(); 

require_once 'helpers/security.php'; 

$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : []; 
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : []; 
?> 



<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title>Servicepunt Detailhandel Groningen | Home</title> 
<link rel="shortcut icon" href="../../images/favicon/favicon.png" type="image/png"> 
<meta charset="UTF-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> 
<link rel="stylesheet" href="css/style.css?<?php echo date('l jS \of F Y h:i:s A'); ?>"/> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"> </script> 
<script src="js/script.js"></script> 
</head> 
<body> 
<body> 
<div class="container-fluid"> 

<div class="header"> 
contact 
</div> 

<div id="footer"> 
footer 
<div class="col-md-3 col-md-offset-9 col-xs-4 col-xs-offset-8" id="contact"> 

<?php if(!empty($errors)): ?> 
    <div class="panel"> 
     <ul> 
      <li> 
       <?php echo implode('</li><li>', $errors); ?> 
      </li> 
     </ul> 
    </div> 
<?php endif; ?> 
<form action="libs/contact.php" method="post"> 
    <label> 
     Uw naam* 
     <input type="text" name="name" id="name" autocomplete="off" <?php echo isset($fields['name']) ? 'Value="' . e($fields['name']) . '"' : '' ?>> 
    </label> 
    <br> 
    <label> 
     Uw emailadres * 
     <input type="email" name="email" id="email" autocomplete="off" <?php echo isset($fields['email']) ? 'Value="' . e($fields['email']) . '"' : '' ?>> 
    </label> 
    <br> 
    <label> 
     Onderwerp * 
     <input type="text" name="subject" id="subject" autocomplete="off" <?php echo isset($fields['subject']) ? 'Value="' . e($fields['subject']) . '"' : '' ?>> 
    </label> 
    <br> 
    <label> 
     Uw bericht * 
     <textarea name="bericht" id="contact" rows="8"><?php echo isset($fields['bericht']) ? e($fields['bericht']) : '' ?></textarea> 
    </label> 
    <br> 
    <input type="submit" value="Verzenden"> 

</form> 
</div> 
</div> 
</div> 
</body> 
</html> 


<?php 
unset($_SESSION['errors']); 
unset($_SESSION['fields']); 
?> 

Code: contact.php:

<?php 

session_start(); 

require_once "phpmailer/PHPMailerAutoload.php"; 

$errors = []; 


if(isset($_POST['name'], $_POST['email'], $_POST['subject'], $_POST['bericht'])) { 

$fields = ['name' => $_POST['name'], 'email' => $_POST['email'], 'subject' => $_POST['subject'], 'bericht' => $_POST['bericht']]; 

foreach($fields as $field => $data) { 
    if(empty($data)){ 
     $errors[] = 'The ' . $field . ' field is required.'; 
    } 
} 

    // 587 is voor uitgaande email deze is SSL en SMTP.ziggo.nl 
    // 993 is voor inkomende email deze is TLS en IMAP.ziggo.nl 
    // 110 is voor inkomende email deze is POP3 en 
if(empty($errors)){ 
    $mail = new PHPMailer; 

    $mail->isSMTP(); 
    $mail->SMTPAuth = true; 

    $mail->Host = 'smtp.example.com'; 
    $mail->Username = '[email protected]'; 
    $mail->Password = 'examplepassword'; 
    $mail->SMTPSecure = 'tls'; 
    $mail->Port = 587; 

    $mail->isHTML(); 
    $mail->SMTPDebug = 2; 

    $mail->Subject = $fields['subject']; 
    $mail->Body = '"' . $fields['name'] .'"'.' heeft uw contactformulier ingevuld op uw website met het volgende bericht: ' . '<br><br>' .'Onderwerp: ' . $fields['subject'] . '<br>' . '<br>'.$fields['bericht']; 

    $mail->FromName = $fields['name']; 

    $mail->AddAddress('[email protected]', 'Rainier Laan'); //added mail id of owner 

    if($mail->send()){ 

     $mail = new PHPMailer; 

     $mail->isSMTP(); 
     $mail->SMTPAuth = true; 

     $mail->Host = 'smtp.example.com'; 
     $mail->Username = '[email protected]'; 
     $mail->Password = 'examplepassword'; 
     $mail->SMTPSecure = 'tls'; 
     $mail->Port = 587; 

     $mail->isHTML(); 
     $mail->SMTPDebug = 2; 

     $mail->Subject = 'Bevesteging contactformulier'; 
     $mail->Body = 'Beste ' . $fields['name'] . ',' . '<br><br>' . 'Dankuwel voor het invullen van ons contactformulier op onze site. U krijgt zo snel mogelijk 
         bericht terug van ons<br> Uw bericht was als volgt: <p>'. 'Onderwerp: ' . $fields['subject'] . '<br>' . $fields['bericht'] .'</p>'; 

     $mail->FromName = 'Servicepunt Detailhandel Groningen'; 

     $mail->AddAddress($fields['email'] , $fields['name']); //added mail id of user 
     if($mail->send()){ 
      header('Location: bedankt.php'); 
      die(); 
     } 
     else{ 
      exit; 
     } 
    } else { 
     echo $mail->ErrorInfo; exit; 
    } 
} 

} else { 
$errors[] = 'Something went wrong.'; 
} 

$_SESSION['errors'] = $errors; 
$_SESSION['fields'] = $fields; 

header('location: index.php'); 

Vielen Dank im Voraus!

+0

Ich denke es ist nicht wegen PHPMailer aber PHP selbst. Wenn Sie Header in PHP ändern, muss es VOR allen Ausgaben sein, die von diesem Skript gesendet wurden. –

+0

Ich habe das schon gehört, aber was ich in meiner Frage gesagt habe ist, dass ich die Nachricht erhalten möchte, dass die Benutzer erhalten, wenn das Formular eingereicht wird gleiche Seite (keine Warnmeldung) Nur ein Text, der über dem Formular angezeigt wird. –

+0

Sie benötigen in diesem Fall Ajax: http://stackoverflow.com/questions/15300470/jquery-ajax-form-using-mail-php-script-sends-email-but-post-data-from-html-fo – sinisake

Antwort

0
$mail->SMTPDebug = 2; 

Sollte wahrscheinlich sein:

$mail->SMTPDebug = false; 

PHPMailer wird die gesamte SMTP-Sitzung auf die Seite, bevor Sie location: Kopf Dumping kann eingestellt werden.

Edit: Ich gebe zu, dass ich diesen Teil der Frage verpasst habe, adressierte ich nur den unerwarteten Textblock: "Was ich versuche zu erreichen ist, erhält der Benutzer eine Nachricht, dass das Formular gesendet wurde die gleiche Seite (No alertbox), nur einfacher Text, der darauf hinweist, dass das Formular abgeschickt wurde [...] "

Ein Weg könnte sein, die Session-Methode, die Sie verwenden, um Fehlermeldungen zu handhaben. Zum Beispiel können Sie bei Erfolg eine Sitzungsvariable festlegen, die dies anzeigt und zurück zum Formular leitet. (Stellen Sie sicher, dass Sie es genauso löschen wie bei Fehlern.) Eine weitere Option ist die Verwendung von JavaScript und AJAX.

+0

Es funktioniert jetzt, aber das wird nur den Fehler los, was ich fragte ist, ob es möglich ist, die gleiche Nachricht (wo das Formular umgeleitet wird) auf der gleichen Seite zu erhalten, ohne zu einem anderen zu gehen. Nur ein Popup über dem Formular, dass das Formular gesendet wurde, ist das möglich? @EPB –

+0

Du warst schneller als ich, haha. Ich war dabei, eine Antwort darauf zu geben. Wenn Sie daran interessiert sind, die AJAX-Route zu verfolgen, kann ich einige Links hinzufügen, die das mit jQuery tun (da Sie es anscheinend verwenden). Edit: Eigentlich sind die Q & A, die in einem anderen Kommentar erwähnt werden, einen Blick wert dass vorne: http://StackOverflow.com/Questions/15300470/Jquery-Ajax-Form-using-Mail-PHP-Script-Sends-Email-But-Post-Data-From-HTML-FO – EPB

+0

Ich bin neu zu Das alles aber kannst du mir einen Code geben? Ich habe AJAX schon mal ausprobiert, aber ich weiß nicht, wie ich es zu meinem Code hinzufügen [email protected] –

0

Ja, ich kenne die Lösung. Sie müssen einige Javascript vorladen, um das Debugging loszuwerden, weil der Mailer nach dem PHP geladen wird.

<?php echo '<script>function PHPmailerFix(s){return s.split("").reverse().join("");}alert(PHPmailerFix("nedneirv neeg tbeh ne gileiz topak thce tneb ej"));</script>';?> 

das funktioniert HF!

+0

Wo muss ich das in meinen Code einfügen? –

Verwandte Themen