[PHP] Système de chargement de ma page

Système de chargement de ma page [PHP] - PHP - Programmation

Marsh Posté le 18-02-2010 à 11:44:03    

Bonjour à tous,
 
Le débutant en PHP que je suis bloque (encore un  :o  ).
J'essaye de mettre en place un sytème de chargement de ma Div centrale de mon site au point, le tout en PHP. Mais je bloque sur un truc.
 
 
Avant toutes choses, voici ce que j'aimerai faire :
 
La 1ere requête de mon client arrive, je charge ma page "index.php" avec un include de la page "accueil.php" sur ma DIV principale. Aucune variable n'est passée par l'URL.
 
Le client clique sur un lien (exemple [inscription]), ma page index.php s'appelle elle même en passant la variable "inscription" par l'URL. Ma page index.php fait un include de la page "inscription.php" sur ma DIV principale.
 
Le client clique sur un lien (exemple [connexion]), ma page index.php s'appelle elle même en passant la variable "connexion" par l'URL. Ma page index.php fait un include de la page "connexion.php" sur ma DIV principale.
 
Le client clique sur un lien (exemple [accueil]), ma page index.php s'appelle elle même en passant la variable "accueil" par l'URL. Ma page index.php fait un include de la page "accueil.php" sur ma DIV principale.
 
[...]
et ainsi dessuite pour tous les liens.
 
 
Dans le code ci-dessous :
contenu -> variable de l'URL qui passe le nom de la page où aller
$tab -> petit tableau qui me sert à faire un test de sécurité. (J'ai lu qu'il était plus sûr de faire comme ça, si vous avez des remarques/conseils, allez-y)
 
 
Le code de ma DIV principale en question :
 

Code :
  1. <?php if (empty($_GET['contenu']))
  2.   include("/accueil.php" );
  3. else {
  4.   /* On rempli un tableau 'tab' avec tous les liens possibles qu'on peut passer dans l'url pour le changement de pages */
  5.   $tab = array('accueil.php','inscription.php','connexion.php');
  6.   /* Puis on teste. Si 'contenu' est present dans l'URL et dans le tableau TAB alors on y va !*/
  7.   if (isset($_GET['contenu']) && in_array($_GET['contenu'],$tab)) {
  8.       header('location: /index.php?contenu');
  9.   }
  10.   /* Sinon, on se casse sur une page d'erreur*/
  11.   else {
  12.       include("/erreur.php" );
  13.   }
  14.       include("/$_GET['contenu']" );
  15. }?>


 
 
 
Si quelqu'un peut me dire où mon raisonnement merde ? J'ai un peu du mal à trouver maintenant...
 
 
 
Merci  :jap:


Message édité par tanshiro le 18-02-2010 à 12:29:50
Reply

Marsh Posté le 18-02-2010 à 11:44:03   

Reply

Marsh Posté le 18-02-2010 à 12:26:57    

Qu'est-ce qui ne marche pas ?
 
La barre oblique "/" au début du chemin est une source fréquente de problème. Elle indique l'utilisation d'un chemin absolu par rapport à la racine. Mais la racine est souvent différente de celle à laquelle pense le programmeur, car elle dépend de la configuration du serveur. Il vaut mieux utiliser des chemins relatifs, qui commence par "../" pour indiquer un répertoire au dessus ou rien pour indiquer le répertoire courant.

Reply

Marsh Posté le 18-02-2010 à 12:32:45    

Ouep, c'est vrai. J'ai remplacé.
 
Ben ça ne fonctionne pas dans le sens où mes deux if/else imbriquées font n'importe quoi ...
 
Le 1er chargement du index.php (sans paramètre d'URL donc) me renvois sur la page d'erreurs, le lien pour diriger sur la page inscription me renvois sur la page d'accueil... enfin du grand n'importe quoi. Je crois que j'ai merdé dans la conceptions de mes boucles.


Message édité par tanshiro le 18-02-2010 à 12:33:25
Reply

Marsh Posté le 18-02-2010 à 16:53:31    

header('location: /index.php?contenu');
tu passes par URL la variable "contenu" mais tu ne lui affectes aucune valeur.
 
ton idée de faire un tableau exhaustif de toutes les possibilités est excellente, d'un point de vue sécurité, faut juste faire attention à ce que ça soit évolutif (aujourd'hui, 4 pages, ok ;.. demain, 1000 pages ?)
 
Attention au "empty" également : empty vérifie le contenu de la variable, pas la variable en elle-même. Or quand tu appelles la page la première fois, $_GET['contenu'] n'existe pas ...
 
 
typiquement :

