-2

作成しているWebアプリのメール「システム」を設定しようとしています。ユーザーテーブルでのあなたの役割が

3

アカウントのステータスは

「アクティブ化」

その後、新しいユーザーがサインアップするか、ログインリクエストを送信すると、すべての管理者にメールが送信されます。これまではメールをハードコーディングしただけでしたが、アプリのマーケティングに関しては、企業はメールを変更するためにコードを入力する必要はありません。だから私はそれを「動的に」やろうとしています

私のモデルはほとんどトーマスに感謝します!:

    {
        $sql = "SELECT * from users WHERE status = 'Activated' and role = 3";
        $admin_email = $this -> db -> conn_id -> prepare($sql);
        $admin_email -> execute();
        $emails = array();

        if ($admin_email)
        {
            if ($admin_email -> rowCount() > 0)
            {
                foreach ($admin_email -> fetchall() as $row)
                {
                    $emails[] = $this -> encrypt -> decode($row['email']);
                }
                return $emails;
            }
        }
    }

とコントローラー:

     {

        $this -> load -> model('login_model');
        $this -> load -> library('email');
        $this -> load -> library('encrypt');

        $emails = $this -> login_model -> admin_email();

        $first = $this -> input -> post('fname');
        $last = $this -> input -> post('lname');
        $email = $this -> input -> post('email');

        $this -> email -> from($email);
        $this -> email -> to($emails);
        $this -> email -> reply_to($email);
        $this -> email -> subject('' . $first . ' ' . $last . ' Account Request');
        $this -> email -> message('{unwrap}Hello this is ' . $first . ' ' . $last . ', I am requesting to be added to the staff log-in.{/unwrap}');

        if (!$this -> email -> send()) 
        {
            $this -> session -> set_flashdata('email', 'Email Was Not Sent!');
            $this -> request_account();
        } else 
        {
            $this -> session -> set_flashdata('login', 'Request Sent!');
            redirect('login_controller/index', 'location');
        }
    }

私の観察からこれをもっと掘り下げるためだけに:

  1. 返された最初の行は問題なく機能しますが、テスト目的で2つの管理者アカウントがあり、今言ったように、最初の行は電子メールのみを受け取ります。そして、最初の行(最初の管理者)を削除すると、2番目の行がそれを取得するとします。そのため、foreachが失敗しているように感じますが、エラーを修正する理由や方法すらわかりません。

誰かが私がここで間違っていることを私に示すことができれば、それは素晴らしいことです、

4

3 に答える 3

0

あなたの関数は何があっても単一の電子メールしか返さないので、それを試してみることをお勧めします

    $sql = "SELECT email from users WHERE status = 'Activated' and role = 3";
    $admin_email = $this -> db -> conn_id -> prepare($sql);
    $admin_email -> execute();

    $emails = array(); // initialize empty array

    if ($admin_email)
    {
        $encryptedEmails = $admin_email->fetchAll();
        foreach ($encryptedEmails as $row)
        {
            $emails[] = $this->encrypt->decode($row['email']); // insert the email at the end of the array
        }
    }

    return $emails;
于 2013-03-16T17:34:49.457 に答える
-1

(編集:私の最初の答えを削除しました。...)

たぶん(よくわかりませんが)foreachループで2つの変数を使用するべきではありません。
参照:http://php.net/manual/fr/control-structures.foreach.php

実行する場合:

       foreach ($admin_email -> fetch() as $row)
            {
                $row = $row['email'];
            }

            $email = $this -> encrypt -> decode($admin_email);

エンコードされた電子メールは$admin_email配列に含まれているはずです。foreachは$admin_email配列項目を1つずつ処理し、それを配列に返す必要があるため(単純な文字列変数ではなく)


、デコード関数かどうかを確認します。配列を処理できます。

于 2013-03-16T18:40:48.960 に答える
-3

admin_email関数が少し奇妙に見えます

  • $admin_email電子メールが含まれていないときに、PDOステートメント変数を呼び出しています。これにより、コードがかなり難読化されます。
  • try..catch演算子を使用すべきでない方法で使用しています。
  • 過度ifのs
  • 何もされていません$row['email']
  • decode()役に立たない、またはいくつかの誤った仮定に基づいていると私が思う奇妙な機能がいくつかあります。

そこで、この関数をもっと賢明な方法で書き直すことにしました。

function admin_email() 
{
    $sql = "SELECT email from users WHERE status = 'Activated' and role = 3";
    $stm = $this->db->conn_id->prepare($sql);
    $stm->execute();
    return $stm->fetchAll();
}

管理者の電子メールを含む配列を返します。

于 2013-03-16T16:40:58.723 に答える