提交表单后如何显示自定义消息



我有一个html表单,它在提交后使用phpMailer发送电子邮件。一切正常,但我想在发送电子邮件时在表单上显示一条消息。使用我的代码,会在一个空白的白色页面上显示一条消息。

我的php代码:

<?php
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$msg = $_POST['msg'] ?? '';
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerSMTP;
use PHPMailerPHPMailerException;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
$mail->Host='smtp.gmail.com';
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Port=587;
$mail->SMTPAuth=true;
$mail->SMTPSecure='tls';
$mail->Username='email@email.com';
$mail->Password='password';
$mail->setFrom($email, $name);  // who send the email
$mail->addAddress('email@email.com'); // who recive the email
$mail->isHTML(true);
$mail->Subject = 'Portfolio response';
$mail->Body = $msg;
$mail->send();
echo 'Your message has been sent!';
} catch (Exception $e){
echo '';
}
?>

您的消息已发送显然是显示的信息。

Html表单代码:

<form action="mail-handler.php" method="POST" id="contact-form">
<span class="contacts-text" id="first-contacts-text">To get in touch with me, please compile this form.</span>
<span class="contacts-text">I will reply as soon as possible. Thank you!</span>
<ul class="form-content">
<li class="form-input">
<label for="name" class="label">Full name</label>
<input class="input" id="name" type="text" name="name" required>
</li>
<li class="form-input">
<label for="email" class="label">E-mail</label>
<input class="input" id="mail" type="text" name="email" required>
</li>
<li class="form-input">
<label for="msg" class="label">Insert text</label>
<textarea class="input" id="comment" type="text" name="msg" cols="30" rows="10" style="resize: none;" required></textarea>
</li>
<li class="form-input" id="last-input">
<input class="input" id="form-button" type="submit" value="submit" name="submit" onclick="sendEmail()">
</li>
</ul>
</form>

谢谢你的建议!

首先,将index.html的名称更改为index.php,这样它就可以由PHP解释器进行解析。

下一步修改您的成功声明正文,即:

try {
$mail->send();
header('Location: index.php?mailsent=1');
die(); // we don't want exactly anything after sending redirect header.
} catch (Exception $e){
echo '';
}

最后,如果$_GET['mailsent']变量可用,则在表单的文件中添加消息。

HTML code of your page...
...
<?php
if (isset($_GET['mailsent']) && intval($_GET['mailsent']) == 1 ){
echo '<div class="messagesbox">Mail was sent</div>';
}
?>
<form action="mail-handler.php" method="POST" id="contact-form">
... your form body skipped here
</form>

其他选项

如果您不想通过GET数组传递参数,可以尝试使用会话。

此外,您只需创建一个静态thankyou.html页面,并在邮件提交后将用户重定向到那里

此外,如果将表单提交的整个PHP代码移动到index.php中,则不需要进行重定向。

最后,正如您所添加的,虽然这是一个页面网站,但您也应该考虑将AJAX可能与jQuery一起使用,这样您就可以在不离开页面的情况下提交表单,在不重新加载的情况下显示消息,等等。无论如何,这个主题肯定太宽泛了,无法在这个答案中描述,我只能建议您熟悉jQuery AJAX。

相关内容

  • 没有找到相关文章

最新更新