1

私はすでにmail()を使用して複数の受信者に送信することを研究していますが、それを機能させることができません。私がやろうとしていることは、私が持っているすべての注文について、それぞれが独自の電子メールアドレスを持っている注文1、2、3です。注文ステータスを保留中から確認に変更すると、mail()はそのIDを使用して参照しますdbテーブルを作成し、これら3つの注文の電子メールを送信します。しかし、私の場合は、注文3という最新の注文だけを郵送しました。これは、注文ステータスを変更するために使用するフォームです。

<form action="results-action" method="post" enctype="multipart/form-data">
<fieldset>


<table id ="table_id" class="display">

<thead>

<tr><td><h2>Pending Order</h2></td></tr>

<tr>
<th scope="col">Order ID</th>
<th scope="col"> </th>
<th scope="col">Name</th>
<th scope="col">Address</th>
<th scope="col">Product Name</th>
<th scope="col">Produt Quantity</th>
<th scope="col">Price</th>
<th scope="col">Order status</th>
</tr>
</thead>

<tbody>

<?php 
while ($row = mysqli_fetch_array($result)) {
?>

<tr>
<td><input type="text" value='<?=$row['virtuemart_order_id']?>' name="orderid" id="virtuemart_order_id"></td>
<td><input type="hidden" value='<?=$row['virtuemart_product_id']?>' name="productid" id="virtuemart_product_id"></td>
<td><?=$row['first_name']?></td>
<td><?=$row['address_1']?></td>
<td><?=$row['order_item_name']?></td>

<td><?=$row['product_quantity']?></td>

<td><?=$row['product_final_price'] ?></td>
<td><select name='change[<?=$row['virtuemart_order_id']?>]'>
<option value='C'> Confirmed</option>

<option value='X'> Cancelled</option></select></td>
</tr>

<?php
}
?>

</tbody>
</table>
</fieldset>



<fieldset>
<table>
<tr>
<td><input type="submit" value="Update status" name="update status"> </td>
</tr>
</table>
</fieldset>



</form>

これはphpで、フォームの注文IDを使用してメールアドレスを選択します。

<?php
$orderid = $_POST['orderid'];


// build SQL statement to select email addresses
$query3 = "SELECT email from ruj3d_virtuemart_order_userinfos where virtuemart_order_id = '$orderid'";


// execute SQL statement
$result3 = mysqli_query($link, $query3) or die(mysqli_error($link)); 


$subject = "Order confirmed by Home and decor";
$message = "Hello! This is a message to inform that your order has been confirmed";
$from = "107496@myrp.edu.sg";
$headers = "From: $from";

while($row3 = mysqli_fetch_array($result3)){ 

$addresses[] = $row3['email'];

}

$to = implode(",", $addresses);



mail($to, $subject, $message, $headers);

?>
4

4 に答える 4

1

ヘッダーにa を追加できます。これは、ヘッダーが作成されCcた理由の一部です。

$headers = "From: $from" . "\r\n";
$headers .= "Cc: ".$secondEmail.', '.$thirdEmail . "\r\n"
于 2012-11-19T22:41:00.167 に答える
0

次のように、コンマの後にスペースを追加する必要があると思います。 $to = implode(", ", $addresses);

于 2012-11-19T22:40:20.723 に答える
0

それ以外の

Select
  email 
From 
  ruj3d_virtuemart_order_userinfos 
Where 
  virtuemart_order_id = '$orderid'

行う

Select
  email 
From 
  ruj3d_virtuemart_order_userinfos 
Where 
  virtuemart_order_id In ($orderid)

(PHP が間違っている可能性があります。SQL ステートメントを実行しているだけです。複数を送信したときに $orderid がコンマ区切りリストのように見えない場合は、1 つにする必要があります)

実際には、それだけでなく、SQL インジェクションについても学び、非推奨の mysqli ライブラリを PDO、特にPDO::Prepareに置き換えてください。

おっと、これらが別の顧客である場合は、宛先フィールドにメールを送信しないでください。顧客は、お互いにメール アドレスを送信しても評価されません。

于 2012-11-19T22:44:43.793 に答える
0

$_POSTメールアドレスの選択に間違ったフィールドを使用しています。

最初の php ファイルによって生成されたフォームにはテーブルが含まれており、各行には という名前の入力フィールドが含まれています'orderid'。しかし、本当に関心のあるフィールドは、select各行の入力値です。changeこれらはすべて、配列で指定された 1 つの配列に格納され$_POSTます。

$_POSTフォームによって返される選択値に対応するように初期化する方法の例を次に示します。

$_POST['change'] = array('id1' => 'C', 'id2' => 'X' /*, 'id3' => ... */ );

したがって、次のことが必要です。

  • のフォームから返された配列を取得します$_POST
  • 「C」と等しくないエントリを除外します。
  • これらのエントリのキーを保持し、
  • それらを消毒するためにそれらをエスケープし、

上記で説明したように、php ファイルの先頭を次のように置き換える必要があります。

この最初のバージョンはエントリをサニタイズしません:

<?php

function confirmed($v) { return ($v == 'C'); }

// pick the rows in your form table which have been set as confirmed, and use the keys 
$orderid = implode(',', array_keys(array_filter($_POST['change'],'confirmed')));

// build SQL statement to select email addresses
$query3 = "SELECT email FROM ruj3d_virtuemart_order_userinfos WHERE virtuemart_order_id IN (".$orderid.")";

// etc.

これはサニタイズを行います:

<?php

function confirmed($v) { return ($v == 'C'); }

// pick the rows in your form table which have been set as confirmed, and use the keys 
$orderid = implode(',', array_map('mysql_real_escape_string', 
                                  array_keys(array_filter($_POST['change'],'confirmed'))));


// build SQL statement to select email addresses
$query3 = "SELECT email FROM ruj3d_virtuemart_order_userinfos WHERE virtuemart_order_id IN (".$orderid.")";

// etc.

関数での BCC の使用については、このSO の質問mail()を参照してください。

于 2012-11-19T22:54:35.220 に答える