Redirection sur une page possibilités

Eléphant du PHP | 250 Messages

27 mars 2010, 20:54

Bonsoir,

La question de redirection d'une page est souvent récurrente, voici un petit tuto.

Alors j'ai peaufiné 3 solutions à moi que je souhaite partagé à utiliser sans modération :) :

Façon JavaScript:

On recherche le chemin par rapport au script actuel :
echo $_SERVER['REQUEST_URI']
affiche: /php/bonbon/mysql/index.php

Ensuite on retire index.php car on n'en à pas besoin:
$url=str_replace("index.php","",$_SERVER['REQUEST_URI']);
On applique ça à une partie du script, ici une condition :
if(!$resultat)
     {
        echo 'Ya une erreur !';
     }
else
    {
        echo 'Ok c\'est bon tout va bien ! <br/>';
        echo "<script type=\"text/javascript\">setTimeout(\"window.location='".$url."affichage.php'\",3000)</script>";
C'est sympa ici, car on à l'affichage "Ok c'est bon tout va bien !" et ensuite une redirection sur affichage.php dans 3secs :)
Mais attention car le Javascript peut être désactivé sur le navigateur client.

Façon meta http-equiv="refresh":

Dans la logique, cela ne serait pas bon, car les balises meta doivent être dans l'entête <head>...</head> . Donc probablement que le W3C ne l'acceptera pas tel quel dans la page.

Alors il nous faut l'adresse Host:
$host=$_SERVER['HTTP_HOST'];
(ici localhost)
et à nouveau
$chemin=str_replace("index.php","",$_SERVER['REQUEST_URI']);
$url=$host.$chemin; //On rassemble le tout
Puis en réutilisant notre condition au dessus :
else
    {
        echo 'Ok c\'est bon tout va bien ! <br/>';
        echo'<meta http-equiv="refresh" content="3; URL=http://'.$url.'affichage.php"/>';
Voir la méthode compatible W3C un peu plus propre de AB quelque posts en bas, merci AB :wink:


Façon en PHP


la fonction header() doit impérativement être utilisée avant tout code HTML (même un espace blanc). Sinon un message d'erreur de type "headers already sent by" est signalé.
sleep(3);header('Location: '.$url.'affichage.php');exit();
Et voilà, on a quelques façon différentes pour rediriger au bout de x secs sur une autre page. :wink:

:wink:
Modifié en dernier par diabless6 le 28 mars 2010, 17:21, modifié 8 fois.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

ViPHP
AB
ViPHP | 5818 Messages

27 mars 2010, 21:09

Tu postes dans le forum php, dommage que tu n'aies pas trouvé de solution php.
A propos un petit sleep avant le header location, ça pourrait pas le faire ?

Eléphant du PHP | 109 Messages

27 mars 2010, 21:22

Juste une chose qui m'a sautée aux yeux :
tu auras une jolie parse error à cause du deuxième echo du troisième block de code PHP ainsi que pour le dernier. Il doit manquer un antislash si je ne me trompe pas. ;)

Sinon, pour donné mon avi sur le tuto, je trouve que c'est une bonne initiative que de montrer les différentes façons de rediriger ou rafraîchir une page Web.
Mais je pense aussi qu'il manque celle du header("location: X"); avec un petit sleep() devant. :(

Bonne fin de soirée :)
ANSI <font> <font> <font> <li> <p> <title> Mar I/O .NET

ViPHP
ViPHP | 5462 Messages

27 mars 2010, 21:27

hello, ca sert a rien ton php avec ton javascript, tu peu recuprer tout en javascript direct avec windows.location
https://developer.mozilla.org/fr/DOM/window.location

Eléphant du PHP | 250 Messages

28 mars 2010, 00:22

Tu postes dans le forum php, dommage que tu n'aies pas trouvé de solution php.
A propos un petit sleep avant le header location, ça pourrait pas le faire ?
Bonsoir AB :wink:
else
    {
        echo'Enregistrement reussie ! votre Id:'.mysql_insert_id().'<br/>';
        sleep(3);header('Location: '.$url.'affichage.php');exit();

ça fonctionne aussi, mais ya une différence par rapport aux 2 autres. Le echo n'est pas interprété ! D'ailleurs, je ne sais pas pourquoi !?!

ps: Je poste ici car la section tutos est vérouillée.
Modifié en dernier par diabless6 le 28 mars 2010, 00:37, modifié 1 fois.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 250 Messages

28 mars 2010, 00:25

hello, ca sert a rien ton php avec ton javascript, tu peu recuprer tout en javascript direct avec windows.location
https://developer.mozilla.org/fr/DOM/window.location
Bonsoir stealth35 :wink:

J'ai appris un truc, c'est que le PHP est indissociable du Javascript. Comme l' homme est le complément de la femme et inversement (enfin dans l'espace Européen) :P
Modifié en dernier par diabless6 le 28 mars 2010, 00:33, modifié 1 fois.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 250 Messages

28 mars 2010, 00:30

Juste une chose qui m'a sautée aux yeux :
tu auras une jolie parse error à cause du deuxième echo du troisième block de code PHP ainsi que pour le dernier. Il doit manquer un antislash si je ne me trompe pas. ;)
Bonsoir SinBert :wink:

