Расширить форму PHP с помощью обязательных полей и проверки
Мне нужна помощь в расширении моего скрипта PHP. Мне нужны обязательные поля и проверка для поля электронной почты в форме регистрации.
Это мой код, я пытался использовать разные коды if и echo, но в этом ничего не работает.
<?php
$email = $_POST['email'];
$from = $email;
$to = "xy@gmail.com";
$subject = "SIGN UP";
$emailbody = "";
$emailbody .= "Email: " . $email . "\n";
$header = "";
$header .= "From:" . $from . " \n";
$header .= "Content-Type:text/plain;charset=utf-8";
// Sending message
$success = mail($to, $subject, $emailbody, $header);
if ($success){
print "<meta http-equiv=\"refresh\" content=\"0;URL=confirmation_signup.html\">";
}
else{
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
}
?>
Код работает, письма доставляются, но форма не должна быть успешной, если поля не заполнены. Заранее спасибо.
3 ответа
Вы можете проверить поле электронной почты не пусто, а затем вы можете использовать filter_var
проверить предоставленную электронную почту.
Вот пример
<?php
if(!empty($_POST['email']) && (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) )
{
$email = $_POST['email'];
$from = $email;
$to = "xy@gmail.com";
$subject = "SIGN UP";
$emailbody = "";
$emailbody .= "Email: " . $email . "\n";
$header = "";
$header .= "From:" . $from . " \n";
$header .= "Content-Type:text/plain;charset=utf-8";
// Sending message
$success = mail($to, $subject, $emailbody, $header);
if ($success)
{
print "<meta http-equiv=\"refresh\" content=\"0;URL=confirmation_signup.html\">";
}
else
{
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
}
}
else print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
?>
Проблема исправлена, но появилась другая проблема. HTML-форма не отправляет письмо правильно. Я попробовал шесть почтовых адресов. Если кто-то отправляет форму, письма иногда отправляются одному - иногда другому - иногда без адреса. Я слышал о том, чтобы не использовать обычную команду mail (). Может кто-нибудь сказать мне об этом?
<?php
if(!empty($_POST['email']) && !empty($_POST['name']) && !empty($_POST['message']) && (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false)){
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = $email;
$to = "test@test.com";
$subject = "SUPPORT";
$emailbody = "";
$emailbody .= "Full name: " . $name . "\n";
$emailbody .= "Email: " . $email . "\n";
$emailbody .= "Message: " . $message . "\n";
$header = "";
$header .= "From:" . $from . " \n";
$header .= "Content-Type:text/plain;charset=utf-8";
$success = mail($to, $subject, $emailbody, $header);
if ($success){
print "<meta http-equiv=\"refresh\" content=\"0;URL=de/confirmation.html\">";
}
else{
print "<meta http-equiv=\"refresh\" content=\"0;URL=de/error.html\">";
}
}
else print "<meta http-equiv=\"refresh\" content=\"0;URL=de/error.html\">";
?>
Кажется, что электронная почта - это единственное, что вы собираете с POST, так что сначала проверьте, пусто ли оно, и проверьте его:
<?php
if(!empty($_POST['email']) && (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false)){
$email = $_POST['email'];
$from = $email;
$to = "xy@gmail.com";
$subject = "SIGN UP";
$emailbody = "";
$emailbody .= "Email: " . $email . "\n";
$header = "";
$header .= "From:" . $from . " \n";
$header .= "Content-Type:text/plain;charset=utf-8";
// Sending message
$success = mail($to, $subject, $emailbody, $header);
if ($success){
print "<meta http-equiv=\"refresh\" content=\"0;URL=confirmation_signup.html\">";
}
else{
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
}
}
else echo "email required";
?>
И до того, как он попадет на сервер, вы могли бы помочь своему пользователю, выполнив сначала некоторую проверку на стороне клиента, чтобы убедиться, что ввод является электронным письмом и является обязательным.