Aller au contenu

Themeswitcher en PHP


Sujets conseillés

Posté (modifié)

Bonjour (ou bonsoir).

Mon premier thread sur le Hub, j'en ai la larme à l'oeil :P

Sur un site en construction (pas grand chose, juste un bloc-notes sur Firefox, Apache et PHP) je place un petit formulaire :

<form action="themeswitcher.php" method="post">
<p><label for="themeswitcher">Themeswitcher</label></p>
<p><select name="design">
 <optgroup>
 <option selected="selected">Hiaho</option>
 <option>Classique</option>
 </optgroup>
</select>
<input type="submit" value="OK" /></p>
</form>

qui appel donc le fichier themeswitcher.php composé de :

<?php
setcookie ('style', $_POST['design'], time()+365*24*3600, '/');
header ('Location: index.php');
?>

Je récupère ensuite le cookie avec ceci :

<?php
if (isset($_COOKIE['style'])) {
$style = strtolower($_COOKIE['style']);
}
else {
$style = 'hiaho';
}
?>

<link rel="stylesheet" href="<?php echo 'themes/'.$style.'.css' ?>" type="text/css" />

Tout fonctionne, c'est que du bonheur, de la joie plein la tête.

Le problème est que le script redirige vers index.php mais les URL seront plutôt du style index.php?page=firefox.

Je me pose donc de savoir si il est possible de faire passer l'URL en cours au script pour que celui-ci redirige vers la page qui était consulté.

Bonne question qui pourrait en intéresser plus d'un je pense. J'ai chercher pendant un petit moment sans résultats, si quelqu'un pouvait m'éclairer sur ce point :rolleyes:

Note au modérateurs : je m'excuse du titre ne décrivant pas très bien le sujet mais j'ai eu du mal à mieux le décrire.

Modifié par lupucide
Posté

Tu mets un champ input hidden dans ton formulaire ou tu mets dedans la variable php $_SERVER['PHP_SELF'] qui contient l'url de la page courante.

<input type="hidden" name="redir" value="<?=$_SERVER['PHP_SELF']?>" />

Puis dans ton fichier themeswitcher.php tu mets :

<?php
setcookie ('style', $_POST['design'], time()+365*24*3600, '/');
header ('Location: '.$_POST['redir'].'');
?>

Et normalement tout devrai fonctionner. :)

Posté

Eventuellement, tu peux sans le champ input caché, utiliser directement $_SERVER["HTTP_REFERER"]

^_^

Posté (modifié)
Eventuellement, tu peux sans le champ input caché, utiliser directement $_SERVER["HTTP_REFERER"]

J'ai bien essayer ça mais mon serveur local (WAMP5) me dit que je n'ai pas les droits, je n'ai donc pas persister la dessus car sur un hébergement cela pourrais me donner la même chose et je ne pourrais pas modifier la configuration Apache ou PHP.

Jok => J'essaye ça et je donne des nouvelles.

Merci pour votre aide à tous les deux.

[EDIT]

Parfois il vaut mieux allez se coucher que s'énerver :

<?php
setcookie ('style', $_POST['design'], time()+365*24*3600, '/');
header ('Location: '.$_SERVER["HTTP_REFERER"].'');
?>

Et ça fonctionne. J'avais juste oublier d'entourer le HTTP_SERVER lors de mes essais :run:

Merci encore pour votre aide.

Modifié par lupucide
Posté

Effectivement solo ^^

On pouvais faire plus simple :)

En espérant que personne ne tombe par hasard sur la page themeswitcher.php sans venir du site ;)

Posté
J'ai bien essayer ça mais mon serveur local (WAMP5) me dit que je n'ai pas les droits, je n'ai donc pas persister la dessus car sur un hébergement cela pourrais me donner la même chose et je ne pourrais pas modifier la configuration Apache ou PHP.

Jok => J'essaye ça et je donne des nouvelles.

Merci pour votre aide à tous les deux.

[EDIT]

Parfois il vaut mieux allez se coucher que s'énerver :

<?php
setcookie ('style', $_POST['design'], time()+365*24*3600, '/');
header ('Location: '.$_SERVER["HTTP_REFERER"].'');
?>

Et ça fonctionne. J'avais juste oublier d'entourer le HTTP_SERVER lors de mes essais :run:

Merci encore pour votre aide.

<{POST_SNAPBACK}>

Dans ce cas là tu as parse_url() qui te permet d'extraire l'host d'une url et puis tu testes que le referer est bien un lien interne :)

Posté

Je me renseigne donc.

http://fr2.php.net/manual/fr/function.parse-url.php

Cette fonction n'est pas destinée à valider des URL, mais à les scinder en parties. Les URL partielles sont aussi acceptées, parse_url() essaie alors de l'analyser correctement.

Ce ne serait pas mieux ?

<?php
setcookie ('style', $_POST['design'], time()+365*24*3600, '/');

$url = $_SERVER["HTTP_REFERER"];
$host  = 'localhost';
$search = strpos($url, $host);
if ($search === false) {
echo 'Erreur !';
}
else {
header ('Location: '.$_SERVER["HTTP_REFERER"].'');
}
?>

Posté

Pourquoi localhost ?

Ah p'tet pour l'exemple...

Oé se serai mieux dans ce cas.

Au moins tu es sur que la personne vient bien de ton site.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...