0

私は php/mysql の専門家ではありませんが、通常はいくつかの調査と試行で作業を進めることができますが、これは思い通りに動作しないようです...

クラシファイド Web サイトを運営しており、cron ジョブ (実行できる cron ジョブ) をセットアップし、広告が 30 日間投稿されたユーザーにリマインダー メールを送信する予定です。date_sub と curdate を使用して、うまく機能する日付を取得しました。私のクエリは、広告が 30 日前のデータベースから、メールで使用するすべてのテーブルを取得します。

投稿者の名前、電子メール、および HTML メッセージを含む電子メールを送信できますが、クエリの最初の電子メール アドレスにのみ送信されます。ループの問題だと思いますか?しかし、私はそれを理解できないようです。

私のスクリプトは以下に掲載されています - 私はこれについての専門家ではないと言ったので、乱雑で申し訳ありませんが、表示される最初の広告にのみ送信されることを除いて、ほぼ希望どおりに機能しました.

SQL クエリのほとんどすべてのテーブル名には、html メッセージで使用する予定のデータが含まれています。

    <?php
        header("Content-type: text/plain");

    // OPEN DATABASE
        define('DB_HOST','localhost');
        define('DB_USER','');
        define('DB_PASS','');
        define('DB_NAME','');

        mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Connetion to database failed!");
        mysql_select_db(DB_NAME); 

        joinDateFilter();

    // WHOSE AD IS 30 DAYS OLD
        function joinDateFilter(){
            $query = mysql_query("SELECT name,title,email,idPost,password FROM oc_posts WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) = CAST(insertDate AS date)");
            $mail_to = "$email";
            while ($row = mysql_fetch_array($result)){
                echo $row['name']." - ".$row['title']." - ".$row['email']."\n";
                echo $mail_to = $row['email'].", ";
                echo $title=$row["title"];
                echo $name=$row["name"];
                echo $idPost=$row["idPost"];
                echo $password=$row["password"];
            }
            if (!empty($mail_to)){
                sendEmail($mail_to,$email,$name,$title,$idPost,$password);
            }
        }

    // SEND EMAIL
        function sendEmail($mail_to,$email,$name,$title,$idPost,$password) {
            $mail_to ="$mail_to";
            $email ="$email";
            $name = "$name";
            $title = "$title";
            $idPost = "$idPost";
            $password = "$password";
            $from    = "no-reply@2tradeit.com";
                //begin of HTML message
        $message = "<html>
      <body bgcolor=\"#FFFFFF\">
            Hello, $name, your ad $title is 30 days old etc...
      </body>
    </html>";
       //end of message 
            $headers = 'From: '.$from."\r\n" .
            'Reply-To:'.$_POST['email']."\r\n" .
            "Content-Type: text/html; charset=iso-8859-1\n".
            'X-Mailer: PHP/' . phpversion();
            mail($mail_to, "Your ad is 30 days old", $message, $headers);
        }
    ?> 

どんな助けでも大歓迎です!

ありがとう!

4

1 に答える 1

1

while 内で sendEmail 関数を実行する必要があります。現在何が起こっているかというと、返されたすべての行を調べ、変数を設定し、変数を上書きしてから、電子メールを 1 回送信しています。このようなことを試してください。if ステートメントが while ブロック内にあることに注意してください。

while ($row = mysql_fetch_array($result)){
            echo $row['name']." - ".$row['title']." - ".$row['email']."\n";
            echo $mail_to = $row['email'].", ";
            echo $title=$row["title"];
            echo $name=$row["name"];
            echo $idPost=$row["idPost"];
            echo $password=$row["password"];
            if (!empty($mail_to)){
                sendEmail($mail_to,$email,$name,$title,$idPost,$password);
            }
}

これでメールが送信され、次の行が処理されます。つまり、行ごとにメールが送信されます。

于 2013-02-27T01:56:06.720 に答える