0

我调用了一个在 CNT 字段中有 4 个“行”数据的数据库。(2,1,3,1) 我想合计这些,当我达到最大数字时,跳到另一个 php 页面。如果计数低于最大值,则下面还有另一个 header("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

在Header之后使用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 回答