Notice: Undefined variable: error in /storage/ssd5/047/2981047/public_html/inc/sendEmail.php on line 47
Ok эта ошибка отображается, когда я отправляю электронное письмо со своего собственного сайта... Я хочу найти решение этой проблемы, поскольку ошибка отображается на самом сайте, а не в консоли и т. д.
Сообщение вверху — это то, что отображается на моем сайте, когда форма заполнена правильно...
Пожалуйста, не у меня нет опыта в PHP.
<?php
$siteOwnersEmail = '*********************';
if ($_POST) {
$name = trim(stripslashes($_POST['contactName']));
$email = trim(stripslashes($_POST['contactEmail']));
$subject = trim(stripslashes($_POST['contactSubject']));
$contact_message = trim(stripslashes($_POST['contactMessage']));
// Check Name
if (strlen($name) < 2) {
$error['name'] = "Please enter your name.";
}
// Check Email
if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
$error['email'] = "Please enter a valid email address.";
}
// Check Message
if (strlen($contact_message) < 15) {
$error['message'] = "Please enter your message. It should have at least 15 characters.";
}
// Subject
if ($subject == '') { $subject = "Contact Form Submission"; }
// Set Message
$message = "";
$message .= "Email from: " . $name . "<br />";
$message .= "Email address: " . $email . "<br />";
$message .= "Message: <br />";
$message .= $contact_message;
$message .= "<br /> ----- <br /> This email was sent from your site's contact form. <br />";
// Set From: header
$from = $name . " <" . $email . ">";
// Email Headers
$headers = "From: " . $from . "\r\n";
$headers .= "Reply-To: ". $email . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
//Error Starts is her if im not mistaken....
if (!$error) {
ini_set("sendmail_from", $siteOwnersEmail); // for windows server
$mail = mail($siteOwnersEmail, $subject, $message, $headers);
if ($mail) { echo "OK"; }
else { echo "Something went wrong. Please try again."; }
} # end if - no validation error
else {
$response = (isset($error['name'])) ? $error['name'] . "<br /> \n" : null;
$response .= (isset($error['email'])) ? $error['email'] . "<br /> \n" : null;
$response .= (isset($error['message'])) ? $error['message'] . "<br />" : null;
echo $response;
} # end if - there was a validation error
}
?>
В верхней части вашего скрипта объявите пустой массив $error = [];
или вместо проверки (!error)
проверьте isset($error)
Вы должны присвоить значения по умолчанию для переменной $error
, например
$error = '';
Спасибо за помощь, дружище, я ценю это.
Когда вы вызываете if (!$error) {
, переменная $error
может быть не создана — она появляется только тогда, когда тест длины или тест регулярного выражения терпят неудачу.
Поскольку при создании переменная $error кажется массивом, вам следует создать пустую переменную по умолчанию. Вы также должны проверить, доступны ли другие переменные POST, прежде чем пытаться их использовать, иначе потенциально могут возникнуть подобные ошибки.
if ( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_POST['contactName'],$_POST['contactEmail'],$_POST['contactSubject'],$_POST['contactMessage'] ) ){
$error=[]; # default, empty error variable
if (strlen($name) < 2) $error['name'] = "Please enter your name.";
/* etc */
if ( empty( $error ) ) {
/* try to send email */
} else {
/* errors happened - let user know or perform other tasks */
}
}
Вы размыли переменную $siteOwnersEmail, которая находится на 3-й строке, прежде чем отправить это сообщение? если это были не вы, то вам нужно написать там адрес электронной почты отправителя, возможно