php
  • mysql
  • 2012-02-17 11 views 2 likes 
    2

    私はコメントシステムを作成しています。新しいコメントが来たら、私はそれらをメールします。PHP if文が正しく動作しないのはなぜですか?

    私はemail_notificationsという名前のテーブルをphpMyAdminで作成しました。

    問題は、このコードを使用することです:

    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!'); 
    } 
    

    そのテーブルにあるように、同じ電子メールの1以上を防ぐために仮定されていること。 そして今、mysql_num_rowsは7行があると言っています。

    そうなステートメントは今言う:

    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

    だけ注意を:代わりに書き込みのあなたは、むしろ書くべき「_I PHPのための 'if'を書いていないです「_PHPはcorrectly_があれば、私は読んでいません」正しく " PHPは予測可能であり、むしろ成熟しています。プログラミング言語を非難するのではなく、この条件を正しく記述しているかどうか、疑問を投げかけてください。 – Tadeck

    +0

    しかし、条件は私には正しいように見えます。 – Shawn31313

    +0

    あなたはMySql/PHPに慣れていないことを認めているかもしれませんが、この種のバグが出てきて、ずっと前に解決されました!また、MySql Count関数を見てください。これはこれを修正する可能性があります。 –

    答えて

    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(電子メール) 。 –

    +0

    Max、テーブルに同じメールを複数追加しています:/ – Shawn31313

    +1

    'echo $ numberOfRows'の出力から何を得ていますか? –

    6

    ALTER TABLE email_notifications ADD UNIQUE email (email) 
    

    は再び重複を心配する必要はありません。

    +0

    私は、PHPとMySQLに新しいことを言及して忘れてしまった。だから私はそのアルターテーブルのことで何をしていますか?単にmysql_queryに追加しますか? – Shawn31313

    +0

    これを一度実行します(たとえば、phpMyAdminなど)。重複したレコードがあると言うと、おそらく失敗するでしょう。手動で重複を削除するか、テーブルを 'TRUNCATE'してやり直してください。 –

    +1

    いいえ、あなたはそれをMySQLコンソールから行う必要があります。これは、実行する必要がある1つのことです。 –

    関連する問題