Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1513 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Système de chargement de ma page

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Système de chargement de ma page

n°1967155
tanshiro
Posté le 18-02-2010 à 11:44:03  profilanswer
 

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
mood
Publicité
Posté le 18-02-2010 à 11:44:03  profilanswer
 

n°1967176
billgatesa​nonym
Posté le 18-02-2010 à 12:26:57  profilanswer
 

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.

n°1967179
tanshiro
Posté le 18-02-2010 à 12:32:45  profilanswer
 

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
n°1967293
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 18-02-2010 à 16:53:31  profilanswer
 

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
n°1967517
tanshiro
Posté le 19-02-2010 à 11:30:59  profilanswer
 

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
n°1967552
rufo
Pas me confondre avec Lycos!
Posté le 19-02-2010 à 13:21:28  profilanswer
 

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
n°1967563
PunkRod
Digital Mohawk
Posté le 19-02-2010 à 13:45:52  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Système de chargement de ma page

 

Sujets relatifs
[PHP] Sécurité - Injection de javascriptsExiste-t-il un script JS pour modifier le code source d'une page html?
PHP dans formulaire et $_POST je dois cliquer deux fois ...[PHP/MYSQL] Definir un debut de journée.
Requete mysql qui s'execute avant l'execution de la pageProblème pour afficher une image en PHP
Besoin d'aide en PHPScript pour recuperer des données dans une page .htm
Terme pour appli type Java vs. PHP?récupérer les variables PHP dans un symbole flash (AS 2)
Plus de sujets relatifs à : [PHP] Système de chargement de ma page


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR