4

解決策がないかもしれない問題がありますが、誰かがこれを理解できることを願っています。

HTML/CSS を使用して給与計算を処理する Web サイトを PHP/MySQL で開発しました。ユーザーが過去 (2 週間) の給与計算を送信すると、各従業員の勤務時間が処理されます。従業員が 50 人未満の企業の場合、処理は非常に高速ですが、従業員が 100 人を超える企業の場合、処理にかなりの時間がかかる場合があります。各企業の給与は従業員数によって大きく異なるため、私が理想的に望むのは、一般的な「読み込み中」バーや推定「35% 読み込み済み」バーではありません。

最善の解決策は、彼らが支払い期間を送信するとすぐに、PHP/MySQL プロセッサ/DB から合計レコード番号を渡し、各従業員が PHP プロセッサから処理されるたびに番号を更新することです。たとえば、「Processing Employee 35 of 134」の場合、「35」は、各レコードが処理されるたびに増分および更新されます。または、可能でない場合は、次のような動的リストでも問題ありません。

処理従業員 1/134
処理従業員 2/134
処理従業員 3/134
処理従業員 4/134
など ...

これを実現するには、AjaxまたはJavascriptが最適なオプションのようですが、それらを使用してこれを実現する方法はまだわかりません。どんな助けや洞察も大歓迎です。引き続き探して、何か見つけたらこの投稿を更新します。

4

3 に答える 3

0

私のアプローチは、レコードの総数と現在のレコード番号をセッション変数に格納することです。次に、"Processing employee $currentRec of $totalRec" の text/html を返す php ページを設定します。

メイン ページからリクエストを送信するときは、ページに div を表示してステータス メッセージを表示します。ajax リクエストを起動してデータを処理し、完了したら div を非表示にします。レコードを処理するコードは、進行中にセッション変数を更新できます。同時に、ステータス メッセージを取得し、応答で div の内容を更新する定期的な ajax 要求を開始します。div が見えなくなるまでこれを続けます。現在のレコード番号を表示するためにデータが処理されている間にポップアップするページにステータス メッセージが表示され、更新タイマーの設定方法に基づいて、好きなだけ更新されます。

正確な実装は、jQuery、プロトタイプ、プレーン Javascript などを使用しているかどうかによって異なります...

于 2013-04-08T06:43:35.220 に答える
0

バッチを反復処理しながら PHP で flush() コマンドを呼び出すことでこれを実行しましたが、扱いにくい場合があり、非表示のフィールドを更新し、setTimeOut で javascript 関数を使用してその値をチェックし、進行状況バーを更新することができます。

プログレスバー:

動的リストで行うことは次のとおりです。

 $count = 0;

 // some db query

 // start output
 echo "<ul>";

 // iterate through records and perform dynamic insert

   $count ++;
   echo "<li>Processed " . $count . " records.</li>";
   flush();

 // end iteration

 // end output
 echo "</ul>";

レコードのすべての % のみを更新する場合は、前述のように合計数を取得し、if 句でモジュラス演算子を使用することをお勧めします。たとえば、50 件のレコードがあり、5 件ごとに更新したい場合、 if($count mod 5 == 0) { echo ... flush() }

于 2012-07-13T18:06:04.503 に答える
0

Mike S.が提案したものと迅速なajax呼び出し(500ミリ秒ごとなど)を組み合わせて作成する必要があります。PHPファイルから書き込まれたテキストファイルへのajax呼び出しを行うことができます....

例えば:

<?php
    $count = 0;

mysql_connect('blahblah');
 // start output

$query = mysql_query("SELECT ...");
while($rs = mysql_fetch_assoc($query)) {
    $fh = fopen('filename.txt','w');
    fwrite($fh, $count);
    fclose($fh);
    ++$count
}
?>

次に、その filename.txt ファイルに対して 500 ミリ秒ごとに (またはそれよりも早く) ajax 呼び出しを行い、そのファイルの内容を読み取って、要求の処理がどれだけ進んでいるかを確認する必要があります。PHP ファイル [current_count]-[total_count] (合計 155 件中 15 件のレコードの場合は 15-155) の内容を書き込み、results.split('-')javascript コーディングで同様のことを行うこともできます。

于 2012-07-13T19:08:30.193 に答える