У меня возникли трудности с моим кодом php, который проверяет форму на самой странице перед отправкой на мой адрес электронной почты.PHP preg_match Проверка формы
Это мой PHP, который находится выше DOCTYPE HTML
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$subjectTitle = $_POST['subjectTitle'];
$comment = $_POST['comment'];
$errormsg = "Invalid Entry";
$validmsg = "Thank you for your message";
if($_POST['submit']) {
if(empty($_POST['name'])) {
$nameError = true;
}
if(empty($_POST['email'])) {
$emailError = true;
}
if(empty($_POST['subjectTitle'])) {
$subjectError = true;
}
if(empty($_POST['comment'])) {
$commentError = true;
}
else if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['subjectTitle']) || empty($_POST['comment'])) {
$error = true;
}
else {
$to = "EMAIL_ADD_GOES_HERE";
$name = trim($_POST['name']);
$email = trim($_POST['email']);
$subjectTitle = trim($_POST['subjectTitle']);
$comment = trim($_POST['comment']);
$subject = "Contact Form Enquiry";
$messages = "\r\n Name: $name \r\n Email: $email \r\n Subject: $subjectTitle \r\n Comments: $comment";
$headers = "From:" . $name;
$mailsent = mail($to, $subject, $messages, $headers);
if($mailsent) {
$sent = true;
$name = "";
$email = "";
$subjectTitle = "";
$comment = "";
}
}
}
?>
и для моего HTML, для облегчения просмотра, я просто положить в виде части.
<html>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
Name: <input type="text" name="name" id="name" value="<?php echo $name; ?>">
<?php if($nameError == true) {echo $errormsg;} ?>
Email: <input type="text" name="email" id="email" value="<?php echo $email; ?>">
<?php if($emailError == true) {echo $errormsg;} ?>
Subject: <input type="text" name="subjectTitle" id="subjectTitle" value="<?php echo $subjectTitle; ?>">
<?php if($subjectError == true) {echo $errormsg;} ?>
Comments: <textarea name="comment" id="comment"><?php echo $comment; ?></textarea>
<?php if($commentError == true) {echo $errormsg;} ?>
</form>
</html>
В моем html нет другого PHP-кода, кроме указанного выше.
Эта валидация работает только в том случае, если любое поле остается пустым. Он выведет сообщение об ошибке в самой странице и НЕ отправит электронное письмо, и именно так оно должно работать.
Однако я столкнулся с какой-то странной проблемой, которая, похоже, не может найти причину/теория/логика. Если и посмотреть на код PHP, если у меня не было, что еще, если заявление
else if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['subjectTitle']) || empty($_POST['comment'])) {
$error = true;
}
проверка не удается, и все равно будет отправлять по электронной почте, когда ключи пользователя в текстовое поле. Например, если пользователь не заполняет имя, адрес электронной почты и тему, а только комментарии, он все равно будет отправлен. Однако, как только я поставлю этот оператор else if, он исправляет проблему.
Но главной проблемой является preg_match. Я хочу, чтобы поля имени допускали только пробел и буквы, и я хочу, чтобы поле электронной почты разрешало отправлять только электронные письма. Поэтому, когда я пытался поставить этот код в,
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameError = true;
}
или расчесывать его с чеком имя пустое поле
if (empty($_POST['name']) || (!preg_match("/^[a-zA-Z ]*$/",$name))) {
$nameError = true;
}
не проверяет правильность. Он делает то, что, когда пользователь вводит номер в поле имени, а также заполняет все остальное, он отображает сообщение об ошибке, а также сообщение благодарности и отправляет его по электронной почте, что не так, как должно работать.
Могу ли я получить руководство по устранению проблемы? Я ошибаюсь в своем кодировании, а также мне хотелось бы знать, почему это другое утверждение if, которое у меня есть в php, не имеет смысла, но мне нужно, чтобы получить правильную проверку.
Большое спасибо за чтение, застряли на этом в течение последних 6 дней, и я действительно не знаю, как это исправить. Пожалуйста, помогите мне.
Приветствия
Будьте последовательны. Если вы назначаете '$ name = $ _POST ['name']', тогда используйте '$ name' в остальной части кода - запутанно продолжать использовать' $ _POST'. – Barmar
Установка '$ nameError' ничего не делает, остальная часть кода никогда не проверяет его. – Barmar