web-dev-qa-db-fra.com

Comment rediriger la page en PHP après quelques secondes sans méta http-equiv = REFRESH CONTENT = time

Il semble qu'il ne soit pas conseillé d'utiliser

<meta http-equiv=REFRESH CONTENT=3;url=url>

pour les redirections, mais utilisez plutôt

header('Location: url')

Cependant, je voudrais montrer à l'utilisateur un message et lui laisser le temps de le lire avant de rediriger. Existe-t-il un moyen de le faire sans méta?

17
zhenming

Essayez d'utiliser l'en-tête "Actualiser":

header('Refresh: 3;url=page.php');

En outre, vous pouvez consulter cette question Actualiser l'en-tête HTTP .

37
Dador

Il n'y a rien de mal à utiliser la balise meta refresh.

<meta http-equiv="refresh" content="5;URL='http://example.com/'" />

Cette balise indique attendre 5 secondes et rediriger vers example.com. Cette balise n'est pas un problème à moins que les utilisateurs ne soient sur IE6 et cela fonctionne toujours, casse simplement les boutons d'historique.

Utiliser JavaScript est une option, mais assurez-vous d'inclure un lien disant "Si vous n'êtes pas automatiquement redirigé, veuillez cliquer ici". Vous devez en fait inclure ce lien dans les deux cas.

6
Brandon Wamboldt

php moyen de définir l'en-tête, vous redirigera vers test.php en 5 secondes:

header( "refresh:5;url=test.php" );

appeler avant d'envoyer une sortie réelle.

Et en javascript:

setTimeout(function () {
   window.location.href= url; // the redirect goes here
},5000); // 5 seconds
5
Sanjay

Les balises d'en-tête sont envoyées au chargement de la page, au navigateur, afin qu'il puisse rapidement rediriger l'utilisateur vers la page souhaitée sans se soucier de la rendre ou même de la charger dans l'historique. En tant que tel, vous ne pouvez pas appeler une redirection une fois la page déjà chargée, car les en-têtes ont déjà été traités.

Vous pouvez à la place effectuer cela avec:

header( "refresh:5;url=wherever.php" );

Ce qui définit essentiellement le <meta> tag dans les en-têtes de la page elle-même, ce qui signifie que vous n'avez pas besoin d'écrire le tag.

4
Death

D'après ce que vous dites, cela devrait théoriquement fonctionner alors:

URL: http://www.example.com/ticketgen/index.php?success=1&redir=1

    <?php
 $myredir = ($_GET['redir']);
    if ($myredir == 1)
    {
        header( "refresh:5;url=http://www.example.com/ticketgen/" );
    }
?>

Mais ça ne fait rien. Je l'ai également en haut de la page afin qu'il puisse envoyer les en-têtes.

cela ne fonctionne pas dans Firefox que je viens de découvrir.

2
Patrick K.

Je pense vraiment que la meilleure façon est header("Refresh: 10;url=../index.php"); Comme ce que j'ai fait avec mon travail.

1
user2851654

Vous pouvez le faire avec un petit morceau de javascript:

<script type="text/javascript" language="JavaScript">location.href = 'otherpage.php';</script>

Bien sûr, cela dépendra de la personne ayant activé JavaScript.

De toute évidence, pour définir le délai, vous pouvez utiliser quelque chose comme setTimeout:

<script type="text/javascript" language="JavaScript">
    setTimeout(function () {
                      location.href = 'stackoverflowhelp.php'; 
               }, 5000);
</script>
1
Jason Larke