Aller au contenu

Redirection en php ?

Featured Replies

Posté(e)

Bonjours, je cherche le moyen de rediriger sur une page via php.

J'ai essayé avec header("location: url"); mais il m'affiche le message d'erreur :

Warning: Cannot modify header information - headers already sent by (output started at url:13) in url on line 142

Url = l'adresse du dossier source du site dans le message d'erreur.

Comment faire ?

Merci d'avance pour les réponses.

Siron

Modifié par Siron

Posté(e)

Comme indiqué dans la doc PHP, tu ne dois faire aucun output avant d'utiliser la fonction Header. Donc, pas de echo, pas de print, pas même une ligne blanche avant le bloc php où tu appelles Header.

-> voir la doc...

Posté(e)
  • Auteur

Comme indiqué dans la doc PHP, tu ne dois faire aucun output avant d'utiliser la fonction Header. Donc, pas de echo, pas de print, pas même une ligne blanche avant le bloc php où tu appelles Header.

-> voir la doc...

Et si la redirection doit se trouver en plein millieu d'une page web ?

Posté(e)

Tu as ob_start().

Qui permet de bufferiser le contenu avant de l'envoyer au navigateur.

(c'est d'ailleurs une astuce pour rendre le traîtement plus rapide => envoi navigateur == LONG)

Posté(e)
  • Auteur

J'ai trouvé un truc simple qui fonctionne, mais heu, je suis pas sur que se soit conforme aux standards :

echo '<meta http-equiv="Refresh" content="1;URL=page2.html">'

Je crois que c'est pas conforme aux standards parceque cette ligne se trouve dès lors dans le body et non dans le head.

Mais quoi qu'il en soit ça marche bien en casi instantané.

Maintenant je suis confronté à une autre inconnue :

Comment vider les variable $_GET[''] aussitôt que on en à plus besoin ?

J'ai tenté naivement le $_GET[''] = ""; mais non, ça marche pas lol.

Posté(e)

en général on vide pas les GET. Mais unset(...) ira très bien. Et sinon, les redirections meta sont males car elles cassent le bouton "retour" (selon le W3, dans les astuces du validateur)

Posté(e)
  • Auteur

Flute ma suis trompé, c'est pas des variables get mais des post, j'ai tenté avec unset, mais ça na pas l'air de fonctionner.

Posté(e)

<meta http-equiv="Refresh" content="1;URL=page2.html"> >>>c'est pa du PHP c'est du html et c'est beaucoup plus facil de faire une redirection en html que en php, pk se prendre la tete ? 1 petite ligne suffit... :smack:

Posté(e)

En faite par exemple tu fais un test:

if ($_GET["url"]==page1)
{
include "page1.html";
}
else
{
die('<meta http-equiv="Refresh" content="1;URL=page2.html">');
}

Vlà qui est fait :ouioui:

Modifié par mc-sin

Posté(e)

Pour les redirections sauvages en milieu de page, j'utilise cette fonction PHP (pas ultra-propre, mais ça fonctionne) :

// fonction de redirection
function redir($url){
echo '<script language="javascript">';
echo 'window.location="'.$url.'";';
echo '</script>';
}

Posté(e)
Pour les redirections sauvages en milieu de page, j'utilise cette fonction PHP (pas ultra-propre, mais ça fonctionne) :

// fonction de redirection
function redir($url){
echo '<script language="javascript">';
echo 'window.location="'.$url.'";';
echo '</script>';
}

PHP + JAVASCRIPT = :chinois:

Pour une redirection :francais: tu crois pas?

Modifié par mc-sin

Posté(e)

En faite par exemple tu fais un test:

if ($_GET["url"]==page1)
{
include "page1.html";
}
else
{
die('<meta http-equiv="Refresh" content="1;URL=page2.html">');
}

Vlà qui est fait :chinois:

Et avec juste un

<?	include "page2.html"; ?>

Ça devrait faire une redirection transparente non ?

Une question que je me posais.

Posté(e)

PHP + JAVASCRIPT = :francais:

Pour une redirection :transpi: tu crois pas?

A utiliser uniquement en cas d'urgence extrème :chinois:

Posté(e)

PHP + JAVASCRIPT = :haine:

Pour une redirection :transpi: tu crois pas?

A utiliser uniquement en cas d'urgence extrème :yes:

Ok mais le:

 die('<meta http-equiv="Refresh" content="1;URL=page2.html">');

est certainement plus "propre"... car ça reste du PHP :D

Modifié par mc-sin

Posté(e)
  • Auteur

<meta http-equiv="Refresh" content="1;URL=page2.html"> >>>c'est pa du PHP c'est du html et c'est beaucoup plus facil de faire une redirection en html que en php, pk se prendre la tete ? 1 petite ligne suffit... :p

C'est ce que j'ai utilisé.

Et personne ne sait comment vider les variables post ?

Posté(e)
Oui j'ai essayé, et ça marche pas :zarb:

J'ai une page où je fais ça, mais je reposte la page directement après avoir fait le unset $_POST; . C'est peut-être pour ça que ça fonctionne...

Posté(e)

Reposte = actualise ?

Oui, je rappelle ma page avec ma fonction sauvage redir() :

// fonction de redirection sauvage
function redir($url){
echo '<script language="javascript">';
echo 'window.location="'.$url.'";';
echo '</script>';
}

Attention : à n'utiliser qu'en cas d'extrème urgence....

Normalement, un header() serait plus correct.

Posté(e)

j'ai pas tous lu

mais rediriger avec le PHP est impossible après le moindre affichage

en bon script tu ne doit afficher ton text que en fin d'exécution de script, de cette manière la redirection avec le header est efficace sinon la seul solution est le javascript en cours d'affichage mais bcp moins propre.

un script php doit etre décomposé en différenciant bien le script qui traite l'information et celui qui traite l'affichage.

dans tous les bon script l'affichage est géré en template (sorte de masque d'affichage), seul gros hic c'est de bien comprende ce type de fonctionnement qui demande de l'expérience et surtout de la patience.

l'idéal est de trouver un bon script complet et de l'adapter en utilisant ces fonctions internes.

exemple de mon site

adaptation de phpbb avec un gestionnaire de page

Posté(e)
  • Auteur

Mais pour la redirection j'ai ce qu'il faut avec la balise meta.

C'est vraiment un truc pour vider la "mémoire cache des variables post" que je cherche.

gvos_net ==> je vais essayer quand j'ai le temps et je te tients au courrant.

Posté(e)

C'est vraiment un truc pour vider la "mémoire cache des variables post" que je cherche.

Un truc du genre :

$keys = array_keys($_POST);
foreach($keys as $key)
unset ($_POST[$key]);

;)

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.