Я работал над проверкой этой формы весь день, и я почти на месте, но это еще не так. Мне сказали использовать этот пример в w3schools, и я сделал это, но это не сработало. Я возился с ним какое-то время, и теперь он действительно подтверждается, но некоторые вещи все еще испорчены. Если имеется более одной ошибки, она не отображается. Появляется только последний произошедший. Во-вторых, я хочу, чтобы он отображал ошибки по входам на странице. в настоящее время он переходит на пустую страницу и просто повторяет ошибку. Я попытался включить их в HTML-форму, но это не сработало. Я использовал следующий пример:
https://www.w3schools.com/php/showphp.asp?filename=demo_form_validation_complete
мой код выглядит следующим образом
html:
<form class = "form inline d-flex justify-content-center" action = "contact.php" method = "POST" role = "form">
<br style = "clear:both">
<div class = "col-sm-6">
<div class = "form-group">
<input type = "text" class = "control" id = "first_name" name = "first_name" placeholder = "First Name" required>
<span class = "error">* <?php echo $nameErr;?></span>
</div>
<div class = "form-group">
<input type = "text" class = "control" id = "email" name = "email" placeholder = "Email" required>
<span class = "error">* <?php echo $emailErr;?></span>
</div>
</div>
<div class = "col-sm-6">
<div class = "form-group">
<input type = "text" class = "control" id = "last_name" name = "last_name" placeholder = "Last Name" required>
<span class = "error">* <?php echo $nameErr;?></span>
</div>
<div class = "form-group">
<input type = "text" class = "control" id = "phone" name = "phone" placeholder = "Phone" required>
<span class = "error">* <?php echo $phoneErr;?></span>
</div>
</div>
<div class = "col-sm-12">
<div class = "form-group">
<textarea name = "message" class = "control" id = "message" placeholder = "What's on your mind?" rows = "3"></textarea>
</div>
<button type = "submit" id = "submit" name = "submit" class = "btn btn-primary">SEND</button>
</form>
php:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
if (empty($first_name)) {
$nameErr = "First name is required";
} else {
$first_name = check_input($first_name);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$first_name)) {
$error = "Only letters and white space allowed";
} else {
$pass += 1;
}
}
if (empty($last_name)) {
$nameErr = "Last name is required";
} else {
$last_name = check_input($last_name);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$last_name)) {
$error = "Only letters and white space allowed";
}else {
$pass += 1;
}
}
if (empty($email)) {
$emailErr = "Email is required";
} else {
$email = check_input($email);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = "Invalid email format";
}else {
$pass += 1;
}
}
if (empty($phone)) {
$phoneErr = "Phone number is required";
} else {
$phone = check_input($phone);
if (!preg_match("'^(([\+]([\d]{2,}))([0-9\.\-/\s]{5,})|([0-9\.\-/\s]{5,}))*$'",$phone)) {
$error = "Invalid Phone Number";
}else {
$pass += 1;
}
}
if (empty($message)) {
$error = "Message cannot be blank";
} else {
$message = check_input($message);
$pass += 1;
}
}
$email_from =' Client, llc';
$email_subject = 'New Message From A Guest';
$email_body = "Name: $first_name $last_name\n".
"Email: $email\n".
"Phone: $phone\n".
"Message: $message.\n";
$to = "[email protected]";
$headers = "From: $email_from \r\n";
$headers .= "Reply-To: $email \r\n";
if (!isset($error) && $pass == '5'){
mail($to,$email_subject,$email_body,$headers);
header("location: thanks.html");
} else {
echo $error;
}
// purge the session after it is displayed
unset($error);
function check_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Я не думаю, что проверка телефона работает должным образом, но я могу попробовать другой preg_match. Мне просто нужно, чтобы это работало правильно.
Я уверен, что видел этот код в другом вопросе несколько минут назад ????
$error - скаляр. Если вы хотите добавить сообщения об ошибках в $error, чтобы отображались все найденные ошибки, вам придется использовать $error = '';, затем $error .= 'first error';, затем $error .= 'second error';.
@RiggsFolly, он очень похож на Вот этот, не так ли.
Пример wwwfools, кажется, работает довольно хорошо, поэтому мы должны предположить, что вы не очень хорошо его скопировали, но я не собираюсь работать над поиском ошибок.






