8722 sujets

Développement web côté serveur, CMS

Bonjour,

Derriere ce titre un peu barbare se cache une très grande frustration. En effet, je dois réaliser une ancre sur une page, sachant que j'ai quelques restrictions :

Sur ma page index, il m'est obligé (j'ai bien dit OBLIGE !) d'utiliser ce code pour éviter toute injection d'une autre page (pour pirater, pas besoin de le préciser Smiley cligne )

<?php
		if(!empty($_GET['page']))
		{
			if(file_exists('includes/' . $_GET['page'] . '.php') AND !preg_match("/(\.|config|inc)/iU", $_GET['page']))
			{
				include("includes/".$_GET['page'].'.php');
			}
			else
			{
				include("includes/accueil.php");
			}
		}
		else
		{
			include("includes/accueil.php");
		}
	?>


Je dois faire un lien vers une ancre d'une autre page à partir de la page index. Malheureusement, avec le code cité ci-dessus, il m'est impossible de mettre un bête "#ancre" à la suite du lien.

J'ai donc contourné cette erreur en stockant l'ancre dans une variable "niveau" pour le lien.

<a href="index.php?page=formations&amp;niveau=4-3">4-3</a>



Dans le fichier formation.php, je récupère la variable ainsi :

<?php

	if (isset($_GET['niveau'])){
	?>
		<a href="#<?php $_POST['niveau']; ?>"></a> <!-- Code Faux -->
	<?php
	}
	?>



et l'ancre pointe bien sur la ligne que je souhaite :

<a name="4-3"><h1>4-3</h1></a>



Le problème, c'est que le lien automatique vers l'ancre ne s'effectue pas. Le seul moyen que je connaisse est un raffraichissement de page par la balise meta dans un head, mais je trouve ça très lourd.

N'existe-t'il pas un autre moyen pour acceder à cette ancre ?!?

Merci,
Guillaume
Modifié par Killaman (03 May 2007 - 14:08)
Une ancre n'a rien à voir avec PHP. #ancredechine renverra vers une balise ayant un name="ancredechine" ou (et c'est le mieux) vers id="ancredechine".

Après 2 possibilités :
- #ancredechine se trouve sur la page auquel cas le navigateur te fait pointer directement dessus
- #ancredechine est sur une autre page dans ce cas il faut préfixer ton lien de l'URL de la page concernée (<a href="mapage.html#ancredechine">mon texte de lien</a>).

Voilou
C'est bizarre, parce que ce type de lien est censé fonctionner normalement :
page.php?param1=123&param2=def#ancre
Si avec un lien comme celui-là param2 inclut #ancre, il doit y avoir un bug quelque part.
Au pire, ce n'est pas très difficile de bidouiller pour enlever ça avec un code du genre :
$_GET['param2'] = preg_replace("§#.*$§", "", $_GET['param2']);
Modifié par QuentinC (02 May 2007 - 19:18)
Non, en fait, je crois que je n'ai pas bien entouré le problème :

<a href="index.php?page=formations&amp;niveau=4-3">4-3</a>


La variable niveau contient bien ma valeur 4-3, je l'ai verifié sur la page formation avec un echo, aucuns problèmes.

Le probleme, c'est que lorsque je fais mon test de sécurité (le premier code) la direction de ce lien s'effectue d'abord sur formation.php (logique). Je me retrouve donc dans le haut de page, comme pour un lien normal...

J'aimerai que cette page se raffraichisse en me mettant directement sur l'ancre définie par "#<?php $_POST['niveau']; ?>" (je ne vois aucune autre possibilité avec les restrictions qui m'ont été faites... Smiley sweatdrop )

Comme je l'ai dit, je ne connais comme moyen qu'un refresh dans une meta d'un header, mais est ce que ça vaut la peine de reload totalement la page ou bien il y'a plus simple ?
Je ne comprends pas pourquoi tu tiens absolument à mettre 4-3 dans une variable alors que tu veux un comportement d'ancre. Ca ne pose aucun soucis de mettre une ancre dans un lien et ça passera très bien au travers de tes conditions de sécurité.

Est-ce que ta page "formation.php" est mono-page, multi-page ?

Parce que ça me paraît bien compliqué pour une si simple chose ...
Salut,

if (isset($_GET['niveau'])){
	?>
		<a href="#<?php $_POST['niveau']; ?>"></a> <!-- Code Faux -->
	<?php



ca fait deux fois qie tu parles de $_POST['niveau']. je sais que ça n'arrangeras pas ton pb mais ne serait pas plutôt

<a href="#<?php $_GET['niveau']; ?>">

pascal
@ CPascal, oui, déjà, grosse inatention de ma part, je te remercie.

@The Jedi, un très grand merci, je pensais que le fait de noter comme lien :

<a href="index.php?page=formations#4-3">4-3</a>


serait interprété comme recherche la page "formations#4-3.php" mais ce n'est pas le cas de ma condition de sécurité.

Mais ce n'est pas le cas, tout marche impec !

Encore un gros merci à vous deux. Smiley lol
;)

Tout ce qui situé à droite d'un # n'est pas considéré comme un paramètre de page. Je n'ai pas fait le test mais je ne suis même pas sûr que ça apparaisse dans le QUERY_STRING en PHP.

Comme quoi tu te compliquais la vie pour pas grand chose Smiley cligne