redirection des pages en index.php?page=accueil

lapinou8431
Invité n'ayant pas de compte PHPfrance

28 nov. 2012, 15:22

Bonjour, à tous
tout d'abord merci de me lire, je suis débutant en php et j'aimerai pouvoir rendre accessible toutes mes pages php comme ceci: index.php?page=accueil etc...
avez-vous un code php à me proposer ou tuto ?

cordialement

Avatar du membre
Mammouth du PHP | 1609 Messages

28 nov. 2012, 16:47

Si les pages existes et qu'elles sont dans le même répertoire que index.php, dans index.php :
include($_GET['page'].'.php')
:!: Modération : Ce code n'est pas sécurisé et ne doit pas être utilisé en l'état. Voir ici pour + d'infos
Développeur web depuis + de 20 ans

Eléphant du PHP | 267 Messages

28 nov. 2012, 19:48

Bonjour, à tous
tout d'abord merci de me lire, je suis débutant en php et j'aimerai pouvoir rendre accessible toutes mes pages php comme ceci: index.php?page=accueil etc...
avez-vous un code php à me proposer ou tuto ?

cordialement
salut,
ce que tu cherches à faire correspond à la partie Controller du modèle MVC
tu trouveras pleins de tutoriels sur le modèle MVC sur le net
@+
dix2

Avatar du membre
Mammouth du PHP | 1564 Messages

28 nov. 2012, 22:29

Bonsoir,

je pense que cette personne étant débutante, le mieux serai de le diriger vers la fonction switch

Dans ton cas:
if(isset($_GET['page'])) { // si la page est appelée
switch ($_GET['page']) {
    case 'accueil':
        include("texte_daccueil.php");
        break;
    case 'infos':
        include("informations.php");
        break;
    case 'infos2':
        include("infos2.php");
        break;
    default: // par défaut, si la page (get "page") n'a pas été trouvé
       include("texte_daccueil.php");
}
} else {
       include("texte_daccueil.php"); // si aucune page est appelée 
}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 nov. 2012, 01:29

Si les pages existes et qu'elles sont dans le même répertoire que index.php, dans index.php :
include($_GET['page'].'.php')
:!: IMPORTANT : Il ne faut jamais faire cela.
Ce simple morceau de code ouvre une faille béante de sécurité sur le site qui le comporte !

Toute variable envoyée par l'utilisateur doit être filtrée et validée avant d'être utilisée.
Soit par un switch comme indiqué ci dessus, soit manuellement en vérifiant la validité des infos attendues. PHP dispose d'ailleurs de plusieurs fonctions permettant d'effectuer cela facilement. Voici un tuto là dessus : http://www.siteduzero.com/tutoriel-3-42 ... ateur.html
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Mammouth du PHP | 1609 Messages

29 nov. 2012, 13:16

Oui oui c'est pas sécurisé, je reconnais.
Étant donné le niveau de lapinou je me suis dis que c'était mieux d'y aller par étape.
Je comptais aborder le sujet de la sécurité par la suite. Mais ça ne sera pas la peine. ^^

J'aurai simplement rajouté un système d'indexation des pages, plutôt que d’alourdir le code avec du switch à gogo et des tests compliqués :
$pages = array(
  'default_page' => 'nom_fichier.php',
  'nom_page' => 'nom_fichier.php',
  //...
);
$page = isset($pages[$_GET['page']]) ? $pages[$_GET['page']] : $pages['default_page'];
include($page);
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1564 Messages

29 nov. 2012, 14:44

J'aime bien ton idée avec le array, ceci dit, si tu doit mettre du code, genre des header ou rajouter des variable au dessus de ton include pour qu'ils soit justement pris en compte dans ton include, tu ne pourra pas.

Avatar du membre
Mammouth du PHP | 1609 Messages

29 nov. 2012, 14:58

