我正在使用“If..elseif..else”语句。电邮验证

时间:2014-02-04 15:53:44

标签: php

嗨:)这是我第一次在这里发帖,但我无法弄清楚它应该很简单。我想我已经看了太久了。所以我有一个表单,我正在进行表单验证,所有验证工作都会发送到数据库。

我遇到的一个小问题是,当涉及到电子邮件并确认电子邮件验证时,第一个if语句检查文本框是否为空,如果是,我应该收到“需要电子邮件”消息。但由于第二个if语句,我认为$ emailErr变量被第二条错误消息覆盖,该错误消息只有在电子邮件语法无效时才会出现。

因此,如果我将文本框留空,我仍然会收到“语法无效”消息,而不是“需要电子邮件”消息。

我的困惑来自这样的事实,例如,我的“名字”验证(和所有其他验证)几乎是相同的想法,但它们不会被第二个错误消息覆盖,这也是通过使用第二个错误消息if statement。

我将复制我的名字验证代码和我的电子邮件验证代码,以便您了解我在说什么。任何帮助将不胜感激。如果没有,我肯定最终会弄清楚:)谢谢!

FIRST NAME VALIDATION - 如果我将文本框留空,我会收到错误消息“需要名字” - 这是正确的。

//Check if the firstname textbox is empty
  if (empty($_POST['fname']))
//Show error message
{
$fnameErr = "First name is required";
}
//Check if fname is set
elseif (isset($_POST['fname']))
//Check the text using the test_input function and assign it to $fname
{$fname = test_input($_POST['fname']);}
//Check if first name contains letters and whitespace
  if (!preg_match("/^[a-zA-Z ]*$/",$fname))
 //Show error message & unset the fname variable
  {
  $fnameErr = "Only letters and white space allowed";
  unset($_POST['fname']);
  } 
  else  
  //Check the text using the test_input function and assign it to $fname
  {$fname = test_input($_POST['fname']);}

电子邮件验证 - 如果我将文本框留空,我会收到错误消息“无效的电子邮件格式” - 它应该是“需要电子邮件” - 这是为什么?

//Check if the email textbox is empty
if (empty($_POST['email']))
//Show error message
{
$emailErr = "Email is required";
}
//Check if email is set
elseif (isset($_POST['email']))
//Check the text using the test_input function and assign it to $email
{$email = test_input($_POST['email']);}
//Check if e-mail syntax is valid
  if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
  //Show error message & unset the email variable
  {
  $emailErr = "Invalid email format";
  unset($_POST['email']);
  }
  else
  //Check the text using the test_input function
  {$email = test_input($_POST['email']);}

3 个答案:

答案 0 :(得分:3)

验证电子邮件的正确方法是使用filter_var

$email = filter_var(filter_var($_POST['email'],FILTER_SANITIZE_EMAIL),FILTER_VALIDATE_EMAIL)

if(!$email) 
    $invalidemailMessage = 'You have entered an invalid email address!';

故事结束。

如果你真的,真的,真的需要输出“需要电子邮件”:

if($_POST['email'] == "" || preg_match('/^\s+$/', $_POST['email']) == true) { 
    $invalidemailMessage = 'Email required.';
} else {
    $email = filter_var(filter_var($_POST['email'],FILTER_SANITIZE_EMAIL),FILTER_VALIDATE_EMAIL)
    if(!$email) 
        $invalidemailMessage = 'You have entered an invalid email address!';
}

答案 1 :(得分:0)

对你当前的代码进行一些调整,你可以保留它,尽管@tftd说的绝对正确的关于消毒和验证

$error = array();

if (empty($_POST['email'])) {
    $error[__LINE__] = "Email is required";
} elseif (isset($_POST['email'])) {
    $email = test_input($_POST['email']);
}

if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {
    $error[__LINE__] =  "Invalid email format";
    unset($_POST['email']);
} else {
    $email = test_input($_POST['email']);
}

if ($error){
    print_r($error);
}

答案 2 :(得分:0)

你的代码问题的一部分是你的最后一个如果仍然在运行,所以如果电子邮件字段为空,你总是会收到错误。

更改此

if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))

到此

if (isset($email) && !preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))