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