Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TOUT VOTRE SITE EN UNE SEULE PAGE : INDEX.PHP?MODULE=TRUCBIDULE ...


Information sur la source

Catégorie :Astuces Niveau : Débutant Date de création : 11/06/2003 Date de mise à jour : 02/04/2007 22:20:12 Vu : 9 681

Note :
5 / 10 - par 6 personnes
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (44)
Ajouter un commentaire et/ou une note

Description

Ce script permet grâce à des includes de mettre tout votre site en une seule page. Comment ? grâce à la fonction include. Cette fonction permet d'inclure le code d'un fichier dans la page l'appelant.

Il vous paraitra peut-être un peu compliqué, mais il est très facile et simplifie grandement les choses.  
 

Source

  • // votre fichier index.php :
  • <?php
  • include "header.php";
  • // Récupération des variables d'url (méthode GET ou POST)
  • if (isset($_REQUEST['module']))
  • $module = $_REQUEST['module'];
  • else
  • $module = "accueil";
  • if (isset($_REQUEST['page']))
  • $page = $_REQUEST['page'];
  • else
  • $page = "index";
  • if (file_exists("modules/$module/$page.php") == true) {
  • include "modules/$module/$page.php";
  • } elseif (is_dir("modules/$module/")) {
  • include "modules/$module/index.php";
  • } else {
  • include "modules/accueil/index.php";
  • $module = "accueil";
  • }
  • include "footer.php";
  • ?>
  • // le fichier header :
  • <html>
  • <head>
  • <title>mon titre</title>
  • </head>
  • <html>
  • Menu :
  • <a href="index.php?module=lien1">lien1</a>
  • <a href="index.php?module=lien1&page=page2">lien1>page2</a>
  • // le fichier footer.php :
  • <br><br>
  • Tous droits réservés blablabla
  • </body>
  • </html>
  • // un fichier quelconque de contenu
  • voilà le contenu de cette page, qui sera inséré entre le fichier header et le fichier footer, inclus à partir de la page index.php?module=marubrique
// votre fichier index.php :

<?php

include "header.php";

// Récupération des variables d'url (méthode GET ou POST)
if (isset($_REQUEST['module']))
  $module = $_REQUEST['module'];
else
  $module = "accueil";
if (isset($_REQUEST['page']))
  $page = $_REQUEST['page'];
else
  $page = "index";

if (file_exists("modules/$module/$page.php") == true) {
  include "modules/$module/$page.php";
} elseif (is_dir("modules/$module/")) {
  include "modules/$module/index.php";
} else {
  include "modules/accueil/index.php";
  $module = "accueil";
}

include "footer.php";
?>

// le fichier header :

<html>
<head>
<title>mon titre</title>
</head>
<html>
Menu :
<a href="index.php?module=lien1">lien1</a>
<a href="index.php?module=lien1&page=page2">lien1>page2</a>

// le fichier footer.php :
<br><br>
Tous droits réservés blablabla
</body>
</html>

// un fichier quelconque de contenu

voilà le contenu de cette page, qui sera inséré entre le fichier header et le fichier footer, inclus à partir de la page index.php?module=marubrique  

Conclusion

le fonctionnement est simple : le site est articulé en rubriques pouvant contenir plusieurs pages.

on appelle la page index.php?module=marubrique&page=mapage si on veut aller à marubrique > mapage
on appelle la page index.php?module=marubrique si on veut aller à marubrique
on appelle index.php pour aller à la rubrique accueil

