如果数据丢失,php不会回显错误消息,而是显示php致命错误



我使用PHPMailer来构建一个联系人表单,我正在寻找一个变量($msg(来显示成功或失败消息,这取决于最终用户是否正确填写了表单。如果表单正确填写,则($msg(变量echo成功。但是,如果用户没有正确填写表单,则$(msg(可变项不会echo,相反,我收到一个致命错误,如下所示:

致命错误:未捕获PHPMailer\PHPMailer\异常:无效地址:(回复(:in/home/k4piavsj0bsc/public_html/PHPMailer/src/PHPMailer.php:1004堆栈跟踪:#0/home/k4biavsj0bsC/public_html/PHPMailer/src/PHPMailer.php(973(:PHPMailer \PHPMailer->addOrEnqueueAnAddress('Reply-To','',''(#1/home/k4piavsj0bsc/public_html/contactForm.php(18(:PHPMailer\PHPMailer\PHMailer->addReplyTo(''(#2/home/k4piavsj0bsc/public_html/contactForm.php(30(:发送电子邮件(''info@purplelime...','','','''(#3/home/k4piavsj0bsc/public_html/index.php

这是我的代码,如果最终用户没有完成表单或表单在服务器端失败,有人知道我如何显示($msg(变量吗?

<?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
$msg = "";
if (isset($_POST['submit'])) {
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
function sendemail ($to, $reply, $subject, $body) {
$mail = new PHPMailer(true);
$mail->setFrom('test@gmail.com', 'PLT Contact Form - Email');
$mail->addAddress($to);
$mail->addReplyTo($reply);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->IsHTML(false);
return $mail->send();
}
$email = $_POST['email'];
$subject = $_POST['subject'];
$body = $_POST['body'];
if (sendemail('info@test.com', $email, $subject, $body)) {
$msg = 'Email has been sent, Thank you!';
} else
$msg = 'Email failed, please try again later';
}
?>

<html>
<title>Contact Form Using PHPMailer</title>

<body>
<div id="contactInnerWrapper">
<a href="#"><span id="close">&times;</span></a>
<h1 id="h1contactForm">Get in touch</h1>
<form method="post" action="contactForm.php">
<label for="email">Email address:</label><br>
<input  type="email" name="email"  placeholder="Enter email" id="email">
<label for="subject">Subject:</label>
<input  type="text" name="subject" id="subject"><br>
<label for="body">What would you like to ask us?</label><br>
<textarea  type="text" name="body" rows="7" id="content"></textarea>
<button type="submit" name="submit" id="submit" value="send">Submit</button>
</form>
<br><br>
<?php echo $msg; ?>
</div>
<script type="text/javascript" src="general.js"></script>
</body>
</html>

将最后一个if语句更改为此

$email = filter_var($email, FILTER_SANITIZE_EMAIL); // 
if (filter_var($email, FILTER_VALIDATE_EMAIL) && !empty($subject) && !empty($body)) {
try {
if (sendemail('info@purplelimetree.com', $email, $subject, $body))
$msg = 'Email has been sent, Thank you!';
else
$msg = 'Error sending email';
}catch(Excpetion $e) {
$msg = 'Sending email failed, error: '.$e->getMessage();
}
} else
$msg = 'Email failed, incomplete/invalid data';
  1. 使用FILTER_ANITIZE_email从电子邮件中删除所有非法字符
  2. FILTER_VALIDATEMAIL筛选器验证电子邮件地址
  3. 检查身体和受试者是否为空
  4. 尝试发送电子邮件,如果出现致命错误,请正确捕获并返回解释性消息
  5. 如果sendemail函数返回正确设置成功消息或设置错误消息

我认为以下代码将帮助您理解和解决问题。

$email = isset($_POST['email']) ? $_POST['email']:'';
$subject = isset($_POST['subject']) ? $_POST['subject']:'';
$body = isset($_POST['body']) ? $_POST['body']:'';
$is_valid_email = filter_var($email, FILTER_VALIDATE_EMAIL);
$status = false;
if ($email!='' && $is_valid_email==true && $subject!='' && $body!='') {
$status = sendemail('info@purplelimetree.com', $email, $subject, $body)
}
if($status==true){
$msg = 'Email has been sent, Thank you!';
} else
$msg = 'Email failed, please try again later';
}

您必须更改php处理模块设置中的config php.ini文件

1.转到您的模块(如xamp-apache(。

2.打开配置文件

3.搜索error_reporting(在这里你会看到错误,你的模块为php程序测试提供了什么类型的错误报告。(

4.error_reporting=E_ALL&E_已弃用&E_STRICT&E_WARNING这样设置错误报告;

通过这样做,你得到了所有的错误,但不是警告和胎儿错误