lien vers une ancre avec des include

le barbare suisse
Invité n'ayant pas de compte PHPfrance

22 avr. 2007, 17:24

bonjour,

je suis en train d'élaborer un petit site en Html et je m'aide de PHP pour la structure.

voilà j'ai 3 div dans ma page :
menu avec comme titre : accueil, physique et maths
sous menu
contenu.

l'idée est que quand je clique sur maths par exemple, le sous menu de la page maths (ssmaths.htm) s'affiche dans le div sous menu, et la page maths.htm s'affiche dans le contenu.

voici le code de mon menu :

Code : Tout sélectionner

<a href="?page=0"> <b>accueil </a> <a href="?page=1"><b> Maths <a href="?page=2"><b>Physique
voici le code mon sous menu :

Code : Tout sélectionner

<?php // Récupération du paramètre GET avec PHP>=4.1 // (avec valeur par défaut=0) . if (isset($_GET["page"])) $page = $_GET["page"]; else $page = 0; // Contenu dépendant de la valeur du paramètre switch ($page) { case 1 : include("ssmaths.htm"); break; case 2 : include("ssphysique.htm"); break;; default : include("none.htm"); break; } ?>
(le none.htm c'est une page blanche sans rien)
et le code mon contenu :

Code : Tout sélectionner

<?php // Ici, c'est la zone centrale // Récupération du paramètre GET avec PHP>=4.1 // (avec valeur par défaut=0) . if (isset($_GET["page"])) $page = $_GET["page"]; else $page = 0; // Contenu dépendant de la valeur du paramètre switch ($page) { case 1 : include("maths.htm"); break; case 2 : include("physique.html"); break; default : include("accueil.htm"); break; } ?>
tout ceci marche très bien. là où cela se complique c'est pour mettre des ancres:


je vous donne d'abord le code de ma page ssmaths.htm (qui s'affiche dans le div sous-menu)pour exemple:

Code : Tout sélectionner

Maths<br /> titre1<br /> titre2<br /> titre3<br />
ce que je cherche à faire, c'est que quand je clique sur "titre1", que cela m'ouvre la page maths.htm dans le div contenu mais cette fois au niveau du titre1.


j'ai donc écris ceci dans ma page maths.htm :

Code : Tout sélectionner

....<h2 id="titre1"> Titre1</h2>
et ceci dans ma page ssmaths.htm :

Code : Tout sélectionner

<a href="?page=11">titre 1</a>
j'ai ensuite modifié dans ma page index.php le code des div sous-menu et contenu pour que sous menu laisse affiché ssmaths.htm pour la valeur $page=11 et que le contenu affiche maths.htm#titre1 pour la valeur $page=11 :

dans le div sous menu :

Code : Tout sélectionner

<?php // Récupération du paramètre GET avec PHP>=4.1 // (avec valeur par défaut=0) . if (isset($_GET["page"])) $page = $_GET["page"]; else $page = 0; // Contenu dépendant de la valeur du paramètre switch ($page) { case 1 : include("ssmaths.htm"); break; case 11 : include("ssmaths.htm"); break; case 2 : include("ssphysique.htm"); break; default : include("none.htm"); break; } ?>
et dans le div contenu :

Code : Tout sélectionner

<?php // Ici, c'est la zone centrale // Récupération du paramètre GET avec PHP>=4.1 // (avec valeur par défaut=0) . if (isset($_GET["page"])) $page = $_GET["page"]; else $page = 0; // Contenu dépendant de la valeur du paramètre switch ($page) { case 1 : include("maths.htm"); break; case 11 : include("maths.htm#titre1"); break; case 2 : include("physique.html"); break; default : include("accueil.htm"); break; } ?>
mais quand je veux afficher, easyphp me dit cela :

Warning: main(maths.htm#titre1): failed to open stream: No such file or directory in d:\logiciels\easyphp1-8\www\website5\index.php on line 187

Warning: main(): Failed opening 'physique.html#balise2' for inclusion (include_path='.;D:/logiciels/EasyPHP1-8\php\pear\') in d:\logiciels\easyphp1-8\www\website5\index.php on line 187


une solution pour que cela marche?(le système des liens vers les ancres)

merci d'avance

Eléphant du PHP | 177 Messages

22 avr. 2007, 18:00

  case 11 : include("maths.htm#titre1"); break; 
Ba include vas rechercher le fichier nomé maths.html#titre1
Donc vue l'arbor de ton histoire l'erreure retourné est normal.
Il m'est d'avis que tu dois passer aussi passer ton ancre via $_GET.
Puis une simple pseudo frame ne serait elle pas plus simple ??

Invité
Invité n'ayant pas de compte PHPfrance

22 avr. 2007, 18:03

et bien en fait ce n'est pas un site perso mais pour les cours, et il nous est très déconseillé d'utiliser des frame(sinon j'aurai fait avec c'est clair).


"Il m'est d'avis que tu dois passer aussi passer ton ancre via $_GET. "

comment dois-je faire cela? (je ne m'y connais pas du tout en php)

Mammouth du PHP | 991 Messages

22 avr. 2007, 18:04

ben une pseudo frame c'est un include ... passe peut etre plutot par une frame
DevOps, Symfony4, Hoa

Mammouth du PHP | 991 Messages

22 avr. 2007, 18:07

shit ... grilled

Alors pour le $_GET

une petite explition : www.truc.com/index.php?id=1

regarde attentivement le ?id=1
enfaite cela correspond dans la page index.php a la $_GET[id] = 1;
DevOps, Symfony4, Hoa

Invité
Invité n'ayant pas de compte PHPfrance

22 avr. 2007, 19:17

oui mais là dans mon cas je j'ouvre une page htm dans mon div contenu (et en plus à une certaine ancre).

que faudrait-il que je fasse?

Invité
Invité n'ayant pas de compte PHPfrance

22 avr. 2007, 23:36

j'ai trouvé grâce à un autre site d'aide en php :

il fallait mettre les liens sous la forme :


<a href="?page=2#balise1">balise 1</a>

voilà ;)