嗨:)这是我第一次在这里发帖,但我无法弄清楚它应该很简单。我想我已经看了太久了。所以我有一个表单,我正在进行表单验证,所有验证工作都会发送到数据库。
我遇到的一个小问题是,当涉及到电子邮件并确认电子邮件验证时,第一个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']);}
答案 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))