PHP で小規模なメーリング リストを管理できるようにする

WBOY
リリース: 2016-06-21 08:58:01
オリジナル
1046 人が閲覧しました

最近、読者から、ThickBook ニュース リストでの購読/購読解除を処理するメカニズムと、メーリング リストのすべての受信者に実際にメッセージを送信する場合のメカニズムについて質問されました。それは良い質問で、かなり簡単な方法があります。しかし、最初に言いたいのは、私がやっていることにご都合主義は何もないということです。なぜなら、私はとてもクールだからです。たとえあったとしても、私はこの方法を使っているだけです。怠け者です。市場にはシステムにインストールできるメーリング リスト ソフトウェアが多数あり、同じことを行うために使用できる他のより統合されたスクリプト セットもいくつかあることに注意してください。しかし、先ほども言ったように、私は怠け者で、何もダウンロードしてインストールしたくないので、求められたことを実行する非常に単純なページをいくつか生成しました。誰かがこのことから何かを学べることを願っています。

最初は、データベース テーブルにレコードを追加または削除するスクリプトです。 「manage.phtml」などの名前を付けます。この場合、バックグラウンドは、サブスクリプション テーブルを作成できる、ある種のデータベースである必要があります。政治における半分の法則に従い、この例ではデータベースとして MySQL を使用します。 PHP マニュアルに従って適切なデータベース関連関数を置き換えるだけで、一般的に使用しているデータベースを使用できます。

購読フォームでは、電子メール アドレス (email_addr) と追加日 (date_added) の 2 つのフィールドを使用します。必要に応じてフィールドを追加したり、date_added フィールドを削除したりできます。この例では、私が行ったことを示しているだけであり、必要に応じて変更できます。私のサブスクリプション テーブルでは、email_addr フィールドは一意のフィールドです。つまり、まったく同じ別の電子メール アドレスを追加することはできません。これにより、サブスクリプションの重複が回避され、ユーザーがサブスクリプションを解除したい場合にレコードを簡単かつ確実に削除できるようになります。

それでは、購読/購読解除フォーム (manager.phtml または思いつく名前なら何でも) を作成しましょう。購読と購読解除、およびフォーム自体のアクションを処理するために同じファイルを使用しているため、少し複雑になる可能性があります。最初から最後まで見て、すべての部分をフォームにまとめます。

スクリプトの先頭で、データベースが開かれ、タイムスタンプが準備されます。こういった目立たないものに対処すると、最初はいつも少しストレスが軽減されます。

------------------------------------------ ------ ------------------------------------
// に接続しますデータベース
$db = mysql_connect ("サーバー名", "ユーザー名", "パスワード") または die ("接続できません。");

mysql_select_db("yourDB", $db) または die ("データベースを選択できません。");

//タイムスタンプを取得
$add_date = date("Y-m-d"); -------------------- ------ -------------------------------------------- ------ ---
$op の値が "ds" であることを望みます。これは複雑なプログラムの略語ではなく、「何かをする」という意味で作成しました。したがって、スクリプトが最初に行うことは、$op の値が「ds」と等しいかどうかを確認することです。この値は、フォームが送信されたときにのみ送信されます。したがって、$op の値が「ds」でない場合は、ユーザーがフォームを見ていないことを意味するため、フォームが表示される必要があります:

------------- ---------------------------------------------------- ---- -------------
if ($op != "ds") {

//購読/購読解除が必要です

$ text_block = "


あなたの電子メール アドレス:

🎜>

アクション:

=ラジオ名 = "アクション" 値 = "unsub">


/p>

";

}---------------------- -------------------------------------------------- -- ---

$text_block 変数にテキストを入れていることがわかります。テキストを変数に入れることで、後でメインの HTML テンプレート内に $text_block の値を出力するだけです。これは個人の好みの問題であり、いつでも好きな方法でテキストを出力できます。

このフォームのアクションは $PHP_SELF です。ご想像のとおり、送信ボタンが押されたときにリロードされることを意味します。次に、フォームに 3 つのフィールドがあることがわかります。$op に「ds」の値を割り当てる隠しフィールド、ユーザーが自分の電子メール アドレスを入力する「email」というテキスト フィールド、および 1 つのセットがあります。ユーザーはこれに基づいて、実行するアクション (購読または購読解除) を決定できます。

フォームが送信されると、$op は "ds" になり、$action の値には "sub" または "unsub" が含まれます。したがって、上記の if... ステートメントを見てみましょう。送信されると ($op=="ds" のため) スキップされます。 $op の値が "ds" で、$action の値が "sub" (サブスクリプション) の場合、次の else if... ステートメントが実行されます。このコードは、電子メールがサブスクリプション テーブルに既に存在するかどうかを確認し、存在しない場合はテーブルに挿入して応答を出力し、そうでない場合は無視します。

