Pagina 1 di 1

[RISOLTO][PHP] Corretto utilizzo di ISSET/INCLUDE

Inviato: lunedì 14 aprile 2014, 15:11
da Malco
Salve a tutti, mi servirebbe una dritta riguardo php, premetto che non sono espertissimo e mi sto cimentando da poco nell'utilizzo di quest'ultimo.
Sto realizzando un sito in HTML5\php e mi è stato suggerito l'utilizzo della funzione isset/include per poter cambiare dinamicamente solo parti della pagina.
Quindi in pratica ho generato una pagina index.php che contiene il template principale e all'interno del content principale (ossia la section che cambia in base alla pagina selezionata) ho inserito:
[code2=php]<?php
if(isset($_GET['page'])){
include($_GET['page']);
}else{
include('home.php');
}
?>[/code2]

E fin qui tutto apposto, quando dall'homepage clicco su un link interno, ad esempio: [code2=html]<a href="?page=pagina.php">Pagina</a>[/code2]il tutto viene eseguito perfettamente.
Il problema nasce nel momento in cui sulla barra degli indirizzi vado direttamente sulla pagina localhost/pagina.php.
A questo punto viene visualizzato solo il content di pagina.php, senza il template contenuto nella pagina index.php perché sono andato direttamente a prendere la pagina senza passare per index.php.
Che pattern corretto dovrei utilizzare per evitare ciò?
Vi ringrazio per l'attenzione e le eventuali info! :D

Re: [PHP] Corretto utilizzo di ISSET/INCLUDE

Inviato: lunedì 14 aprile 2014, 15:54
da Malco
Sviluppi:

Ho risolto temporaneamente spostando i moduli da includere in una sotto directory, in modo da non renderli accessibili direttamente, passando dunque a:
[code2=php]<?php
if(isset($_GET['page'])){
include('include/'.$_GET['page']);
}else{
include('include/home.php');
}
?>[/code2]

Ora se dalla barra degli indirizzi si clicca su localhost/pagina.php mi torna, giustamente, l'errore NOT FOUND di Apache.
E' possibile effettuare un controllo in cui se un utente prova a effettuare una richiesta del tipo localhost/pagina.php questi venga reindirizzato a localhost/index.php?page=pagina.php?
Grazie ancora :D

Re: [PHP] Corretto utilizzo di ISSET/INCLUDE

Inviato: lunedì 14 aprile 2014, 16:01
da Zoff
La pagine le devi richiamare con: http://localhost/index.php?page=pagina.php

Se vuoi puoi fare un redirect automatico metti all'inizio di index.php questo:

Codice: Seleziona tutto

define("HOME",1);
e all'inizio di tutte le altre pagine invece metti:

Codice: Seleziona tutto

if ( !defined("HOME") ){ 
	header('Location: index.php?page='.basename(__FILE__) );
	exit;
}
Il codice però così com'è è insicuro.
Cambia l'include in:

Codice: Seleziona tutto

<?php
if(isset($_GET['page']) && file_exists(basename($_GET['page']))){
	include(basename($_GET['page']));
}else{
	include('home.php');
}
?>

Re: [PHP] Corretto utilizzo di ISSET/INCLUDE

Inviato: martedì 15 aprile 2014, 18:39
da Malco
Fantastico!
Risolto alla grande Zoff, ti ringrazio infinitamente, questi "trucchetti" sono stati preziosi come l'oro ;)