に送信するためのmysqlからのデータ抽出を検索し、組み合わせるために、私はどのようにPHP
- オブジェクト1(PK)
- として人物の情報についてのいくつかの列で保存されたテーブルでMySQL DBを持っているユーザ名
- メール
- サービス
- はphpmのためのPHPコードで
を送りましたailer私はデータベースに接続し、SQLクエリから必要な情報を抽出し、すべての電子メールが正しく送信された後、foreach関数を使用してすべての人に電子メールを送信し、列 "送信"のデータは0から1へ更新されます。問題なく動作しますが、複数の "object1"に同じ "メール"を持つ人がいる可能性があります。この場合、すべての行にメールが送信されます...
たとえば、電子メール[email protected]には30件の「object1」があり、30件のメールが届きます。
クエリーのデータと作業を結合する方法と、1つの電子メールに関連付けられたこれらのオブジェクト1のすべてが、すべてのテーマのコンテンツを1つの電子メールでのみ送信されますか?
私はif/elseを使ってスクリプトを完成させる必要があると思いますが、どのように管理しているのかわかりません。
それを行うためのスクリプトの一部下:
<?
$mail = new PHPMailer;
$result = mysqli_query($mysql, 'SELECT * FROM db WHERE service LIKE \'%something%\' AND sent = 0 ORDER BY object1 LIMIT 0 , 30');
foreach ($result as $row) {
$mail->addAddress($row['email'], $row['object1']);
/* i use it to use an external .html file to send email and replace vairables in it */
$message = file_get_contents('template/temaplate.html');
$message = str_replace('%email%', $row['email'], $message);
$message = str_replace('%object1%', $row['object1'], $message);
//Set the message
$mail->MsgHTML($message);
$mail->AltBody = strip_tags($message);
if (!$mail->send()) {
echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo .;
break; //Abandon sending
} else {
echo "Message sent to :" . $row['object1'] . ' (' . str_replace("@", "@", $row['email']) .;
//Mark it as sent in the DB
mysqli_query(
$mysql,
"UPDATE db SET sent = true WHERE object1 = '" .
mysqli_real_escape_string($mysql, $row['object1']) . "'"
);
}
// Clear all addresses and attachments for next loop
$mail->clearAddresses();
$mail->clearAttachments();
}
?>
私は正しく私のニーズを説明し、いくつかの助け、それのための提案をお願いしていると思っています。
分かりやすいコードのインデントが良い考えです。それは [コーディング標準を簡単に見てみましょう](http://www.php-fig.org/psr/psr-2/ **私たちは、コードを読んで、もっと重要なこと、それは**あなたのコードをデバッグするのに役立ちます助けます)あなた自身の利益のために。あなたはこのコード を数週間/数ヶ月で修正するように頼まれるかもしれません。そして、あなたは私に最後に感謝します。 – RiggsFolly
あなたのスクリプトは[SQLインジェクション攻撃]の危険にさらされています(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) [リトルボビーテーブル](http://bobby-tables.com/)でも [入力をエスケープしている場合、その安全ではありません!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets -around-mysql-real-escape-string) [準備されたパラメータ化された文](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly
これはあなたのようには見えませんこのコードをあなた自身で書く試み。 ** SO!=無料のコーディングリソース** – RiggsFolly