au niveau des fichiers, tu as un répertoies modules/ dans lequel pour chaque rubrique tu as un fichier de son nom contenant au minimum une page index.php.
lorsque le lien index.php?module=marubrique est appelé, le script inclus (s'il existe) le fichier modules/marubrique/index.php
lorsque le lien index.php?module=marubrique&page=mapage est appelé, le script inclus le fichier (s'il éxiste) modules/marubrique/mapage.php

si le lien index.php est appelé ou si le module demandé n'éxiste pas, c'est le fichier modules/accueil/index.php qui est inclus.

avant et après l'inclusion du fichier du contenu de la page sont inclus les fichiers header.php et footer.php, correspondants aux fichiers de structure du site, le haut de page, avec menu, titre, etc et le bas de page, avec les copyrigths, contact, ...  
 

Historique

02 avril 2007 22:20:13 :
Cette mise à jour corrige les erreurs survenant lors du passage de "register_globals" à Off et et "error_reporting" à E_ALL, ce qui est maintenant la configuration standard.

Commentaires et avis

signaler à un administrateur
Commentaire de Totofweb le 11/06/2003 21:26:04

N'hésitez pas à laisser vos commentaires ou vos améliorations.

Bien sûr, il ne s'agit là que de la base, on peut faire beaucoup mieux, mais après chacun voit en fonction de son besoin.

Totofweb

signaler à un administrateur
Commentaire de Tortuegeniale le 11/06/2003 23:10:18

sécurise ton script : met des expressions réguliere pour filter le nom du dossier et de la page.

De plus j'ai fait une source pour exactement le meme sujet http://www.phpcs.com/article.aspx?Val=403

signaler à un administrateur
Commentaire de JEROMAX le 12/06/2003 09:10:35

le probleme, c'est que si tu met, à la place de mapage, le nom d'un fichier qui existe, mais qui ne doit pas être visible par l'utilisateur(comme un fichier .htaccess), il va s'afficher en clair sur l'écran du client....

JEROMAX
[http://www.jeromax.free.fr]

signaler à un administrateur
Commentaire de Tortuegeniale le 12/06/2003 10:40:57

Jeromax&gt; Ouais mais la il explique juste comment la page fonctionne. Comme je l'ai dit sur ma source ki parle de la meme chose : c'est pas juste cette page qui doit etre sécurisé mais tout le site. Donc pour protéger ses pages qu'il ne veut pas qu'elles soient affichées y a le htaccess comùe tu dis mais aussi les sessions ...

signaler à un administrateur
Commentaire de JEROMAX le 12/06/2003 10:50:15

TortueGeniale&gt; Ouaip !

JEROMAX
[http://www.jeromax.free.fr]

signaler à un administrateur
Commentaire de Totofweb le 12/06/2003 11:59:48

Comme je l'ai dit, il s'agit là de la base.

Mais je vois pas trop comment un htaccess pourrait être affiché puisque le fichier doit automatiquement avoir l'extension .php (l'extension est automatiquement ajoutée)

signaler à un administrateur
Commentaire de revinc le 12/06/2003 13:13:09

ouais comme tu rajoute toi-même l'extension php, il n'y a normlalement aucun problème de sécurité

signaler à un administrateur
Commentaire de Tortuegeniale le 12/06/2003 13:14:45

nan il parlé d'afficher les pages que tu veux pas faire affiché non protégé par un htaccess

signaler à un administrateur
Commentaire de revinc le 12/06/2003 13:21:02

de toute façon avec cette méthode tu peux planquer tous tes fichiers php derrière un htaccess sauf le index.php et ça marchera très bien.

les pagesq que tyu veux pas afficher, tu les protège et c tout

signaler à un administrateur
Commentaire de ekinoks le 12/06/2003 13:26:23

g une question... comment tu fait si tu veux métre un FROM ?

signaler à un administrateur
Commentaire de revinc le 12/06/2003 13:28:04

c à dire ekinoks?

signaler à un administrateur
Commentaire de Tortuegeniale le 12/06/2003 13:34:18

revinc&gt; bah c ce que g dit 2 posts plus haut lol

Va voir ma source, le nombre de gens qui trouve des "failles" dans ce genre de script sans pouvoir le prouver c affolant lol. Avec de tel "hacker" internet n'a qu'a trembler lol
http://www.phpcs.com/article.aspx?Val=403

signaler à un administrateur
Commentaire de Totofweb le 12/06/2003 13:59:15

ah oui, j'oubliait : dans un formulaire, il faut faire :

&lt;form method="post" action="index.php"&gt;
&lt;input type="hidden" name="module" value="marubrique"&gt;
&lt;input type="hidden" name="page" value="mapage"&gt;

on ne peut pas mettre action="index.php?module=marubqieue&page=mapage", alors il faut mettres ces deux éléments en éléments cachés du formulaire

signaler à un administrateur
Commentaire de AtomWare le 30/06/2003 14:00:42

si ca marche pas c'est surement a cause de votre version de php :
il faut pas faire $page mais  $_GET['page']; pour les variables "externes"

signaler à un administrateur
Commentaire de dansap le 14/07/2003 18:03:03

Mais on peut faire la même chose avec les calques de Dreamweaver et 1 pointe de Javascript ...

signaler à un administrateur
Commentaire de Tortuegeniale le 14/07/2003 21:55:20

pff t super toi va te cacher, les calques et le javascript c coté client, la cette source c du php, donc coté serveur ...

signaler à un administrateur
Commentaire de dansap le 15/07/2003 15:33:11

Justement ça évite de surcharger le serveur avec des progs qui peuvent parfaitement être exécutés sur le client !

tiens c qui qui vas s'cacher là ?

Pour être plus constructif on pourrait comparer les avantages et inconvénients de ces deux méthodes ...

signaler à un administrateur
Commentaire de Tortuegeniale le 15/07/2003 21:06:37

mouarf ce qu'il fait c ce qu'on appele des pseudo-frames, ça sert a inserer dynamiquement le meme fichier sur plusieur page sans avoir a le foutre sur chaque page, t'arrive faire ça en javascript ? wouah appele billou il va surement avoir besoin de toi :)

signaler à un administrateur
Commentaire de sharkit le 18/10/2003 11:56:00

Ouaips,
Mais j'ai encore une question à la con : c'estbien, c'est mignon, mais si tu veux un titre différent à chaque page, tu fais comment ???
@
Sharkit

signaler à un administrateur
Commentaire de Totofweb le 19/10/2003 19:06:28

Ca dépend, il y a pleins de possibilités !

Ce que tu peux faire, c'est de mettre en plus de monmodule/monfichier.php, monmodule/monfichier.titre.txt.
Tu récupère le contenu de ce fichier et tu l'affiche dans &lt;title&gt;

Mais c'est une possibilité parmis pleins d'autres !!! Il y en a surement de meilleures

signaler à un administrateur
Commentaire de sharkit le 19/10/2003 19:26:26

C'est déjà un bon début pour moi
Je te remercie et ne manquerai pas de te montrer la bête en action ....
Merci encore
Sharkit

signaler à un administrateur
Commentaire de Totofweb le 19/10/2003 21:07:36

le mieux est bien sûr de te faire un solutions à toi, ça fait travailler les méninges et tu progresse bien ... :)

signaler à un administrateur
Commentaire de sharkit le 22/10/2003 00:43:56

Hello,
Toujours les memes qui s'accrochent :)
J'ai un soucis au niveau de l'include du module :
include "modules/$module/$page.php";
quand je suis sur la page accueil du site, ça me marque cela :

Warning: main(modules//index.php): failed to open stream: No such file or directory in /home/reunionb/www/soft/index.php on line 11

Warning: main(): Failed opening 'modules//index.php' for inclusion (include_path='') in /home/reunionb/www/soft/index.php on line 11

( je suis sur un site en construction mais pas à la racine pour tester les modules  :
http://www.reunion-bourbon.com/soft/index.php )

Si tu peux jeter un oeil et me contacter  ce serait sympa


@+++
Sharkit

signaler à un administrateur
Commentaire de Totofweb le 22/10/2003 13:26:09

Difficile de t'aider sans avoir vraiment le code sous les yeux ... Mais déjà, vérifie que le fichier que tu veux inclure éxiste. Ensuite, regarde pourquoi la variable module est nulle (peut-être que tu t'es trompé quand tu appelle la variable ou que $module est mal initialisée, pour cela fait echo "var_module:".$module."&lt;br&gt;";).

signaler à un administrateur
Commentaire de sharkit le 22/10/2003 13:34:43

C'est sympa, je te remercie pour le temps que tu as consacré pour moi
A bientôt
Sharkit

signaler à un administrateur
Commentaire de Do le 13/11/2003 22:37:32

je trouve ton code incomplet et il est remplis d'erreur, c'est beau être "une base" pour commencer, mais ça rien de fameux...

my 2 cents

signaler à un administrateur
Commentaire de Totofweb le 16/11/2003 16:42:57

En excluant le fait que se script requière  register_globals à on, quelles erreurs vois-tu et quelles corrections peux-tu y apporter ?

signaler à un administrateur
Commentaire de kankrelune le 26/12/2004 14:16:21

Moi comme je l'ais dis sur un autre post voila ce que j'utilise...

<?php
// on définit le chemin du site
$path=$HTTP_SELF;

// on fait la vérif
if( file_exists( "$module.php" ) )

// si ok on inclue
include "$path/$module.php" ;

// sinon retour à l'accueil
else include 'accueil.php';
?>

Le $path sert à empecher l'inclusion d'une page exterieur au site... page qui pourrait contenir un script dangereux... à premiere vue, je dis bien à premiere vue, tu n'y a pas pensé... .. .

C'est plus simple que ta source vu qu'il n'y a qu'une variable... après ça dépend de la taille du site... moi c'est un tout petit site pour une assos... alors je ne pense pas avoir besoins d'appeler une page précise... .. .
Mais le probleme que j'ais c'est que je voudrais authentifier la page appelée pour interdire l'inclusion de page qui n'ont pas à l'être (comme le dit Tortuegeniale) je cherche et si je trouve je fais signe... .. . :o)

Quand au titre de ma page et bien je fais ça...

<title><? echo("°oO cir-K-$module Oo°"); ?></title>

Rien de plus simple... .. . ;o)

Voili voilou... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de grandvizir le 22/06/2005 12:11:01

Je suis en train de préparer un super code source, et j'avais déjà pris la technique de totofweb. Voici mes conclusions.

Ca permet d'avoir un seul fichier de présentation dans lequel on colle tout ce qu'on veux. Sauf qu'il faut protéger par HTACCESS les fichiers qui serviront de calque: DENY FROM ALL

Il ne faut pas faire un truc du genre:
index.php?page=salut.php

Non, non, non !!! Plutôt:
index.php?page=UnNomDeCode

Et dans index.php, on aurait un tableau:
$Pages = array('NomDeCode' => '007.php', 'GirlRubrique'=>'nanas.php', ....... );

Ainsi, les HTACCESS ne pourront jamais être affichés, et surtout le nom des fichiers servant de calques seront aussi protégés.

Reste ensuite à vérifier que le paramètre "page" se retrouve dans le tableau. Dans le cas contraire, on affiche la page d'accueil.

Autre point important. En passant par les tableaux, il suffit de renommer une case pour que tous les liens du site se modifient automatiquement.

Problème pour finir. Dans ces genres de trucs, si on fait "Précédent" dans MSIE, alors tout formulaire est purgé. Pas le droit à l'erreur quand on pste un formulaire, donc...

signaler à un administrateur
Commentaire de Tortuegeniale le 22/06/2005 13:59:19

mieux vaut lire ça que d'être aveugle ^^

signaler à un administrateur
Commentaire de uzma le 26/08/2005 14:54:03

Bonjour !

moi j'ai un autre probléme j'ai fait toute mes page en php et j'aimerai qu'elle s'affiche au millieu de ma page quand j'ai cliquez sur un lien,a un endroit que j'ai définit sans scoll bare et iframe. j'ai donc fait le code suivant:

dans ma page d'accueil :

<? include("centre.php"); ?>

et dans une autre page qui s'apelle centre pour que puisse arriver les lien au millieu j'ai fait

elseif ($page=='FAQ') {include('faq.php');}

Mais je ne comprend pas pourquoi quand je clique sur le lien faq rien ne ce passe ca ne s'affiche pas au millieu comme je le souhaite et ca fait 1semaine que ej tourne autout du pot !!! SVP aidez moi !!!!

signaler à un administrateur
Commentaire de Totofweb le 26/08/2005 15:05:39

J'ai écrit ce code du temps où easyPHP mettait les register_globals à On par défaut. Maintenant c'est à Off pour des questions de sécurité (et c'est mieux).

Qu'est-ce qui ne va pas ?
Dans l'exemple de mon script, avec register_globals = On, si j'appelle index.php?mavariable=mavaleur, dans le script PHP la variable $mavariable sera définie avec $mavaleur. C'est dangereux car si le code est mal fait, on peut remplacer la valeur d'autres variables.
maintenant, il faut aller chercher les paramètres passés en url avec $_GET['mavariable'] et non plus avec $mavariable (ou $_POST, $_COOKIE, $_SESSION, ... suivant la méthode de passage de variable).

J'espère que ça pourra t'aider.

signaler à un administrateur
Commentaire de uzma le 26/08/2005 15:09:18

donc comment je peut faire pour que ca vienne au centre de ma page sans iframe et que quand je clique sur un lien de mon index ca aprraise au millieu ???

signaler à un administrateur
Commentaire de Totofweb le 26/08/2005 19:37:23

Je ne peux pas t'aider beaucoup plus avec le peu d'information que tu laisse et le flou qui règne sur ton message. Donne un peu plus de détails sur ton problème et je pourrais peut-être t'aider. Essayer d'expliquer correctement un problème permet aussi de se poser les bonnes questions.

signaler à un administrateur
Commentaire de uzma le 07/10/2005 18:31:05

aie !! maintenant j'ai un nouveau probléme !! de taille !!! c tout béte mais tres endicapent !!

a vous de voir !! ici http://mallet_p.club.fr/V4bonne/V4.php a parament tout va bien mais allé dans la rubrique symbole ( un des plu longue ! et la regarder les onglé anime et multimédia !! il ce son multiplier quel et ce prob ??? !!! aidez moi svp tennez si vous voulez voir la page http://mallet_p.club.fr/V4bonne.rar

signaler à un administrateur
Commentaire de CEPTA le 02/04/2007 19:11:39

slt,
vous avez pas un pt1 d'exemple sans variable global en entier correct...

signaler à un administrateur
Commentaire de Totofweb le 02/04/2007 22:21:31

La source est maintenant corrigée, sans nécessiter que register_globals soit à On.

signaler à un administrateur
Commentaire de kankrelune le 03/04/2007 02:26:48

Il reste une faille on peut faire une attaque directory transversal... .. .

function cleanVar($var)
{
return str_replace(array('../','..\\',"\0"),'',$var);
}

if(isset($_REQUEST['module']))
    $module = cleanVar($_REQUEST['module']);
         else
             $module = 'accueil';

if(isset($_REQUEST['page']))
     $page = cleanVar($_REQUEST['page']);
         else
             $page = 'index';

@ tchaOo°

signaler à un administrateur
Commentaire de thor_le_asgard le 27/05/2007 16:09:40

Une autre solution pour ce genre de script est d'utiliser un switch case comme ca pas de problemme de securité vu que l'on fait l'include en fonction de la variable envoyée. Je sais que c'est plus fastidieex mais c'est plus sécurisant !!

Tchao

signaler à un administrateur
Commentaire de pyrrah le 30/11/2007 19:03:49

Moi ça me rassure pas trop avec la faille des includes sous PHP qui à l'heure actuelle n'est toujours pas réglé...

signaler à un administrateur
Commentaire de kankrelune le 02/12/2007 14:14:42

Ca n'a pas de sens ce que tu dis PYRRAH... il n'y a pas de raison de régler une faille qui est due au développeur... la faille include n'est pas due à php mais à l'utilisation que tu en fais... en développant correctement ton script tu n'aura pas de faille à l'inclusion... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de fabrice88 le 21/12/2007 08:32:03

sa vaut quoi niveau referencement ?
vue qu'on a plus qu'une page pour le site on risque pas d'avoir un mauvais referencement ?

signaler à un administrateur
Commentaire de kankrelune le 21/12/2007 19:02:48

non ça change pas grand chose... par contre là ou ça peut jouer c'est si tu as trop de variable passées dans l'url... les googlebot apprécient moyennement mais...

www.monsite.ext/mapage.php?module=monmodule

ça pose pas spécialement de problème... .. .

signaler à un administrateur
Commentaire de Totofweb le 21/12/2007 20:06:21

Fabrice88> J'ai écrit cette source il y a déjà un certain temps, il pourrait être légèrement amélioré. Je le laisse pour que ça donne juste une idée de méthode que chacun peut réimplémenter et personnaliser en fonction de ses besoins.
Pour ce qui est du référencement google, il t'est possible d'utiliser l'url-rewriting pour faire semblant d'avoir plusieurs pages simples. Tu as donc le beurre et l'argent du beurre : tu gères ton site avec un modèle de page unique, mais les url de ton sites restent simples et google croit voir un fichier par page. Saches toutefois que mapage.php?module=monmodule ne pose pas de problème à google.

Tu peux alors avoir quelquechose du genre :
www.monsite.ext/monmodule/mapage/
www.monsite.ext/monmodule/mapage.html
www.monsite.ext/mapage-id.html

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,156 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.