2016-11-28 34 views
-1

我在不同的网站上多次提出这个问题,但没有结果。所以我们再来一次。我在这篇文章中留下的代码是来自我创建的PHP联系人的代码。正如你可以通过“Contact.php”在代码底部看到的代码以if($mail->send()){开头,代码内部代码如下:header('Location: bedankt.php');。这是做什么,当用户按下发送按钮,他被重定向到“Bedankt.php”,在“bedankt.php”他会看到一条消息,说“该表格已成功发送”。我试图完成的是以下内容:用户不会被重定向到“Bedankt.php”,而是他会在窗体本身上方看到相同的消息,所以他停留在同一页面上,但是当他/她按下发送按钮,在表单上方弹出一行文字说“表单已成功发送”。当然,表格必须像现在一样工作。 你们可以给我一些代码吗?我希望我终于可以得到一个有效的安泽。只是为了过关,这里是说明它的照片:enter image description herePHP contactform在同一页上的成功消息

预先感谢您。

的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 | Contact</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"> 
<!-- NAVIGATIE BALK --> 
<nav class="navbar navbar-default" role="navigation"> 
<!-- logo --> 
<div class="navbar-header"> 
    <!-- --> 
    <a class="navbar-brand" href="../../index.php"> 
    <!-- <img src="images/logo.png" alt="" style="width: 50px; height: 60px;"> --> 
    </a> 

    <!-- Inklappbaar ding als je op mobiel zit--> 
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#mainnavbar"> 
    <span class="icon-bar"></span> 
    <span class="icon-bar"></span> 
    <span class="icon-bar"></span> 
    </button> 
</div> 

<!-- menu eitems linker kant--> 
<div class="collapse navbar-collapse" id="mainnavbar"> 
    <ul class="nav navbar-nav navbar-right"> 

    <li><a href="../../index.php">Home</a></li> 
    <li><a href="../Over/index.php">Over</a></li> 
    <li><a href="../Nieuws/index.php">Nieuws</a></li> 
    <li class="active"><a href="index.php">Contact</a></li> 

    <!-- Dropdown --> 
    <!-- 
    <li class="dropdown"> 
     <a href="#" class="dropdown-toggle" data-toggle="dropdown">Profiel <span class="caret"></span></a> 
     <ul class="dropdown-menu"> 
      <li><a href="#">Profiel</a></li> 
      <li><a href="#">Instellingen</a></li> 
     </ul> 
    </li> 
    --> 
    <!-- <li><button type="button" class="btn btn-primary btn-lg raised">Niet beschikbaar</button></li> --> 
    </ul> 

</div> 
    <!-- Aan de rechterkant --> 

<!-- EINDE NAVIAGTIE BALK--> 

</nav> 

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

<div id="footer"> 

<div class="col-md-3 col-md-offset-9 col-xs-5" 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="naam" autocomplete="off" <?php echo isset($fields['naam']) ? 'Value="' . e($fields['naam']) . '"' : '' ?>> 
    </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 *<br> 
     <textarea name="bericht" id="contact" rows="8"><?php echo isset($fields['bericht']) ? e($fields['bericht']) : '' ?></textarea> 
    </label> 
    <br> 
    <input id="button" type="submit" value="Verzenden"> 

</form> 


</div> 

<!-- <iframe class="col-xs-6" id="google" 
width="auto" height="300" frameborder="0" style="border:0" src="https://www.google.com/maps/embed/v1/place?key=AIzaSyA5QHkZAm-DkqHj4egxMm394bB6VVu5sr8 &q=Leonard+Springerlaan+1,+9727+KB+Groningen" allowfullscreen> 
</iframe> --> 

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


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

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[] = $field . ' is verplicht!'; 
    } 
} 

if(empty($errors)){ 
    $mail = new PHPMailer; 

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

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

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

    $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]', 'Example Person'); //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 = 'example'; 
     $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 = 'Example'; 

     $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'); 
+0

你可以改变'contact.php'中的重定向指向'index.php',但追加一个查询字符串值来表示消息已经发送。在'index.php'上检查页面加载时是否存在'$ _GET'变量以及是否存在特定变量('mailsent = true'等),然后显示一条消息 – RamRaider

+0

我真的不明白,你能给我提供一些代码吗?即时通讯在PHP中并不是那么棒。 –

+0

窗体动作设置为PHP_SELF,然后添加该代码从contact.php开始在你的页面 –

回答

0

添加的index.php代码上面的你CONTACT.PHP代码。表单的动作URL更改为自即,“#”

检查下面的代码。

<?php 

session_start(); 

require_once 'helpers/security.php'; 
require_once "phpmailer/PHPMailerAutoload.php"; 

$errors = []; 
$fields = []; 
if ($_SERVER['REQUEST_METHOD'] === 'POST'){ 
    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[] = $field . ' is verplicht!'; 
      } 
     } 

     if(empty($errors)){ 
      $mail = new PHPMailer; 

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

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

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

      $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]', 'Example Person'); //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 = 'example'; 
       $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 = 'Example'; 

       $mail->AddAddress($fields['email'] , $fields['name']); //added mail id of user 
       if($mail->send()){ 
        $errors[] = "Your Success Message"; 
       } 
       else{ 
        $errors[] = "Your failure message"; 
       } 
      } else { 
       $erros[] = $mail->ErrorInfo; 
      } 
     } 

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

?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Servicepunt Detailhandel Groningen | Contact</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"> 
    <!-- NAVIGATIE BALK --> 
    <nav class="navbar navbar-default" role="navigation"> 
     <!-- logo --> 
     <div class="navbar-header"> 
      <!-- --> 
      <a class="navbar-brand" href="../../index.php"> 
       <!-- <img src="images/logo.png" alt="" style="width: 50px; height: 60px;"> --> 
      </a> 

      <!-- Inklappbaar ding als je op mobiel zit--> 
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#mainnavbar"> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
      </button> 
     </div> 

     <!-- menu eitems linker kant--> 
     <div class="collapse navbar-collapse" id="mainnavbar"> 
      <ul class="nav navbar-nav navbar-right"> 

       <li><a href="../../index.php">Home</a></li> 
       <li><a href="../Over/index.php">Over</a></li> 
       <li><a href="../Nieuws/index.php">Nieuws</a></li> 
       <li class="active"><a href="index.php">Contact</a></li> 

       <!-- Dropdown --> 
       <!-- 
       <li class="dropdown"> 
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Profiel <span class="caret"></span></a> 
        <ul class="dropdown-menu"> 
         <li><a href="#">Profiel</a></li> 
         <li><a href="#">Instellingen</a></li> 
        </ul> 
       </li> 
       --> 
       <!-- <li><button type="button" class="btn btn-primary btn-lg raised">Niet beschikbaar</button></li> --> 
      </ul> 

     </div> 
     <!-- Aan de rechterkant --> 

     <!-- EINDE NAVIAGTIE BALK--> 

    </nav> 

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

    <div id="footer"> 

     <div class="col-md-3 col-md-offset-9 col-xs-5" id="contact"> 

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

      </form> 


     </div> 

     <!-- <iframe class="col-xs-6" id="google" 
     width="auto" height="300" frameborder="0" style="border:0" src="https://www.google.com/maps/embed/v1/place?key=AIzaSyA5QHkZAm-DkqHj4egxMm394bB6VVu5sr8 &q=Leonard+Springerlaan+1,+9727+KB+Groningen" allowfullscreen> 
     </iframe> --> 

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


<?php 
unset($errors); 
unset($fields); 
?> 

编辑: 所有错误或消息被存储在$error阵列。如果会出现错误或消息,则会显示。

+0

我想你没有读过这个问题,我真的不知道这是如何解决它的?因为在你发布的代码中,2行仍然存在。它只是将两个文件融合在一起 –

+0

哦对不起,我的坏。现在检查答案。我用正确的答案编辑它。 –

0

只是简要地说明一下,我把注释 - 重定向到同一页面的形式,但包括查询字符串值来测试。如果GET变量存在,则显示消息。

/* contact.php ~ instead of bedankt.php */ 
if($mail->send()){ 
    die(header('Location: index.php?mailsent=true')); 
} 


/* index.php */ 
$mailsent = !empty($_GET['mailsent']) ? 'Your message has been sent, thankyou!' : ''; 

然后,在某处你的HTML身体

echo $mailsent; 

为了克服在页面刷新仍在显示提示,如您的评论指出,你也许可以使用元刷新

在头文件(顺便说一句:这将刷新5秒〜相应地更改数量)

<?php 
    if(!empty($_GET['mailsent'])){ 
     echo "<meta http-equiv='refresh' content='5;url=index.php' />"; 
    } 
?> 
+0

它的工作,但不是按预期,如果我按发送重新加载页面,并显示该消息,但是当我再次发布页面它仍然存在。它只需要弹出几秒钟而不需要重新加载页面。我真的不知道如何更好地解释它。 –

0

您必须创建一个<div>元素,该元素仅在表单发送到您的contact.php时才会显示。有很多方法可以做到这一点。由于您已经在使用php会话,因此您可以使用以下方法:当表单向contact.php提交数据时,将名为$ _SESSION ['form_submitted'](或任何您想要的)的会话变量设置为true,当您重定向到index.php,放置一个条件模块,用于评估$ _SESSION ['form_submitted'] == true并相应地显示包含信息的<div>。在显示<div>块之后,也不要忘记将$ _SESSION ['form_submitted']的值重置为false。 至于错误,您可以使用相同的会话方法和其他键(如“error_occurred”)来评估邮件是否已成功发送。

希望有所帮助。

+0

我是否需要手动将会话设置为false?你说我需要用这个消息创建一个div,这个div必须隐藏,直到这个人按下发送,页面根本不会重新加载,并显示消息在contactform上方,我知道这是可能的,但我真的不知道我是如何可以添加(你说的)我的代码。你能提供一些代码吗?我无法自行解决这个问题。 –

+0

是的,您必须手动将会话值设置为false。你能明确告诉我你卡在哪里吗?我不明白你说的那个部分,“该页面根本没有重新加载,并且显示了该联系表单上方的消息”。请随意引用截图进行澄清。 – hecate

+0

就像我说的那样,我不知道怎么说更好。用户按下按钮,表单被发送而不重新加载页面,当完成时,弹出消息说我已成功发送 –