Page 1 sur 1

Redirection sur une page possibilités

Posté : 27 mars 2010, 20:54
par diabless6
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:

Re: Tutoriel à proposer: Redirection sur une page

Posté : 27 mars 2010, 21:09
par AB
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 ?

Re: Tutoriel à proposer: Redirection sur une page

Posté : 27 mars 2010, 21:22
par SinBert
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 :)

Re: Tutoriel à proposer: Redirection sur une page

Posté : 27 mars 2010, 21:27
par stealth35
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

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 00:22
par diabless6
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.

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 00:25
par diabless6
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

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 00:30
par diabless6
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:

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 00:39
par Dr@ke
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.

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 00:59
par diabless6
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. :|

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 01:18
par Dr@ke
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 :)

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 05:35
par stealth35
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... ?

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 15:28
par Calimero
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).

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 15:52
par diabless6
[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:

Re: Tutoriel à proposer: Redirection sur une page

Posté : 28 mars 2010, 16:15
par AB
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: