在WHILE循环内 - 尝试踢出另一个位置

时间:2013-03-25 04:12:56

标签: php mysql

我已经调用了一个数据库,该数据库在CNT字段中有4个“行”数据。 (2,1,3,1)我想要总计这些,当我达到最大数字时,踢出另一个php页面。如果计数低于Max,则下面有另一个标题(“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 );
        } 
    }

2 个答案:

答案 0 :(得分:1)

exit()

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

PHP - Should I call exit() after calling Location: header?

答案 1 :(得分: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
}