У меня возникают трудности с моей формой, которая не работает должным образом. Эффективно, когда я нажимаю кнопку "Отправить", он отправит электронное письмо, даже когда я (думаю) установил проверку, чтобы остановить его от отправки, пока все соответствующие поля не будут завершены.
<?php
$page_title = "EcoPiggy: PHP Contact Us- Testing";
// define variables and set to empty values
$firstName = $lastName = $email = $telephone = $message = $marketingConsent = $copyEmail = "";
$firstNameErr = $lastNameErr = $emailErr = $telephoneErr = $messageErr = "";
if (isset($_POST['signup'])) {
if (!empty($_POST['tracey'])) {
die;
}
$marketingConsent = ($_POST["marketingConsent"]);
$copyEmail = ($_POST["copyEmail"]);
if (empty($_POST["firstName"])) {
$firstNameErr = "* First Name is required";
} else {
$firstName = test_input($_POST["firstName"]);
if (!preg_match("/^[a-zA-Z0-9 ]*$/", $firstName)) {
$firstNameErr = "* Only letters and white space allowed";
}
$min = 3;
if (strlen($firstName) < $min) {
$firstNameErr = "Validation failed: Too Small minimum 3 characters";
}
$max = 45;
if (strlen($firstName) > $max) {
$firstNameErr = "Validation failed: Too Large maximum 45 characters";
}
}
if (empty($_POST["lastName"])) {
$lastNameErr = "* Last Name is required";
} else {
$lastName = test_input($_POST["lastName"]);
if (!preg_match("/^[a-zA-Z0-9 ]*$/", $lastName)) {
$lastNameErr = "* Only letters and white space allowed";
}
$min = 3;
if (strlen($lastName) < $min) {
$lastNameErr = "Validation failed: Too Small minimum 3 characters";
}
$max = 45;
if (strlen($lastName) > $max) {
$lastNameErr = "Validation failed: Too Large maximum 45 characters";
}
}
if (empty($_POST["email"])) {
$emailErr = "* email address is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "* Invalid email format";
}
$min = 6;
if (strlen($email) < $min) {
$emailErr = "Validation failed: Too Small minimum 6 characters";
}
$max = 60;
if (strlen($email) > $max) {
$emailErr = "Validation failed: Too Large maximum 60 characters";
}
}
if (empty($_POST["telephone"])) {
$telephoneErr = "* Please enter your telephone number";
} else {
$telephone = test_input($_POST["telephone"]);
if (!preg_match("/^[1-9][0-9]{6-13}*$/", $telephone)) {
$telephoneErr = "* Only numbers and white space allowed";
}
$min = 6;
if (strlen($telephone) < $min) {
$lastNameErr = "Validation failed: Too Small minimum 6 characters";
}
$max = 13;
if (strlen($telephone) > $max) {
$telephoneErr = "Validation failed: Too Large maximum 13 characters";
}
}
if (empty($_POST["message"])) {
$messageErr = "* Your message is required";
} else {
$message = test_input($_POST["message"]);
$min = 3;
if (strlen($message) < $min) {
$messageErr = "Validation failed: Too Small minimum 3 characters";
}
$max = 1000;
if (strlen($message) > $max) {
$messageErr = "Validation failed: Too Large maximum 45 characters";
}
}
if ($marketingConsent == 0) {
$marketingConsent = "Thank you for trusting us to contact periodically with 3rd party promotions";
} else {
$marketingConsent = "I do not want the information to be used by anybody for direct marketing purposes";
}
$create_email = '<ul>';
$create_email .='<li>First Name: ' . $firstName . '</li>';
$create_email .='<li>Last Name: ' . $lastName . '</li>';
$create_email .='<li>Telephone Number: ' . $telephone . '</li>';
$create_email .='<li>Email address: ' . $email . '</li>';
$create_email .='<li>Your message: ' . $message . '</li>';
$create_email .='<li>Marketing consent: ' . $marketingConsent . '</li>';
$create_email .='<li>Cc: ' . $copyEmail . '</li>';
$create_email .= '</ul>';
$header1 = "From: [email protected] \r\n";
$header1 .= "Reply-To: {$email} \r\n";
if ($copyEmail == 1) {
$header1 .= "Cc: {$email}\r\n";
} else {
$header1 .= "";
}
$header1 .= "MIME-Version: 1.0" . "\r\n";
$header1 .= "Content-Type: text/html; charset=ISO-8859-1";
$to = "[email protected]";
$subject = 'Ecopiggy - Contact-Us' . strftime("%T", time());
$message = $create_email;
$headers = $header1;
$result = mail($to, $subject, $message, $headers);
if (isset($result)) {
redirect_to("thankyou.php");
} else {
redirect_to("contact-us.php");
}
}
?>
Может ли кто-нибудь помочь в том, что эта проверка не так?
Большое спасибо,
Как.
Проблема в том, что, даже если вы проверяете свои входы формы, вы не проверяете, существует ли какая-либо ошибка или нет, прежде чем конструировать почту, то есть, являются ли $firstNameErr
, $lastNameErr
и т.д. $lastNameErr
или нет.
if(empty($firstNameErr) && empty($lastNameErr) && empty($emailErr) && empty($telephoneErr) && empty($messageErr)){
// construct the mail and send it
}else{
// display error messages
}
Таким образом, ваш существующий код должен выглядеть следующим образом:
<?php
$page_title = "EcoPiggy: PHP Contact Us- Testing";
// define variables and set to empty values
$firstName = $lastName = $email = $telephone = $message = $marketingConsent = $copyEmail = "";
$firstNameErr = $lastNameErr = $emailErr = $telephoneErr = $messageErr = "";
if (isset($_POST['signup'])) {
if (!empty($_POST['tracey'])) {
die;
}
$marketingConsent = ($_POST["marketingConsent"]);
$copyEmail = ($_POST["copyEmail"]);
if(empty($_POST["firstName"])) {
$firstNameErr = "* First Name is required";
} else {
$firstName = test_input($_POST["firstName"]);
if (!preg_match("/^[a-zA-Z0-9 ]*$/",$firstName)) {
$firstNameErr = "* Only letters and white space allowed";
}
$min=3;
if(strlen($firstName) < $min) {
$firstNameErr = "Validation failed: Too Small minimum 3 characters";
}
$max=45;
if(strlen($firstName) > $max) {
$firstNameErr = "Validation failed: Too Large maximum 45 characters";
}
}
if(empty($_POST["lastName"])) {
$lastNameErr = "* Last Name is required";
} else {
$lastName = test_input($_POST["lastName"]);
if (!preg_match("/^[a-zA-Z0-9 ]*$/",$lastName)) {
$lastNameErr = "* Only letters and white space allowed";
}
$min=3;
if(strlen($lastName) < $min) {
$lastNameErr = "Validation failed: Too Small minimum 3 characters";
}
$max=45;
if(strlen($lastName) > $max) {
$lastNameErr = "Validation failed: Too Large maximum 45 characters";
}
}
if(empty($_POST["email"])) {
$emailErr = "* email address is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "* Invalid email format";
echo $emailErr;
}
$min=6;
if(strlen($email) < $min) {
$emailErr = "Validation failed: Too Small minimum 6 characters";
}
$max=60;
if(strlen($email) > $max) {
$emailErr = "Validation failed: Too Large maximum 60 characters";
}
}
if(empty($_POST["telephone"])) {
$telephoneErr = "* Please enter your telephone number";
} else {
$telephone = test_input($_POST["telephone"]);
if (!preg_match("/^[1-9][0-9]{6-13}*$/",$telephone)) {
$telephoneErr = "* Only numbers and white space allowed";
}
$min=6;
if(strlen($telephone) < $min) {
$lastNameErr = "Validation failed: Too Small minimum 6 characters";
}
$max=13;
if(strlen($telephone) > $max) {
$telephoneErr = "Validation failed: Too Large maximum 13 characters";
}
}
if(empty($_POST["message"])) {
$messageErr = "* Your message is required";
} else {
$message = test_input($_POST["message"]);
$min=3;
if(strlen($message) < $min) {
$messageErr = "Validation failed: Too Small minimum 3 characters";
}
$max=1000;
if(strlen($message) > $max) {
$messageErr = "Validation failed: Too Large maximum 45 characters";
}
}
if($marketingConsent == 0) {
$marketingConsent = "Thank you for trusting us to contact periodically with 3rd party promotions";
} else {
$marketingConsent = "I do not want the information to be used by anybody for direct marketing purposes";
}
if(empty($firstNameErr) && empty($lastNameErr) && empty($emailErr) && empty($telephoneErr) && empty($messageErr)){
$create_email = '<ul>';
$create_email .='<li>First Name: '.$firstName.'</li>';
$create_email .='<li>Last Name: '.$lastName.'</li>';
$create_email .='<li>Telephone Number: '.$telephone.'</li>';
$create_email .='<li>Email address: '.$email.'</li>';
$create_email .='<li>Your message: '.$message.'</li>';
$create_email .='<li>Marketing consent: '.$marketingConsent.'</li>';
$create_email .='<li>Cc: '.$copyEmail.'</li>';
$create_email .= '</ul>';
echo $create_email;
$header1 = "From: [email protected] \r\n";
$header1 .= "Reply-To: {$email} \r\n";
if ($copyEmail == 1) {
$header1 .= "Cc: {$email}\r\n";
} else {
$header1 .= "";
}
$header1 .= "MIME-Version: 1.0" ."\r\n";
$header1 .= "Content-Type: text/html; charset=ISO-8859-1";
$to = "[email protected]";
$subject = 'Ecopiggy - Contact-Us' .strftime("%T", time());
$message = $create_email;
$headers = $header1;
$result = mail($to, $subject, $message, $headers);
if (isset($result)) {
redirect_to("thankyou.php");
} else {
redirect_to("contact-us.php");
}
}else{
// display errors
}
}
?>
Ваш скрипт очищает все переменные, а затем проверяет переменные $ _POST. Однако, когда проверка затем передается, вы не устанавливаете новое значение - если только нет функции test_input, которую вы не указали выше:
$telephone = test_input($_POST["telephone"]);
Итак, в верхней части страницы, которую вы установили
$telephone = '';
Затем вы проверяете,
$_POST['telephone'];
действительно, и если вы установили $ phone на значение, которое не имеет способа разрешения. Затем в вашем письме вы пытаетесь отправить $ phone, но это значение по-прежнему равно нулю.
Вы выполняете проверку на стороне браузера, и для этого лучше всего подходит javascript. http://www.w3schools.com/js/js_validation.asp это ссылка, где вы можете найти подтверждение.
и, как вы уже упоминаете, вы используете HYML5, поэтому просто добавьте " обязательный " в свой тег, поэтому это означает, что это поле является обязательным. Существуют другие предопределенные проверки доступны в HTML5
&&
так,if (!empty(trim($_POST['myKey'])) && !empty(trim($_POST['anotherKey'])))
.