0

tablesorter テーブルで行われた変更に基づいて db テーブルを更新しようとしています。私は JS を介して情報を送信しており、各項目は更新を処理する php ページに投稿されます。これはうまくいきます。買い手の名前と、そこからコミッションを計算できるように処理された新しい日付を示すメールを送信する必要があります。foreach ループを追加すると、1 通だけでなく 45 通の個別のメールが届きます。
別の foreach ループを追加する必要がありますか、それとも他に何かする必要がありますか?
php ページのコードは次のとおりです。

    <?php
require_once ('../db.php');
$conn = db_connect();
session_start();


$buyer = $_POST['buyer'];
$isbn = $_POST['isbn'];
$sku = $_POST['sku'];
$cost = $_POST['cost'];
$csmt = $_POST['csmt'];
$hold = $_POST['hold'];
$today = date("Y-m-d");
$n=1;

foreach($sku as $value){ 
// update inventory table
$conn->query("update inventory set cost = $cost, csmt = $csmt, hold = $hold, date_process = $today where sku = $sku");


$holdList[$n] = array('buyer' => $buyer,
            'process date' => $today,
                );
$n++;
}
//loop trough hold list and store in csv format
$csvLists = to_csv($holdList);


function to_csv( $array ) {
 $csv = "";

 if (count($array) == 0) return "No Information found";

 ## Grab the first element to build the header
 $arr = array_pop( $array );
 $temp = array();
 foreach( $arr as $key => $data ) {
   $temp[] = $key;
 }
 $csv = implode( ',', $temp ) . "\r\n";

 ## Add the data from the first element
 $csv .= to_csv_line( $arr );

 ## Add the data for the rest
 foreach( $array as $arr ) {
   $csv .= to_csv_line( $arr );
 }

 return $csv;
}

function to_csv_line( $array ) {
 $temp = array();
 foreach( $array as $elt ) {
   $temp[] = '"' . addslashes( $elt ) . '"';
 }

 $string = implode( ',', $temp ) . "\r\n";

 return $string;
}

$conn->close();

$pricingReport = "The Latest Hold List has been completed. \n";
$pricingReport .= $csvLists;

//send email when pricing specs are done
$to = "jimd@bookcellaronline.com";

$subject = "Hold List";
$body = $pricingReport;
mail($to, $subject, $body);

?>

更新:これがJSです:

    // to save the changes to the hold table
$("#holdSave").live('click', function() {
$('#holdTable tbody tr').each(function()
        {
$.ajax({
    type: "POST",
    url: "holdSave.php",
    dataType: "json",
    data: ({buyer: $(this).find('#tableBuyer').html(), sku: $(this).find('#tableSku').html(), isbn: $(this).find('#tableISBN').html(),
           cost: $(this).find('#tableCost').val(), csmt: $(this).find('#tableConsignment').val(),
           hold: $(this).find('#tableHold').val()}),
    success: function(data) {

        } // end of success function

}); // end of ajax call
                    }); // end of holdtable tbody function
}); // end of holdSave event
4

1 に答える 1

2

ajax関数は、レコードごとに個別に呼び出されます。これにより、レコードごとにメールが送信されます。

できることは、データセット全体でJSONオブジェクトを作成してから、ajax呼び出しを呼び出すことです。

var arr={};
var cnt=0;
$('#holdTable tbody tr').each(function()
{
    arr[cnt]={buyer: $(this).find('#tableBuyer').html(), sku: $(this).find('#tableSku').html(), isbn: $(this).find('#tableISBN').html(),
       cost: $(this).find('#tableCost').val(), csmt: $(this).find('#tableConsignment').val(),
       hold: $(this).find('#tableHold').val()};
    cnt++;
}

次に、このオブジェクトをajax呼び出しで渡します。

    $.ajax({
    type: "POST",
    url: "holdSave.php",
    dataType: "json",
    data: {data:arr},
    success: function(data) {

    } // end of success function
    });

PHP側では、各レコードの$_POST['data']を解析できます。

$data=$_POST['data'];

の個々の要素は$data、挿入する必要のあるレコードです。$data[$i]['buyer']それらは、単純なforループで次のように解析できます$data[$i]['sku']

于 2012-07-16T13:33:38.543 に答える