aprire pagina linkata nel content

donato.chpp

Utente Attivo
26 Ott 2008
36
0
0
ciao ciao
ho un dilemma, ho creato un template con php e html fatto in questo modo:
creato un file html con 4 div (header, menu, content, footer) e un file css per la grafica.
poi ho tagliato il file html in 4 file php (appunto header, menu, content e footer) e creato un file index.php dove includo le 4 parti.

questo è il file index.php

<?php
include("tmp/header.php");
include("tmp/menu.php");

$p="tmp/content"; //pagina di default per i contenuti centrali
if(isset($_GET['page'])){ //pagina passata via parametro
$p=$_GET['page'];
if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))
$p="error"; //pagina di errore
}
include($p.".php");
include("tmp/footer.php");

?>

che funziona senza problemi.
la domanda è su come posso fare ad aprire i link del menu nel content
cioè, nel momento in cui apro il sito ci deve essere nel content il file "tmp/content" che è un file php con dentro solo codice html contenente il div.oltre a questa ci saranno altre pagine come "temp/content", magari "temp/download", contenente solo il div content.come faccio a farla aprire nel content nel momento in cui la linko?
spero di essere stato chiaro
 
Nel menu devi mettere link del tipo:

HTML:
<a href="index.php?page=pagina_voce1">Voce 1</a>
<a href="index.php?page=pagina_voce2">Voce 2</a>
...
 
SATIFAL grazie mille per la risposta...
ho provato ma non mi apre la finestra, di sicuro sbaglio qualcosa.
ho creato semplicemente una pagina prova php, nel menu devo mettere:

<a href="index.php?page=prova.php">prova</a>

in questo modo mi da impossibile trovare la pagina web.

dove sbaglio?
 
Il meccanismo è molto semplice, non fai altro che chiamare sempre la pagina index.php (che quindi ricaricherà sempre header, menu e footer) passando di volta in volta come parametro page la pagina che dovrà essere caricata come content.
Nel tuo caso credo ci sia un problema di percorsi per cui controlla bene le cartelle dome metti i file. Comunque per come è strutturato il tuo codice non devi mettere il .php in fondo alla pagina da caricare in quanto lo aggiungi successivamente.
Per cui:

HTML:
<a href="index.php?page=prova.php">prova</a>

diventa:

HTML:
<a href="index.php?page=prova">prova</a>

e comunque ripeto, controlla bene i percorsi in quanto il codice è corretto.
 
giusto, che stupido, funziona perfettamente... :mavieni:
come sistema credi sia buono o secondo te non va bene?
ps. grazie ancora moltissimo per l'aiuto 0:)
 
ciao SATIFAL
le pagine si aprono perfettamente, però se la pagina prova la metto in una cartella ad esempio tmp la scritta diventa

index.php?page=tmp/prova

no?

perchè non me la fa aprire, mi potresti aiutare?
 
Il valore del parametro page che cerchi di passare "tmp/prova" è corretto se il file prova.php si trova nella cartella tmp. Il problema risiede nello script php e più precisamente nei controlli che vengono effettuati sul valore del parametro page. Nel caso il valore da te passato contenga il carattere / il seguente controllo fallisce in ben 2 punti impedendo la corretta visualizzazione della pagina da te desiderata:

PHP:
if ($p != basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/", $p) || $p == "index" || !file_exists($p.".php"))

I controlli che falliscono sono "$p != basename($p)" e "!preg_match("/^[A-Za-z0-9\-_]+$/", $p)".

Nel primo controllo la funzione basename() restituisce il nome del file estrapolandolo dal percorso indicato per cui il parametro tmp/prova restituisce prova in quanto tmp/ viene considerato come percorso. Quindi il controllo fallisce in quanto $p che è uguale a tmp/prova è diverso da basename($p) che è uguale a prova.
Il secondo controllo invece consiste di un'espressione regolare che verifica i caratteri di cui è composto il valore del parametro. Nel tuo caso i caratteri leciti sono quelli alfabetici (maiuscoli e minuscoli), le cifre, ed i caratteri \ - _
Per permettere il passaggio del carattere / devi inserirlo nell'elenco dei caratteri leciti, ma dato che / è un carattere speciale, nelle espressioni regolari, devi anteporgli il carattere \ Per cui il controllo diventa:

Codice:
!preg_match("/^[A-Za-z0-9\-_\/]+$/", $p)
 
capito, preg_match l'ho modificato, però come mi devo comportare con basename?

ho provato a fare così ma non va bene:

<a href="index.php?page=prova">prova</a>

e nell'index:

<?php
include("tmp/header.php");
include("tmp/menu.php");
include("tmp/extra.php");

$p="tmp/content"; //pagina di default per i contenuti centrali
if(isset($_GET['page'])){ //pagina passata via parametro
$p=$_GET['page'];
if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_\/]+$/", $p) || $p=="index" || !file_exists($p.".php"))
$p="error"; //pagina di errore
}
include("tmp/."$p.".php");
include("tmp/footer.php");

?>

cioè gli passo prova come file, quindi $p=basename($p)
e poi nel penultimo include gli aggiungo il path,
però credo stia andando in cunfusione totale :dipser:
 
Secondo me puoi anche togliere il controllo col basename() e rimettere l'include così com'era.

PHP:
if(!preg_match("/^[A-Za-z0-9\-_\/]+$/", $p) || $p=="index" || !file_exists($p.".php"))
 
scusate se mi intrometto ma pur copiando il codice a quanto pare sono una schiappa e non ci riesco...

allora questa è la home

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<?php
include("tmp/header.php");
include("tmp/menu.php");

$p="tmp/content"; //pagina contenuti centrali
if(isset($_GET['page'])){ //pagina passata via parametro
$p=$_GET['page'];
if(!preg_match("/^[A-Za-z0-9\-_\/]+$/", $p) || $p=="index" || !file_exists($p.".php"))
$p="error"; //pagina errore
}
include("tmp/."$p.".php");
include("tmp/footer.php");

?>

</body>
</html>

la mia domanda a questo punto è... le pagine che vengono incluse (header.php, menu.php, index.php, error.php, footer.php) vanno messe in una cartella o nella stessa directory dell'home.php...

ho provato in entrambi i modi ma in entrambi i casi mi da questo errore:
Codice:
Parse error: syntax error, unexpected T_VARIABLE in /users/p/s/i/psike/public_html/home.php on line 21
 
C'è un errore di sintassi nel codice:

PHP:
include("tmp/."$p.".php");

dovrebbe essere così:

PHP:
include("tmp/".$p.".php");
 

Discussioni simili