Php 如果在3秒内没有自动重定向,插入重定向链接(使用JS)-这是一个好方法吗?

Php 如果在3秒内没有自动重定向,插入重定向链接(使用JS)-这是一个好方法吗?,php,Php,php的访问者提交一个带有foo值的表单,该值应为a或b 表单是在redirect.php上处理的,它应该根据它们的foo值立即将它们发送到目的地(php标题刷新),同时显示“redirectig you,please wait”消息 我有一位访客抱怨说他看到了邮件,但从未发生重定向, 因此,为了处理这样的事件,我修补了以下javascript,为用户提供了手动到达目标的选项,如果他在3秒以上没有被重定向 我计划使用的方法是否存在任何漏洞?这是处理这个问题的好方法吗?(另外,您是否发现整个代码总

php的访问者提交一个带有
foo
值的表单,该值应为
a
b

表单是在redirect.php上处理的,它应该根据它们的
foo
值立即将它们发送到目的地(php标题刷新),同时显示“redirectig you,please wait”消息

我有一位访客抱怨说他看到了邮件,但从未发生重定向, 因此,为了处理这样的事件,我修补了以下javascript,为用户提供了手动到达目标的选项,如果他在3秒以上没有被重定向

我计划使用的方法是否存在任何漏洞?这是处理这个问题的好方法吗?(另外,您是否发现整个代码总体上有任何错误?)

我宁愿使用服务器端的东西来显示这样的消息(因为我不希望没有被延迟的用户能够查看源代码和目标代码,否则只能在标题中发送),但据我所知,这是不可能的

<?php
$url = "could-not-get-a-foo-parameter-at-all-error-monitoring-page.html"; 

if(isset($_POST['foo'])){

    switch ($_POST['foo']) {

    case "a":
        $url = "http://www.aaa.com/";
        break;

    case "b":
        $url = "http://www.bbb.com/";
        break;

    default:
        $url = "foo-parameter-exists-but-is-wrong-error-monitoring-page.html";
        break;
    }
}

header( "refresh:0;url=$url" );

?>  
<!doctype html>
<html>
<head>

<style>
.message {
   color:blue;
}
.red {
   color:red;
}
</style>
</head>
<body>
<div class="message">Redirecting, Please hold on...</div>
<div id="targetElement" class="red"></div>

<script id="blockOfStuff" language="text">
<a href="<?php echo $url ?>">Click here to be manually redirected</a>
</script>

<script>
var myVar=setTimeout(function(){myTimer()},3000);

function myTimer() {
var div = document.createElement('div');
div.setAttribute('class', 'someClass');
div.innerHTML = document.getElementById('blockOfStuff').innerHTML;
document.getElementById('targetElement').appendChild(div);
}
</script>

.留言{
颜色:蓝色;
}
瑞德先生{
颜色:红色;
}
正在重定向,请稍候。。。
var myVar=setTimeout(函数(){myTimer()},3000);
函数myTimer(){
var div=document.createElement('div');
div.setAttribute('class','someClass');
div.innerHTML=document.getElementById('blockOfStuff').innerHTML;
document.getElementById('targetElement').appendChild(div);
}

首先不需要Javascript。您应该尝试查找PHP逻辑的问题,而不是制作JS补丁。此外,在这个页面上,您也不需要任何HTML/CSS,重定向应该在页面加载任何内容之前立即发生。对于像这样的PHP重定向,我通常使用

header("Location: $url");
您还应该检查变量的范围。如果有更多的代码没有发布,那么$url变量可能有一个在重定向中无法访问的范围

显示“重定向给您,请稍候”消息时

他们真的需要这个吗? 浏览器或其他软件可能(例如)不支持标题“刷新”。 -此处未列出+

如果您想添加meta标记(例如,javascript也可以被禁用),或者使用常规regirect,而不使用html页面,请添加meta标记:

header('Location: ' . $url);
exit;
ps:如果你有可以工作的javascript,那么如果你可以自己重定向用户,为什么要求用户点击链接

setTimeout(function(){myTimer()},3000);
可以替换为

setTimeout(myTimer, 3000);

1.“他们真的需要它吗?”你的意思是问我为什么不使用直接链接而不是重定向?出于几个“战术”原因,我需要进行此重定向,因此不可能有常规链接。2.只要我使用的刷新得到了占市场99%以上的浏览器的支持(不是吗?),对我来说就足够了。3.禁用javascript的人对我来说并不重要,因为他们无论如何都无法看到被重定向到的页面。4.我正试图用这段PHP代码来重定向它们,你是说我应该使用java重定向作为回退吗?“你是说我应该使用java重定向作为回退”而不是创建链接来单击,你只需将位置设置为新的url。如果你是指PHP位置,据我所知,如果使用此方法,则在重定向期间不可能绘制HTML/CSS。在我对Bradley4的评论中可以看到我对此的考虑。@rockyraw我的意思是setTimeout(function(){window.location.href='''},3000);我得考虑一下。首先想到的是,通过手动链接,用户感觉自己可以控制发生了什么,以防出现问题。也许PHP刷新已经开始工作了,但是需要一些时间,所以用户自己可以决定是否要启动回退链接。或者两次同时刷新甚至可能导致其他类型的问题?1。如果我知道当前PHP存在问题,我当然会尝试更改代码,所以我不确定“您应该尝试”是什么意思来发现问题。2.是什么让你自信地排除了我不应该使用任何HTML/CSS?在客户端看到重定向url中的新内容之前,重定向有时可能需要几秒钟的时间。如果客户只看到你建议的一个空白屏幕,在这段时间内,他可能会认为有什么不对劲,然后退出网站。我认为这是一个主要问题,所以这就是我如何解决它。