Version complète: sur le forum Webmaster Hub : Themeswitcher en PHP
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
lupucide
Bonjour (ou bonsoir).

Mon premier thread sur le Hub, j'en ai la larme à l'oeil tongue.gif

Sur un site en construction (pas grand chose, juste un bloc-notes sur Firefox, Apache et PHP) je place un petit formulaire :
CODE
<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 :
CODE
<?php
setcookie ('style', $_POST['design'], time()+365*24*3600, '/');
header ('Location: index.php');
?>


Je récupère ensuite le cookie avec ceci :
CODE
<?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.gif

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.
Jok
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.
CODE
<input type="hidden" name="redir" value="<?=$_SERVER['PHP_SELF']?>" />


Puis dans ton fichier themeswitcher.php tu mets :
CODE
<?php
setcookie ('style', $_POST['design'], time()+365*24*3600, '/');
header ('Location: '.$_POST['redir'].'');
?>


Et normalement tout devrai fonctionner. smile.gif
Thanh
Eventuellement, tu peux sans le champ input caché, utiliser directement $_SERVER["HTTP_REFERER"]

^_^
lupucide
CITATION(solo @ jeudi 24 février 2005, 12h59)
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 :
CODE
<?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.
Jok
Effectivement solo happy.gif
On pouvais faire plus simple smile.gif

En espérant que personne ne tombe par hasard sur la page themeswitcher.php sans venir du site wink.gif
Jok
Arg double post ... désolé wacko.gif
Thanh
CITATION(lupucide @ jeudi 24 février 2005, 12h44)
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 :
CODE
<?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.
*


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 smile.gif
lupucide
Je me renseigne donc.

http://fr2.php.net/manual/fr/function.parse-url.php
CITATION
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 ?
CODE
<?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"].'');
}    
?>
Jok
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.
lupucide
CITATION(Jok @ vendredi 25 février 2005, 11h27)
Pourquoi localhost ?
Ah p'tet pour l'exemple...


Oui, pour l'exemple.

Si le code un peu mieux présenter intéresse quelqu'un je l'ai mis à disposition ici : http://hiaho.free.fr/index.php?page=themeswitcher-PHP
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.