0

質問

基本的には、まだチャレンジを受け入れていない人にリマインダー メールを送信したいと考えています。チャレンジテーブルからチャレンジされたメールを取得し、 a_challengesテーブルからチャレンジを受け入れたメール (ユーザー名) を取得します。

問題

a_challengesテーブルにある電子メールアドレスを、チャレンジテーブルからの配列から基本的に削除したいのは、これらの人々がすでにチャレンジを受け入れているため、リマインダーメールを送信したくないからです。どんな助けでも大歓迎です。

コード

<?php
    require_once('includes/dbConnector.php');
    $dbCon = new dbConnector();//define the DB connection
    $query_challenges = "Select distinct * from challenges";//query to fetch records from challenges table like usernames who have been challenged
    //echo $query_challenges;
    $result_challenges = $dbCon->query($query_challenges);//execute query


    //start while loop to fetch the records
    while($row_tr = $dbCon->fetchArray($result_challenges)){
        $t_name = $row_tr['t_name'];
        $c_emails = $row_tr['c_emails'];
        echo "<br /><br />".$t_name."<br /><br />";

            $query_a_challenges = "Select * from a_challenges where t_name='".$t_name."'";//query to fetch records from a_challenges table like usernames who have accepted the challenge, etc
            //echo $query_a_challenges;
            $result_a_challenges = $dbCon->query($query_a_challenges);//execute query
            while($row_a_challenges = $dbCon->fetchArray($result_a_challenges)){
                echo "Accepted==> ". $row_a_challenges['full_name']." -- ";
                echo $row_a_challenges['username']."<br /><br />";
            }//end while a_challenges..

        //echo $c_emails."<br /><br />";
        $c_emails = explode(',', $c_emails);
        for($i=0; $i<count($c_emails); $i++){
            echo $c_emails[$i]."<br />";
        }//end for
    }//end while challenges..
?>

実際の出力

Team==> AGS Larger Lads

Accepted==> Donald -- donald@example.com

Accepted==> David -- david@example.com

Accepted==> Sean -- Sean@example.com

以下のアドレスに電子メールを送信します。

byrne@example.com
neil@example.com
brendan@example.com
Sean@example.com
donald@example.com
saunders@example.com
david@example.com

期待される出力

Team==> AGS Larger Lads

Accepted==> Donald -- donald@example.com

Accepted==> David -- david@example.com

Accepted==> Sean -- Sean@example.com

以下のアドレスに電子メールを送信します。

byrne@example.com
neil@example.com
brendan@example.com
saunders@example.com
4

3 に答える 3

3

PHP でこれを解決したくない場合は、データベースからのクエリでこれらの結果を制限したいと考えています。基本的に、コードは次のようになります。

select request.*, team.*  
from teams team, team_request request  
where team.name=request.team_name  
and request.accepted = false

完全なスキーマを投稿できるまで、これはもちろん憶測です。

于 2013-05-28T11:59:05.273 に答える
2

最も簡単なのは、文字列から電子メール アドレスを削除しないことです。それを配列に分解する前に (データベースに電子メール アドレスを保存するひどい方法です)

とにかく、私は $row_teams['username'] がここでメールアドレスであると仮定しました。コードでそれを行う最も簡単な方法だと思います:

    while($row_tr = $dbCon->fetchArray($result_team_request)){
        $t_name = $row_tr['t_name'];
        $c_emails = $row_tr['c_emails'];
        echo "<br /><br />".$t_name."<br /><br />";


            $query_teams = "Select * from teams where t_name='".$t_name."'";//query to fetch records from teams table like usernames who have accepted the challenge, etc
            //echo $query_teams;
            $result_teams = $dbCon->query($query_teams);//execute query
            while($row_teams = $dbCon->fetchArray($result_teams)){
                echo "Accepted==> ". $row_teams['full_name']." -- ";
                echo $row_teams['username']."<br /><br />";

                //my new code line:
            $c_emails = str_replace($row_teams['username'],'',$c_emails);
            }//end while teams..
            $c_emails = explode(',', $c_emails); 

        //echo $c_emails."<br /><br />";

        for($i=0; $i<count($c_emails); $i++){
            echo $c_emails[$i]."<br />";
        }//end for
    }//end while team_request..
于 2013-05-28T12:06:46.313 に答える