Ici: affichage.php'\",3000)</script>";

Nan! non!

Il échappe le "

:wink:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

28 mars 2010, 00:39

Il devait surement parler de ceci:
echo 'Ok c'est bon tout va bien ! <br/>';

Sinon encore, essaye d'indenter un peu et de mettre au début de ton script:
error_reporting(-1);
Exemple:
echo 'Enregistrement reussie ! votre Id:' . mysql_insert_id() . '<br/>';
sleep(3);
header('Location: ' . $url . 'affichage.php');
exit();
Pour débugger c'est plus simple :)
(Avec éventuellement des var_dump() de tes variables)

De plus si rien après le header, le exit n'est peut-être pas nécessaire.
Modifié en dernier par Dr@ke le 28 mars 2010, 01:42, modifié 1 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

28 mars 2010, 00:59

Il devait surement parler de ceci:
echo 'Ok c'est bon tout va bien ! <br/>';
Bien vu !, j'avais pas vu :mrgreen:

Pour le echo qui ne fonctionne pas devant le header, ça ne change rien du moins chez moi. :|
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

28 mars 2010, 01:18

Avant le header, c'est normal, tu auras surement une erreur de header already sent...
Sinon après, c'est normal aussi, il faut dans ce cas afficher l'echo dans l'autre page...

Enfin si j'ai bien compris le soucis :)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

28 mars 2010, 05:35

hello, ca sert a rien ton php avec ton javascript, tu peu recuprer tout en javascript direct avec windows.location
https://developer.mozilla.org/fr/DOM/window.location
Bonsoir stealth35 :wink:

J'ai appris un truc, c'est que le PHP est indissociable du Javascript. Comme l' homme est le complément de la femme et inversement (enfin dans l'espace Européen) :P
et... ?

ViPHP
ViPHP | 2287 Messages

28 mars 2010, 15:28

hello, ca sert a rien ton php avec ton javascript, tu peu recuprer tout en javascript direct avec windows.location
https://developer.mozilla.org/fr/DOM/window.location
Bonsoir stealth35 :wink:

J'ai appris un truc, c'est que le PHP est indissociable du Javascript. Comme l' homme est le complément de la femme et inversement (enfin dans l'espace Européen) :P
et... ?
Ca sent le troll tout ça ;) (finement amené au passage).

Histoire d'être complet, ce serait sympa de comparer ces trois solutions de redirection sur les aspects compatibilité, accessibilité et SEO (c'est à ce niveau qu'elles se distinguent vraiment).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 250 Messages

28 mars 2010, 15:52

[quote="Calimero"
Ca sent le troll tout ça ;) (finement amené au passage).

Histoire d'être complet, ce serait sympa de comparer ces trois solutions de redirection sur les aspects compatibilité, accessibilité et SEO (c'est à ce niveau qu'elles se distinguent vraiment).[/quote]

Moi je sens rien du tout, même pas le griller :mrgreen:

Malheureusement, rien n'est jamais complet :roll:
Modifié en dernier par diabless6 le 28 mars 2010, 17:23, modifié 1 fois.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

ViPHP
AB
ViPHP | 5818 Messages

28 mars 2010, 16:15

Ah oui effectivement, puisqu'il s'agit d'afficher un message suite à une condition, la fonction sleep n'est pas appropriée.

On va plutôt se concentrer sur ta solution 2 puisqu'elle permet de se passer de javascript pour un même résultat.

Façon meta http-equiv="refresh":

Dans la logique, cela ne serait pas bon, car les balises meta doivent être dans l'entête <head>...</head> . Donc probablement que le W3C ne l'acceptera pas tel quel dans la page.

echo'<meta http-equiv="refresh" content="3; URL=http://'.$url.'affichage.php"/>';[/php]
Bien donc il te suffit d'écrire tes balises méta dans l'entête head au bon endroit :
<?php 

$redirection = false;
$refresh = '<meta http-equiv="refresh" content="3; URL=http://monsite.com/mapage.php"/>';
$message = null;

//...
if(!$resultat)
     {
        $message = '<div>Y\'a une erreur !</div>';
     }
else
    {
        $message = '<div>Ok c\'est bon tout va bien !</div>';
        $redirection = true;
    }
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php if ($redirection) echo $refresh ?>
<title>Exemple</title>
</head>
<body>
<?php if (isset($message)) echo $message ?>
</body>
</html>
Voilà maintenant c'est plus propre.

En même temps c'est pas assez consistant pour faire un tuto.
Si on rangeait des scripts de quelques lignes dans la rubrique tuto, alors cette rubrique perdrait de son intérêt car il y en aurait trop et dès lors pour trouver un sujet il faudrait utiliser le moteur de recherche ce qui reviendrait au même qu'actuellement pour faire des recherches dans les messages :-k Et puis les tutos sont vérifiés, ce qui prend du temps...

Donc déjà il suffit de renommer le titre de ton topic pour qu'il apparaissent dans le moteur de recherche selon des termes choisis et ceux qui en auront besoin pourront y accéder facilement :wink: