php表单验证和错误消息

时间:2013-08-29 12:30:12

标签: php forms

我正在设置此简报订阅表单以与我的数据库进行通信,但在发送信息(电子邮件)之前,我只想验证它。但是,当我输入错误或空数据时,它会显示两条错误消息。我不是PHP的专家,但似乎我错过了一些结束括号或者什么......我已经摆弄了一段时间没有成功,所以我再次向你们求助:)

<?php
$host = "XXX";
$username = "name";
$password = "XXX";
$database = "base";
$connect = @mysql_connect($host, $username, $password) or die (@mysql_error());
$selectdb = @mysql_select_db($database, $connect) or die (@mysql_error());


if(isset($_POST['submit'])){
$email = $_POST['email'];
if(empty($email)){
    echo "Hmm, you did not anything..";
    }
    if (!preg_match(
    "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
    $email_address))
    {
    echo "This email not valid";
    }
    else{
    @mysql_query("INSERT INTO newsletters SET email='$email'");
    echo "Thanks you";
}

}
?>

谢谢!

3 个答案:

答案 0 :(得分:1)

您目前使用以下结构:

if (condition) {

}
if (condition) {

}
else (condition) {

}

将结构更改为:

if (condition) {

}
elseif (condition) {

}
else (condition) {

}

这样,只有当第一个if语句的计算结果为elseif时,才会执行FALSE语句。

此外,在preg_match语句中,您使用的变量$email_address在任何地方都没有定义,就我所见。

将其更改为$email

if (!preg_match(
    "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
    $email))

希望这有帮助!

答案 1 :(得分:0)

如何以这种方式使用它(没有检查RegEx):

if(empty($email)){
    echo "Hmm, you did not anything..";
}
else{
    if (!preg_match(
    "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
    $email_address)){
         echo "This email not valid";
    }
    else{
         @mysql_query("INSERT INTO newsletters SET email='$email'");
         echo "Thanks you";
    }
}

这样它首先会检查是否插入了电子邮件,只有当这是真的时,正则表达式会检查它。如果已准备好,则将查询发送到mysql。

答案 2 :(得分:-1)

只需替换

if (!preg_match(

elseif (!preg_match(

然后只显示其中一个错误,并且当$ email不为空时首先运行preg_match。