2012-02-17 151 views
2

我正在创建评论系统,当有新评论发布时,我会通过电子邮件发送给他们。为什么我的PHP if语句不能正常工作?

我在phpMyAdmin中创建了一个名为email_notifications的表。

问题是与此代码:

if(mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error())) <= 1) { 
    mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')"); 
    echo mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'")); 
} 
else{ 
    die('EMAIL!'); 
} 

这是假设,以防止相同的电子邮件超过一个要在该表中。 而现在mysql_num_rows说有7行。

所以statment现在说:

if(7 <= 1) { 
    mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')"); 
    echo mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'")); 
} 
else{ 
    die('Can\'t post this email! Sorry.'); 
} 

的问题是,它仍然插入电子邮件地址表中,但它不应该。它应该是返回不能发布此电子邮件!抱歉。

这是可能的,我遇到最奇怪的问题,我不能提前弄明白:(

请帮忙,谢谢。

+5

只是注意:不是写作“_PHP不读书我如果correctly_”你应该写,而“_I我不写'if'为PHP correctly_”。没有冒犯性,PHP是可预测的并且相当成熟 - 你应该问一个问题,你是否正确地写了这个条件而不是指责编程语言。 – Tadeck 2012-02-17 00:47:06

+0

但是这种情况对我来说看起来是正确的。 – Shawn31313 2012-02-17 00:52:26

+0

这可能是,但正如你承认的,你对MySql/PHP没有经验,这种错误很快就会出现并解决!另外,看看MySql计数功能;它可能会解决这个问题。 – 2012-02-17 00:55:48

回答

6

显然,的mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error())值不等于7,并且是叔因此,小于或等于1.这就是为什么你的if语句没有按预期运行的原因。

另外,请格式化你的代码好一点:

$query = mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error()); 

$numberOfRows = mysql_num_rows($query); 

echo $numberOfRows; //check the number of rows. 

if($numberOfRows <= 1) { 
    mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')"); 
    $query_ = mysql_query("SELECT * FROM email_notifications WHERE email='$email'"); 
    var_dump(mysql_num_rows($query_)); 
} 
else{ 
    die('EMAIL!'); 
} 
+3

我会改变整个事情来使用SELECT COUNT(*)或SELECT COUNT(email)来减少一次性网络流量。 – 2012-02-17 00:53:39

+0

Max,它仍然向表中添加了多个相同的电子邮件:/ – Shawn31313 2012-02-17 01:08:43

+1

你从echo $ numberOfRows输出得到了什么? – 2012-02-17 01:13:02

6

出了什么问题只是增加一个关键?

ALTER TABLE email_notifications ADD UNIQUE email (email) 

永远不必再担心重复。

+0

我忘了提及,即时通讯新的PHP和MySQL。那么我该如何处理Alter表格呢?只需将它添加到mysql_query中? – Shawn31313 2012-02-17 00:51:15

+0

运行一次(例如在phpMyAdmin中)。它可能会失败,说有重复的记录。要么手动删除任何重复项,要么“TRUNCATE”表重新开始。 – 2012-02-17 00:52:17

+1

不,不需要,您需要从MySQL控制台执行此操作,这是一件需要完成的事情。 – 2012-02-17 00:52:31