php表单验证和错误消息

php表单验证和错误消息,php,forms,Php,Forms,我正在设置此新闻稿订阅表单以与我的数据库通信,但在发送信息电子邮件之前,我只想验证它。但是,当我输入错误或空数据时,它会显示两条错误消息。我不是PHP方面的专家,但似乎缺少了一些结束括号之类的东西。。我已经摆弄了一段时间,但没有成功,所以我再次向你们寻求帮助: <?php $host = "XXX"; $username = "name"; $password = "XXX"; $database = "base"; $connect = @mysql_connect($host, $us

我正在设置此新闻稿订阅表单以与我的数据库通信,但在发送信息电子邮件之前,我只想验证它。但是,当我输入错误或空数据时,它会显示两条错误消息。我不是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";
}

}
?>
谢谢

只要更换

if (!preg_match(


然后仅显示其中一个错误,并且当$email不为空时,将首先运行preg_匹配。

您当前使用的是以下结构:

if (condition) {

}
if (condition) {

}
else (condition) {

}
将结构更改为:

if (condition) {

}
elseif (condition) {

}
else (condition) {

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

另外,在preg_match语句中,您使用的变量$email_address在任何地方都没有定义,据我所知

将其更改为$email:


希望这有帮助

这样使用怎么样?没有检查正则表达式:

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。

您在preg\u match中写入了$email\u地址。替换为$email并将preg_match条件从ifempty$email中删除。您应该停止使用mysql_*函数。它们不推荐使用,而是使用mysqli_*或PDO。
if (!preg_match(
    "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
    $email))
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";
    }
}