Pour faire des choses simples genre $title = 'titre'; on peut complexifier le tableau. Par exemple :
$pages = array(
  'default_page' => array(
    'file' => 'nom_fichier.php',
    'title' => 'titre page'
  ),
  'nom_page' => array(
    'file' => 'nom_fichier.php',
    'title' => 'titre page'
  ),
  //...
);
$page = isset($pages[$_GET['page']]) ? $pages[$_GET['page']] : $pages['default_page'];
$title = $page['title'];
include($page['file']);
Par contre, si on veut faire des choses plus complexes, le tableau ne sera en effet pas suffisant.
Mais avant d'en arriver la, il faut se poser la question : ce bout de code ne pourrait-il/devrait-il pas aller dans nom_fichier.php ?
En l'occurence $title n'est pas utilisée entre sa déclaration et l'include, la variable pourrait donc tout à fait être déclarée dans nom_fichier.php.
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1564 Messages

29 nov. 2012, 15:19

Oui bien sur mais si par exemple c'est une page que seul des membre connecté peuvent accéder ? il fautdra rajouter un header(Location: connexion.php"); (exemple)

et là avec les array ce n'est pas possible.

PS: à défaut du détail, c'est $title = $page['file']['title']; pour le titre :P

Avatar du membre
Mammouth du PHP | 1609 Messages

29 nov. 2012, 15:25

Dans mon exemple $title = $page['title']; est la bonne écriture. $page['file']['title'] n'existe pas.
Et, dans mon exemple toujours, le test de session et la fonction header pourrait tout à fait être dans le fichier inclus (voir dans un fichier de test de la session qui serait inclus dans toutes les pages de l'accès membre).
Ou on pourrait ajouter un index 'member_space' => true et ajouter un test avant l'include pour faire la redirection si c'est une page de l'espace membre et que l'utilisateur n'est pas connecté.
$pages = array(
  'default_page' => array(
    'file' => 'nom_fichier.php',
    'title' => 'titre page'
  ),
  'nom_page' => array(
    'file' => 'nom_fichier.php',
    'title' => 'titre page'
  ),
  'une_page_membre' => array(
    'file' => 'nom_fichier.php',
    'title' => 'titre page',
    'member_space' => true
  ),
  //...
);
$page = isset($pages[$_GET['page']]) ? $pages[$_GET['page']] : $pages['default_page'];
if(isset($page['member_space']) && $page['member_space'] && /* utilisateur non connecté */)
  header('Location: index.php?page=login');
  exit();
}
$title = $page['title'];
include($page['file']);
Modifié en dernier par Saian le 29 nov. 2012, 15:54, modifié 1 fois.
Développeur web depuis + de 20 ans

lapinou8431
Invité n'ayant pas de compte PHPfrance

29 nov. 2012, 15:28

Bonjour,

merci de m'avoir répondu au mieux, je vous remercie par avance :)

cordialement

lapinou8431
Invité n'ayant pas de compte PHPfrance

29 nov. 2012, 15:57

if(isset($_GET['page'])) { // si la page est appelée
switch ($_GET['page']) {
    case 'accueil':
        include("texte_daccueil.php");
        break;
    case 'infos':
        include("informations.php");
        break;
    case 'infos2':
        include("infos2.php");
        break;
    default: // par défaut, si la page (get "page") n'a pas été trouvé
       include("texte_daccueil.php");
}
} else {
       include("texte_daccueil.php"); // si aucune page est appelée
}
quand j'utilise ce code la page est blanche.

Avatar du membre
Mammouth du PHP | 1564 Messages

29 nov. 2012, 15:59

C'est certainement parce que tu na pas les pages incluses...

essaye ceci:
if(isset($_GET['page'])) { // si la page est appelée
switch ($_GET['page']) {
    case 'accueil':
        //include("texte_daccueil.php");
        echo "inclusion texte d'accueil";
        break;
    case 'infos':
        //include("informations.php");
        echo "inclusion informations";
        break;
    case 'infos2':
        //include("infos2.php");
        echo "inclusion infos2";
        break;
    default: // par défaut, si la page (get "page") n'a pas été trouvé
      // include("texte_daccueil.php");
        echo "inclusion texte d'accueil (page non trouvée)";
}
} else {
       //include("texte_daccueil.php"); // si aucune page est appelée
        echo "inclusion texte d'accueil (pas d'isset)";
}

lapinou8431
Invité n'ayant pas de compte PHPfrance

29 nov. 2012, 22:42

salut,

le code que tu m'as donné fonctionne bien ! merci.

Avatar du membre
Mammouth du PHP | 1564 Messages

30 nov. 2012, 00:22

avec plaisir, tu peut mettre résolu :wink: