0

フィールド CNT に 4 つの「行」のデータがあるデータベースを呼び出しました。(2,1,3,1) これらを合計したいのですが、最大数に達すると、別の php ページに移動します。カウントが最大値を下回っている場合は、別のヘッダー ("Location...) コマンドが下にあります。

キックアウトしません - 何か提案をいただけますか

    $Count = 0;
    $Max = 5;
    While ($row = mysql_fetch_assoc($result)) { 
        $Count = $Count + $row["Cnt"];
        If ($Count > $Max) { 
            header("Location: pareAbilities.asp?Who=".$Who."&Logcode=".$LogCode."&A=".$row['A']."&B=".$row['B']."&CNT=".$Count );
        } 
    }
4

2 に答える 2

1

ヘッダーの後にexit()を使用する

If ($Count > $Max) { 
   header("Location: pareAbilities.asp?Who=".$Who."&Logcode=".$LogCode."&A=".$row['A']."&B=".$row['B']."&CNT=".$Count );
   exit();
} 

PHP - Location: ヘッダーを呼び出した後に exit() を呼び出す必要がありますか?

于 2013-03-25T04:18:21.563 に答える
0

ループで他に何をしているのかわからなくても..次のコードは、はるかに高速で読みやすくなります。

  • SQL SUM 関数を使用して CNT 列を合計しました
  • http_build_queryリダイレクト先を構築する
  • sprintf連結を整理します
  • dieページの残りの部分の処理を停止するために追加されました

あなたの答えにとって重要なのはdie. また、これが実行される前に、他の出力がブラウザに送信されていないことを確認してください。headerまだ出力がない場合にのみ送信できます。出力を簡単に停止できない場合は、出力バッファリングを調べてみてください。ob_start ob_flush

// SUM(CNT) as sum_cnt automagically does the calculation
$query = mysql_query("SELECT SUM(CNT) as sum_cnt, A, B, CNT FROM table");
$result = mysql_fetch_assoc($query);

if($result['sum_cnt'] > $Max) {
    $querystring = http_build_query( // builds the query string for you
            array(
                'Who' => $Who,
                'Logcode' => $LogCode,
                'A' => $result['A'],
                'B' => $result['B'],
                'CNT' => $result['sum_cnt'],
            )
    );
    header( // sprintf is very nice to keep long concat strings tidy
            sprintf(
                    "Location: pareAbilities.asp?%s", 
                    $querystring
            )
    );
    die(); // Added die here to stop other code from executing
}
于 2013-03-25T04:27:38.553 に答える