douhoushou8385 2016-11-25 11:11
浏览 40

发送时的PHPmailer消息

I made a PHPMailer and it works just perfectly fine but if i click send, it give's me the biggest error code i've ever seen. I know the error has to do with the header('Location: bedankt.php'); in the code.

What i'm trying to accomplisch is, the user gets a message that the form has been send ON the same page (No alertbox), just plain text that pops up saying that the form has been submitted, So no redirect to "Bedankt.php". Here is a screenshot of the error code i talked about:I think the last sentence makes it clear Can you guys help me out? Here is my 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 = 'outlook@example.com';
    $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('thegamingfeud@gmail.com', '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 = 'example@outlook.com';
        $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');

Thank you in advance!

  • 写回答

2条回答 默认 最新

  • douliaodan2738 2016-11-25 11:47
    关注
    $mail->SMTPDebug = 2;
    

    Should probably be:

    $mail->SMTPDebug = false;
    

    PHPMailer is dumping the whole SMTP session onto the page before your location: header can be set.

    Edit: I'll admit that I missed this piece of the question, I only addressed the unexpected block of text: "What i'm trying to accomplisch is, the user gets a message that the form has been send ON the same page (No alertbox), just plain text that pops up saying that the form has been submitted [...]"

    One way might be to piggyback on the session method you're using to handle error messages. For example, On success you could set a session variable indicating such and redirect back to the form. (Be sure to clear it just like you do for errors.) Using JavaScript and AJAX is another option.

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器