Я не могу отправить сообщение с помощью.php.
Как ни странно, я тестировал и мог отправлять сообщения в прошлом, но по какой-то причине я теперь получаю сообщение "* Поле" Сообщение "должно содержать только буквы, цифры, пробелы и базовую пунктуацию (" -,.)), Имеет предел из 1000 символов и не должно оставаться пустым. ".
Я знаю, что это сообщение gerneaed из-за конфликта в форме сообщения и.php, но у вас нет навыков исправления.
Я создал веб-сайт некоторое время назад, используя те же формы контакта и.php, и это тоже имеет ту же проблему.
Пожалуйста, порекомендуйте:
<?php
$your_email = "[email protected]"; // email address to which the form data will be sent
$subject = "Subject Here"; // subject of the email that is sent
$thanks_page = "/thankyou/"; // path to the thank you page following successful form submission
$contact_page = "http://test.com/contact/index.html"; // path to the HTML contact page where the form appears
if (!isset($_POST['submit'])) {
header( "Location: $contact_page" );
}
if (isset($_POST["submit"])) {
$nam = $_POST["name"];
$ema = trim($_POST["email"]);
$mes = $_POST["message"];
$spa = $_POST["spam"];
if (get_magic_quotes_gpc()) {
$nam = stripslashes($nam);
$ema = stripslashes($ema);
$mes = stripslashes($mes);
}
$error_msg=array();
if (empty($nam) || !preg_match("~^[a-z\-'\s]{1,60}$~i", $nam)) {
$error_msg[] = "<br/>* The name field must contain only letters, spaces, dashes ( - ) and single quotes ( ' ).\n<br />\n<br />";
}
if (empty($ema) || !filter_var($ema, FILTER_VALIDATE_EMAIL)) {
$error_msg[] = "<br/>* Your email must have a valid format, such as [email protected]\n<br />\n<br />";
}
$limit = 1000;
if (empty($mes) || !preg_match("/^[0-9A-Za-z\/-\s'\(\)!\?\.,]+$/", $mes) || (strlen($mes) > $limit)) {
$error_msg[] = "<br/>* The Message field must contain only letters, digits, spaces and basic punctuation ( ' - , . ), has a limit of 1000 characters & should not be left empty.\n<br />\n<br />";
}
if (!empty($spa) && !($spa == "4" || $spa == "four")) {
echo "* You failed the spam test! Please go back and try again.\n<br />\n<br />";
exit ();
}
if ($error_msg) {
echo '<!--CONTACT--->
<!DOCTYPE html>
<!--[if lt IE 7]><html lang="en-US" class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]-->
<!--[if IE 7]><html lang="en-US" class="no-js lt-ie9 lt-ie8"><![endif]-->
<!--[if IE 8]><html lang="en-US" class="no-js lt-ie9"><![endif]-->
<!--[if gt IE 8]><!--><html lang="en-US" class="js"><!--<![endif]-->
<head>
</head>
<body>
</body>
</html>';
exit();
}
$email_body =
"Name of Sender: $nam\n\n" .
"Email: $ema\n\n" .
"Message:\n\n" .
"$mes" ;
if (isset($_REQUEST['message']) && !$error_msg) {
mail ($your_email, $subject, $email_body, "From: $nam <$ema>" . "\r\n" . "Reply-To: $nam <$ema>");
header ("Location: $thanks_page");
exit();
}
}
Пример неправильной работы контактной формы можно проверить здесь - http://mickscaricatures.co.uk/contact.html
Есть ли какая-либо дополнительная информация, которую я могу предоставить, чтобы помочь решить эту ситуацию?
Вам не хватает побега в вашем регулярном выражении для параметра $ mes:
[..snip..]\/-\s[..snip..]
^---
Поскольку это -
не ускользнуло, оно рассматривалось как any chars from slash to space
.
[az]
- это «все символы междуa
иz
.[a\-z]
is» должно быть либоa
, тире, либоz
». Как я уже сказал, указанная тире не экранирована.