Вы перезаписываете значение, которое находится в $ error каждый раз, когда возникает ошибка. Вам необходимо добавить новые сообщения об ошибках к существующей ошибке. Также, если вы хотите, чтобы сообщения об ошибках появлялись рядом с входными данными, вам необходимо поместить сообщение об ошибке в соответствующие переменные ошибки.
Обновите идентификатор ошибки фамилии в вашем html:
<form class = "form inline d-flex justify-content-center" action = "contact.php" method = "POST" role = "form">
<br style = "clear:both">
<div class = "col-sm-6">
<div class = "form-group">
<input type = "text" class = "control" id = "first_name" name = "first_name" placeholder = "First Name" required>
<span class = "error">* <?php echo $nameErr;?></span>
</div>
<div class = "form-group">
<input type = "text" class = "control" id = "email" name = "email" placeholder = "Email" required>
<span class = "error">* <?php echo $emailErr;?></span>
</div>
</div>
<div class = "col-sm-6">
<div class = "form-group">
<input type = "text" class = "control" id = "last_name" name = "last_name" placeholder = "Last Name" required>
<span class = "error">* <?php echo $nameErr2;?></span>
</div>
<div class = "form-group">
<input type = "text" class = "control" id = "phone" name = "phone" placeholder = "Phone" required>
<span class = "error">* <?php echo $phoneErr;?></span>
</div>
</div>
<div class = "col-sm-12">
<div class = "form-group">
<textarea name = "message" class = "control" id = "message" placeholder = "What's on your mind?" rows = "3"></textarea>
</div>
<button type = "submit" id = "submit" name = "submit" class = "btn btn-primary">SEND</button>
</form>
Попробуйте это для своего PHP:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$error = ''; //init error to empty string
$pass = 0; // init pass to 0;
if (empty($first_name)) {
$nameErr = "First name is required";
} else {
$first_name = check_input($first_name);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$first_name)) {
$nameErr = "Only letters and white space allowed";
$error.='<p>'.$nameErr.'</p>';
} else {
$pass += 1;
}
}
if (empty($last_name)) {
$nameErr2 = "Last name is required";
} else {
$last_name = check_input($last_name);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$last_name)) {
$nameErr2 = "Only letters and white space allowed";
$error.='<p>'.$nameErr2.'</p>';
}else {
$pass += 1;
}
}
if (empty($email)) {
$emailErr = "Email is required";
} else {
$email = check_input($email);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
$error.='<p>'.$emailErr.'</p>';
}else {
$pass += 1;
}
}
if (empty($phone)) {
$phoneErr = "Phone number is required";
} else {
$phone = check_input($phone);
if (!preg_match("'^(([\+]([\d]{2,}))([0-9\.\-/\s]{5,})|([0-9\.\-/\s]{5,}))*$'",$phone)) {
$phoneErr = "Invalid Phone Number";
$error.='<p>'.$phoneErr.'</p>';
}else {
$pass += 1;
}
}
if (empty($message)) {
$msgErr = "Message cannot be blank";
$error.='<p>'.$msgErr.'</p>';
} else {
$message = check_input($message);
$pass += 1;
}
}
$email_from =' Client, llc';
$email_subject = 'New Message From A Guest';
$email_body = "Name: $first_name $last_name\n".
"Email: $email\n".
"Phone: $phone\n".
"Message: $message.\n";
$to = "[email protected]";
$headers = "From: $email_from \r\n";
$headers .= "Reply-To: $email \r\n";
if ($error == '' && $pass == '5'){
mail($to,$email_subject,$email_body,$headers);
header("location: thanks.html");
} else {
echo $error;
}
// purge the session after it is displayed
unset($error);
function check_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
ПРИМЕЧАНИЕ:
$pass += 1;работает только в том случае, если вы сначала инициализируете$passзначением ... обычно нулевым.