Newsgroup: it.comp.www.php
Titolo: Suggerimento su utilizzo include

Ciao a tutti,
sto facendo un piccolo sito di gestione personale e avrei pensato a 
organizzarlo in questo modo (sintetizzando): ho una pagina main.php 
all'interno della quale ho due <div>: uno per il menù e l'altro per i 
contenuti. All'interno dei due <div> ho messo solo due istruzioni 
include(): per il menù, un include('menu.php'), mentre per la pagina dei 
contenuti un include('nome_file_da_scelta_menu.php').
In questo modo richiamo sempra la pagina main.php passando un parametro 
che indica la pagina da visualizzare nel contenuto (in pratica, i link 
del menu sono del tipo:
<a href="main.php?pagina=file_da_visualizzare.php")>;)
Ora, funzionare funziona ma, dato che non me ne intendo, vorrei sapere 
cosa ne pensate come soluzione. Al di là che sia ortodossa o meno, mi 
interessa sapere se è corretta o se presenta dei problemi dal punto di 
vista del funzionamento o della sicurezza.
Vi ringrazio
Saluti
Libra

 Libra
Saludos
David
-- 
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1

 David
Libra

 <a href="main.php?pagina=file_da_visualizzare.php")>;)
Con questo approccio č opportuno verificare attentamente il
parametro 'pagina' che viene passato al file main.php. Assicurati
che sia una pagina tra quelle che effettivamente possono essere
incluse e assicurati che non sia possibile far includere pagine
remote.
Una possibile strada, se le pagine da includere non fossero molte,
potrebbe esser quella di prevedere un file di configurazione
contenente un array in cui ogni chiave corrisponda ad una pagina da
includere, per esempio:
File config.php
<?php
$pages = array(1 => 'home.php'
               2 => 'chi_siamo.php'
               3 => 'contattaci.php');
...
?>
In questo modo il parametro da passare non č piů il nome del file ma
un semplice numero intero.
main.php?pagina=1
Poi in main.php metti qualcosa del genere:
<?php
include 'config.php';
if (isset($_GET['pagina']) &&
    trim($_GET['pagina']) != '' &&
    array_key_exists($_GET['pagina'], $pages))
{
  $page_to_include = $pages[$_GET['pagina']];
}
else
{
  $page_to_include = 'home.php'; // pagina di default
}
include $page_to_include;
?>
Naturalmente questa vuole essere solo una traccia. Al posto
dell'array potresti usare una tabella di un database, aggiungendo
cosě ulteriori informazioni per ogni pagina richiesta (e magari
prevedere un semplice pannello di controllo con cui gestire tale
tabella).
Comunque, comunque prima di includere un file devi assicurarti che
esista e che sia uno tra quelli che puoi effettivamente includere.
Ciao.
-- 
Long John

 Libra
ciao


 
[cut]
Ok, mi č chiaro. Stante il fatto che, a questo punto, mi sembra comunque 
piů conveniente passare per il DB, butto lě l'ultima pensata: se alla 
richiesta facessi prima un controllo sul server per vedere se il file 
esiste o meno, dovrei poter evitare i problemi che hai menzionato.... 
non so, č la prima cosa che mi viene in mente.
A questo punto devo pensare come organizzare il tutto per minimizzare il 
numero di query al DB (in modo da non dover accedere al DB ad ogni click 
su un link...).
Mi sa che mi rifarň vivo presto   :-)
Ciao e grazie
Libra

 tabella).
Domanda banale: ovviamente non devo fare una query sul DB ad ogni click, 
vero? dovrei trovare il modo di creare un array contenente le voci del 
menu' al primo accesso, magari utilizzando le sessioni. E' corretto o ho 
detto una ca%%ata?
Grazie
Ciao
Libra

 Libra
Saluti


 nono, mi sembra anzi la cosa più logica.
 > alla prima "visita" dell'utente query il DB, riempi l'array e lo butti
 > in una variabile di sessione. così ogni volta prendi i valori dalla
 > variabile di sessione e sei a posto.
Segnalo un paio di svantaggi nella scelta di usare un database per 
archiviare i file "autorizzati" all'inclusione, ovviamente IMHO
- ogni volta che vuoi inibire un file da includere o aggiungerne di 
nuovi dovresti accedere al database; un umile e leggerissimo file di 
testo potrebbe rendere la cosa piu' pratica e veloce rispetto a una 
connessione e una o piu' query.
- eventuali modifiche non hanno effetto su coloro i quali sono gia' in 
sessione.
Suggerisco (per riallacciarmi al discorso della tecnica di include 
legata alla sicurezza...) che, nel caso fosse possibile, 
l'implementazione di 
http://www.modsecurity.org/
 per il web server 
apache risulta molto utile per evitare query string malevoli.
--
~omar

 sessioni.
Quello di memorizzare i dati in sessione al primo collegamento è una
possibile strada. Ha il vantaggio di non dover eseguire la query
tutte le volte che viene richiesta una pagina, ma lo svantaggio che
eventuali modifiche sulla tabella di gestione delle pagine non
avrebbero effetto su coloro che al momento della modifica fossero
già collegati. Poi, naturalmente, dipende anche da quanti dati devi
salvare in sessione.
Naturalmente una gestione tramite database potrebbe risultare
sovradimensionata e allora l'uso di un semplice file di
configurazione (con array o con un altro sistema) potrebbe essere
più adatto alla circostanza.
Ciao.
-- 
Long John