2012-02-17 114 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

相關問題