------------------------------------------ ------ ------------------------------------
else if (($ op == "ds" ) && ($action == "sub")) {

// チェックメールが送信されていない場合は送信し、送信されていない場合は情報を返します

$check = "select email_addr from subscriptions
where email_addr = "$email"";

$check_result = mysql_query($check)
or die("ローカル電子メール アドレスのチェックを実行できません。") ;

$ check_num = mysql_num_rows($check_result);


if ($check_num == 0) {

// $check_num が 0 の場合、一致しませんレコードが見つかり、ユーザーは Submit

$sql = "insert into subscriptions
values("$email", "$add_date")";

@mysql_query($sql) ) or die ("メールを挿入できませんでした。");

$text_block = "

ご登録いただきありがとうございます!


"; 🎜>} else {

// $check_num が 0 でない場合、ユーザーはすでに送信済みであることを知らせる必要があります。

$text_block = "

すでに購読しています!

";

}

}---------------------- ------ -------------------------------------------- ------ -

次のステップ: $action の値が "sub" ではなく "unsub" (購読解除、購読解除) の場合の対処方法。上記と同様に簡単です。else if... ステートメントを展開し、電子メールが削除される前にサブスクリプション テーブルに存在するかどうかを確認する追加のコードを追加します。存在する場合は、削除して応答を出力します。それ以外の場合は無視してください。

------------------------------------------ ------ ------------------------------------

else if (($ op == "ds" ) && ($action == "unsub")) {


// すでに購読しているかどうかを確認し、購読を解除します。そうでない場合は、情報を返します

$check = "購読者から email_addr を選択します

where email_addr = "$email"";


$check_result = mysql_query($check)

or die("電子メール アドレスのチェックを実行できません。") ;


$check_num = mysql_num_rows($check_result);

if ($check_num == 0) {

// $check_num が 0 の場合、一致するレコードは見つかりません

$text_block = "

リストにあなたの電子メール アドレスが見つかりません!

まだ登録されていませんunsubscribed because you 入力された電子メールはデータベースにありません ";

} else {

// $check_num が 0 でない場合、ユーザーはリストに含まれているため、登録を解除できます

$sql = "購読者から削除

where email_addr = "$email"";


@mysql_query($sql) または die ("メールを削除できません。");

$text_block = "

登録解除が成功しました!

"

}

}

?>; -------------------------------------------------- - ------------------------

これですべての難しい作業は完了しました。残っているのは、$text_block 変数を次の形式で出力することだけです。 HTML のブロック:

-------------------------------------- ------ -------------------------------------

購読/購読解除

購読/購読解除



-------------------------------------------------- -- -

完全なプログラムリストは次のとおりです:

----------------------------- -- --------------------------------------------------

// データベースに接続します
$db = mysql_connect("servername", "username", "password")
or die ("接続できません。 ");

mysql_select_db("yourDB", $db) または die ("データベースを選択できません。");

// タイムスタンプを取得します
$add_date = date("Y-m-d"); 🎜>if ($op != "ds") {

//購読/購読解除が必要です

$text_block = "


メールアドレス:< Strong>


アクション:
sub



";

} else if (($op == "ds") && ($action == "sub")) {

// メールがまだ送信されていないことを確認して送信しますそれ以外の場合は、Message


$check = "購読者から email_addr を選択します

where email_addr = "$email"";

$check_result = mysql_query($check)

または die( "ローカル電子メール アドレスの確認を実行できません。 ");

$check_num = mysql_num_rows($check_result);


if ($check_num == 0) {

// $check_num が 0 の場合、一致するレコードが見つからないため、ユーザーを送信する必要があります


$sql = "insert into subscribers

values("$email", "$add_date") ";

@mysql_query($sql) or die ("メールを挿入できませんでした。");


$text_block = "

ご登録いただきありがとうございます。

";

} else {

// $check_num が 0 でない場合、ユーザーはすでに送信済みであることを通知する必要があります

$text_block = "

あなたはすでに購読しています!

";

}


} else if (($op == "ds") && ($action == "unsub")) {

// 購読しているユーザーを確認し、購読を解除します。そうでない場合は、情報を返します

$check = "購読者から email_addr を選択します

where email_addr = "$email""; 🎜>$check_result = mysql_query($check)

or die("メールアドレスのチェックを実行できません。");

$check_num = mysql_num_rows($check_result); if ($check_num == 0) {


// $check_num が 0 の場合、一致するレコードが見つからないため、ユーザーは登録解除できません

$text_block = "
< P> ; リスト内に電子メール アドレスが見つかりません。

入力した電子メールはデータベースに登録されていないため、購読が解除されていません。 ";

} else {

// $check_num が 0 でない場合、ユーザーはリストに含まれているため、登録を解除できます

$sql = "delete from購読者

where email_addr = "$email"";

@mysql_query($sql) または die ("メールを削除できません。");

$text_block = "

< ; P> 購読を解除しました。

";

}


}

?>



購読/購読解除

< BODY>

購読/購読解除 🎜>

---------------------------------------- -------- -------------------------------------- -----
これで、購読/購読解除メカニズムが整ったので、簡単なフォームと電子メール スクリプトだけを使用してニュースレターを送信する方法を示します (「while」ループはあなたの友達です! )フォームは「send_mail.html」で、フォームのアクションは「do_send_mail.phtml」のようなもので、件名(件名)を書くテキストフィールドと内容を書くテキストフィールドのみを使用します。 (ニュースレター)。必要に応じてフォーム フィールドを使用できます。

----------- ---------------------------------------------------- ---- ------

メールを送信

ニュースレターを送信

🎜>

件名を入力します:

🎜>

メールの内容: