-2

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

}
?>

谢谢!!

4

3 回答 3

1

您当前正在使用以下结构:

if (condition) {

}
if (condition) {

}
else (condition) {

}

将结构更改为:

if (condition) {

}
elseif (condition) {

}
else (condition) {

}

这样,elseif只有当第一个 if 语句的计算结果为 时,该语句才会被执行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))

希望这可以帮助!

于 2013-08-29T12:33:48.493 回答
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。

于 2013-08-29T12:34:27.077 回答
-1

只需更换

if (!preg_match(

elseif (!preg_match(

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

于 2013-08-29T12:33:00.360 回答