Расширьте форму PHP с обязательными полями и проверкой

Мне нужна помощь в расширении моего PHP-скрипта. Мне нужны обязательные поля и проверка поля электронной почты в форме регистрации.

Это мой код, я пытался использовать разные коды if и echo, но в этом ничего не работает.

<?php

$email = $_POST['email'];
$from = $email;

$to = "[email protected]";
$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\">";
}
?>

Код работает, электронные письма доставляются, но форма не должна работать, если поля не заполнены. Заранее спасибо.


person Dietrich Möller    schedule 15.04.2016    source источник
comment
Помогает ли вам мой ответ?   -  person Hassaan    schedule 15.04.2016


Ответы (3)


Вы можете проверить, что поле электронной почты не пусто, а затем вы можете использовать filter_var для проверки предоставленного адреса электронной почты.

Вот пример

<?php
if(!empty($_POST['email']) && (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) )
{
    $email = $_POST['email'];
    $from = $email;

    $to = "[email protected]";
    $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\">";
?>
person Hassaan    schedule 15.04.2016
comment
Это сработало для меня! Благодарю вас! Но у меня есть другая проблема - может быть, у вас тоже есть решение... - person Dietrich Möller; 19.04.2016
comment
@DietrichMöller Что это? - person Hassaan; 19.04.2016

похоже, что электронная почта — это единственное, что вы собираете с помощью POST, поэтому просто проверьте, сначала очистить и подтвердить его:

<?php

if(!empty($_POST['email']) && (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false)){

  $email = $_POST['email'];
  $from = $email;

  $to = "[email protected]";
  $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";
?>

И прежде чем он попадет на сервер, вы можете помочь своему пользователю, выполнив сначала некоторую проверку на стороне клиента, чтобы убедиться, что введите адрес электронной почты, и требуется.

person Jeff Puckett    schedule 15.04.2016

Проблема устранена, но появилась другая проблема. 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 = "[email protected]";
$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\">";
?>
person Dietrich Möller    schedule 19.04.2016