使用switch case更改php标头

时间:2011-09-19 14:52:56

标签: php

我想根据组合框中选定的字符串重定向到其他页面。

我添加了以下代码:

switch ($downloadType){
    case "text1":
        header("Location:pdf/text1.pdf");
        break;
    case "text2":
        header("Location:pdf/text2.pdf");
    case "text3":
        header("Location:pdf/text3.pdf");
    default:
        header("Location:index.html");
}

但这个简单的脚本不起作用。我是php的新手。你知道为什么我不能改变标题吗?是否我们无法使用switch-case语句更改标头。

如果不是这样,那么可能的方法是在表单提交时重定向到另一个页面。

4 个答案:

答案 0 :(得分:3)

你需要添加休息时间;到每个案件的最后。

case "text3": 
    header("Location:pdf/text3.pdf"); 
    break;

答案 1 :(得分:1)

您需要添加break:

switch ($downloadType){
case "text1":
    header("Location:pdf/text1.pdf");
    break;
case "text2":
    header("Location:pdf/text2.pdf");
    break;
case "text3":
    header("Location:pdf/text3.pdf");
    break;
default:
    header("Location:index.html");
}

答案 2 :(得分:0)

您必须将switch语句视为一种跳转到结构。根据计算表达式的值,代码执行会跳转到第一个相应的casedefault语句并从那里继续。这就是为什么你想要在大多数时候插入break语句。目前,您只对"text1"案例执行此操作。

除此之外,我建议您在编写Location HTTP标头时使用完整的URL,即使相对URL通常按预期工作。 HTTP规范实际上不允许相对URL。

header('Location: http://example.com/foo/pdf/text2.pdf');

不要忘记发送HTTP标头不会停止脚本执行。完成后添加exit;语句。

答案 3 :(得分:-1)

除了使用break完成case语句之外,还要记住在发送任何实际输出之前必须调用header()。

E.g:

<html>
<?php
header("Location:pdf/text2.pdf");?>
</html>

无效,因为“<html>”行已经发送到客户端,因此无法使用header()。基本上,在尝试调用header()之前,请确保文件中没有输出。

编辑: 参考:http://php.net/manual/en/function.header.php