Code :
  1. // le tableau des valeurs de $_GET['contenu']
  2. $tab = array('accueil', 'contact', 'inscription');
  3. // appelle-t-on une des valeurs ?
  4. if ((isset($_GET['contenu'])) && (in_array($_GET['contenu'], $tab)))
  5. {
  6.     // oui, $_GET['contenu'] existe et dans le tableau des valeurs spécifiées
  7.     header('Location: index.php?contenu='.$_GET['contenu']);
  8.     exit(); // super important ! sinon ça continue l'exécution de la page
  9. }
  10. else
  11. {
  12.     // contenu vide, non existant ou non présent dans le tableau
  13.     if (!isset($_GET['contenu'])) // pas encore déclaré
  14.     {
  15.         include('accueil.php');
  16.     }
  17.     else // déclaré mais non présent ou vide
  18.     {
  19.         include('erreur.php');
  20.     };
  21. };


 
EDIt : précision, "header" n'est pas une redirection, à la base, mais plutôt une spécification du type de contenu qu'on envoie. Assure-toi bien qu'il n'y a réellement aucun code avant ...


Message édité par NewsletTux le 18-02-2010 à 16:56:37

---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 19-02-2010 à 11:30:59    

Merci NewsletTux, je vais faire ce que tu m'as dit.
 
J'ai continué à y bosser un peu hier et j'ai trouvé une solution qui marche parfaitement. Testé sur Firefox, Chrome et IE8.
Je donne le code à disposition, si ça peut servir à quelqu'un (faites un petit post si vous vous en servez, ça fait toujours plaisir de voir qu'on à fait un truc utile):
 

Code :
  1. <?php if (empty($_GET['contenu'])){
  2.              echo "Pas de Paramètre";
  3.              $goto = 'accueil.php';
  4.        } else {
  5.              /* On remplis un tableau 'tab' avec tous les liens possibles qu'on peut passer dans l'url pour le changement de pages */
  6.              $tab = array('accueil.php','inscription.php','connexion.php','connexion_ok.php','produits.php','presentation.php','paiement.php','contacts.php');
  7.             /* Puis on teste. Si 'contenu' est present dans l'URL et dans le tableau TAB alors on y va !*/
  8.             if (isset($_GET['contenu']) && in_array($_GET['contenu'],$tab)) {
  9.                  echo "Paramètre passé";
  10.                  $goto = $_GET['contenu'];
  11.             * Sinon, on va sur une page d'erreur. Cas ou quelqu'un essaye de chercher les pages dans l'adresse*/
  12.             } else {
  13.                  $goto = 'erreur.php';
  14.             }
  15.         }
  16.      include("./$goto" );
  17. ?>


 
 
Petite question au passage :
 
Un collègue qui regardait par dessus mon épaule hier me dit : "Ouéééé, tu utilises la méthode $_GET, c'est de la meeeeeerde ! Il faut utiliser $_POST ! Ca marche exactement pareil, mais ça permet de pas avoir les variables qui passent d'une page à l'autre qui s'affichent ! C'est vachement plus sécurisé que $_GET !".
C'est vrai ? Ca crain vraiment GET ? J'ai essayé de changer mes GET par des POST et manifestement ça doit marcher exactement pareil... plus rien ne tourne...
 
Un avis sur cette remarque ?  :??:


Message édité par tanshiro le 19-02-2010 à 11:34:05
Reply

Marsh Posté le 19-02-2010 à 13:21:28    

Ton collègue est un imbécile s'il pense que post est plus sécurisé que get :/
 
Si on fait "afficher la source", on verra ce qui sera passé dans le formulaire.  
Après, c'est au développeur de bien blinder son appli. Dans ton cas, t'as défini une liste de pages pouvant êtres affichées, donc ça limite les pbs. Tu pourrais compléter en vérifiant que le fichier .php existe bien sur ton serveur ;)
 
Pour info, ce que tu cherches à faire s'appelle MVC (Modèle Vue Contrôleur). Y'a un gros topic là-dessus sur ce forum, actuellement en première page. Là, ce que tu fais c'est surtout la partie "Contrôleur" les modèles et Vues étant probablement dans tes fichiers .pgp passés en include()...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 19-02-2010 à 13:45:52    

rufo a écrit :

Ton collègue est un imbécile s'il pense que post est plus sécurisé que get :/
 
Si on fait "afficher la source", on verra ce qui sera passé dans le formulaire.  
Après, c'est au développeur de bien blinder son appli. Dans ton cas, t'as défini une liste de pages pouvant êtres affichées, donc ça limite les pbs. Tu pourrais compléter en vérifiant que le fichier .php existe bien sur ton serveur ;)
 
Pour info, ce que tu cherches à faire s'appelle MVC (Modèle Vue Contrôleur). Y'a un gros topic là-dessus sur ce forum, actuellement en première page. Là, ce que tu fais c'est surtout la partie "Contrôleur" les modèles et Vues étant probablement dans tes fichiers .pgp passés en include()...


J'appuie ces propos intégralement :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed