PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 03-09-2009 16:16:16

george
Membre
Inscription : 03-09-2009
Messages : 12

include / include($pageOK[$_GET['page']])

bonjour, (je suis débutant en php) et je crois avoir bien compris le passage de variable en get. Lorsqu'il s'agit de page fixe  le nom de la variable est défini à la création et il est possible de le mémoriser dans l'array. Mais lorsqu'il s'agit de pages qui seront créées selon le besoin comment utiliser le get sans mémoriser la nouvelle variable dans l'array.
j'ai appliqué le script suivant qui fonctionne mais suis je dans la bonne démarche.

$array  = array_push_assoc($pageOK, $_GET['page'], 'page_Actualite/'. $_GET['page'].'.htm');
function array_push_assoc($array , $key, $value){
$array[$key] = $value;
return $array ;
}
et un   elseif ( (isset($_GET['page'])) && (isset($array[$_GET['page']])) ) {
    include($array[$_GET['page']]);   // on appelle le contenu central de la page

Merci de vos conseils en espérant avoir été clair.

Hors ligne

#2 03-09-2009 18:52:50

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : include / include($pageOK[$_GET['page']])

Salut,

Analysons ce que tu fait :
Tu récupère la page demandée par le visiteur (qui peut être n'importe quoi).
Tu met tout ça dans ton tableau. (Cela n'y sera que le temps du script)
Ensuite dans ton elseif tu vérifie que la page que tu as mis dans ton tableau est bien dans celui-ci et (comme normalement elle y est) tu l'inclue et ce, même si elle n'existe pas !!!

Donc si je fait http://tonsite.com/index.php?page=nimportequoi
Tu vas inclure : page_Actualite/nimportequoi.htm
nimportequoi pouvant le cas échéant devenir quelque-chose de pas très sympathique...

Donc une règle de base : toujours vérifier ce que demande le visiteur avant d'en faire quoi que ce soit (et qui plus est un include)
Ensuite, inutile de mettre ta page dans un tableau, vérifie simplement que $_GET['page'].'.htm' est bien dans le répertoire page_Actualite/. Ce sera plus simple et plus sécurisé.


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#3 04-09-2009 12:37:46

george
Membre
Inscription : 03-09-2009
Messages : 12

Re : include / include($pageOK[$_GET['page']])

Merci pour la réponse. Je pensais bien que ma façon de faire était simpliste d'où mon interrogation
Je suis débutant et m'intéresse au PHP pour le plaisir d'apprendre sans prétention.

Je suppose que je dois utiliser une fonction qui va lister le contenu du répertoire et vérifier la présence par des if de mon fichier
mais je ne sais pas encore comment faire pour appeler une fonction en passant comment variable le nom du répertoire.
existe t-il un tuto que je pourrais étudier  ?
Encore merci

Hors ligne

#4 04-09-2009 12:48:12

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : include / include($pageOK[$_GET['page']])

Salut,

Pour tester l'existence d'un fichier, tu as la fonction file_exist().
Dans la doc tu as des exemples : http://fr2.php.net/manual/fr/function.file-exists.php


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#5 04-09-2009 13:17:08

george
Membre
Inscription : 03-09-2009
Messages : 12

Re : include / include($pageOK[$_GET['page']])

merci pour l'info

Tout en posant ma question j'ai cherché à trouver une solution et je me suis orienté vers ce script :

<?php
$page=$_GET['page'].'.htm';
$dir = "page_Actualite";

// Ouvre le dossier et liste tous les fichiers
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {

            if ($page == $file) {
            include('fichier.php'); }
            else {
            include('accueil.php'); }
        }
        closedir($dh);
    }
}
?>

Suis je dans la bonne direction ou je me complique trop la vie.
encore merci

Hors ligne

#6 04-09-2009 14:33:41

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : include / include($pageOK[$_GET['page']])

As tu testé ton bout de code ?

Si de nouveau nous l'analysons au niveau de la boucle :
Supposons que dans page_Actualite il y ai 3 fichiers :
a.htm, b.htm et c.htm et certainement "." et "..".
Le visiteur demande page = c
$page contient donc "c.htm"
readdir lit les fichiers les un après les autres :
1er tour de boucle :
$file = "a.htm" donc différent de $page => include accueil.php.
2eme tour de boucle :
$file = "b.htm" donc différent de $page => include accueil.php.
3eme tour de boucle :
$file = "c.htm" donc égal à $page => include fichier.php (a mon avis ce serai plutôt $page).
Tu as donc inclus 2 fois la page d'accueil puis la page demandée...!!
Et si il a d'autre fichiers à la suite, tu va de nouveau inclure la page d'accueil.

Essaye donc d'utiliser la fonction file_exist qui t'évitera une boucle.


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#7 04-09-2009 16:48:49

george
Membre
Inscription : 03-09-2009
Messages : 12

Re : include / include($pageOK[$_GET['page']])

Merci beaucoup pour la leçon. J'ai pris du plaisir à tester et à essayer de comprendre.
Au final j'ai écrit le script suivant qui fonctionne et qui combine l'array et le file_exists:

$filename = 'page_Actualite/'. $_GET['page'].'.htm';


  // je teste que le paramètre d'url existe et qu'il est bien autorisé dans l'array
  if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
    include($pageOK[$_GET['page']]);   // on appelle le contenu central de la page
}

// sinon si fichier existe dans répertoire page_Actualite
  elseif (file_exists($filename)) {
    include $filename;
}
// sinon include de la page par défaut
else{
  // on affiche  par défaut les éléments du portail principale
    include ('index.php');   
   
}
Cordialement

Hors ligne

Pied de page des forums