Como colocar 2 includes numa página?

FlashJJ

Power Member
Olá a todos. Eu não percebo muito de PHP, aliás, nada :007:

Estou a criar um site. O que eu queria era que os links ficassem do género pagina.com/?area=tutoriais. Quando se entrasse num tutorial por exemplo, ficava pagina.com/?tutorial=blabla. Já consegui isso, colocando o código:

PHP:
<?php
$dirPath="";

if(isset($tutorial)){
   if(file_exists($dirPath.$tutorial.".htm")){
      include($dirPath.$tutorial.".htm");
   } else {
      include($dirPath."tut404.htm");
   }
}
?><?php
$dirPath="";

if(isset($area)){
   if(file_exists($dirPath.$area.".htm")){
      include($dirPath.$area.".htm");
   } else {
      include($dirPath."erro404.htm");
   }
} else {
    include($dirPath."home.htm");
}
?>
Assim era suposto, quando fosse area, aparecia a area, e quando fosse tutorial, aparecia o tutorial. Mas ao linkar o tutorial, no inicio da página, aparece a página home.htm, que está predefinida da area. Há forma de fazer, quando for ?tutorial=xxx a area ser nula?

Não sei se é permitido, se não for avisem, mas a página em questão é esta.
 
Última edição pelo moderador:
Ele nem está a entrar no tutorial nem no area, por isso escapa pelo else do area.
Tens o registar_globals activo? Se quiseres que esse código funcione, tens de o activar, mas aconselho-te a não o usares. Usa o $_GET[] ;)

PHP:
<?php
$dirPath="";

if(isset($_GET["tutorial"])){
   if(file_exists($dirPath.$_GET["tutorial"].".htm")){
      include($dirPath.$_GET["tutorial"].".htm");
   } else {
      include($dirPath."tut404.htm");
   }
} else if(isset($_GET["area"])) {
   if(file_exists($dirPath.$_GET["area"].".htm")){
      include($dirPath.$_GET["area"].".htm");
   } else {
      include($dirPath."erro404.htm");
   }
} else {
    include($dirPath."home.htm");
}
?>
Acho que isto deve dar. Mas esse "o nome do ficheiro está no GET" não me agrada. Considera trocar isso por números (em vez de "tutorial=utorrent" usares "tutorial=1" e 1="utorrent.htm" ;) )
 
Última edição:
Eu parece-me que se removeres o ultimo else ficas com o problema resolvido:

else {
include($dirPath."home.htm");
}

e depois utilizas a página home como se fosse mais uma area: ?area=home

Ou então incluires mais um if no código:

if(!isset($tutorial) && !isset($area )) {
include($dirPath."home.htm");
}


P.S: e claro como o angelofwisdom disse deves usar $_GET['tutorial'] e $_GET['area'] e não $tutorial e $area
 
Última edição:
Ele nem está a entrar no tutorial nem no area, por isso escapa pelo else do area.
Tens o registar_globals activo? Se quiseres que esse código funcione, tens de o activar, mas aconselho-te a não o usares. Usa o $_GET[] ;)

PHP:
<?php
$dirPath="";

if(isset($_GET["tutorial"])){
   if(file_exists($dirPath.$_GET["tutorial"].".htm")){
      include($dirPath.$_GET["tutorial"].".htm");
   } else {
      include($dirPath."tut404.htm");
   }
} else if(isset($_GET["area"])) {
   if(file_exists($dirPath.$_GET["area"].".htm")){
      include($dirPath.$_GET["area"].".htm");
   } else {
      include($dirPath."erro404.htm");
   }
} else {
    include($dirPath."home.htm");
}
?>
Acho que isto deve dar. Mas esse "o nome do ficheiro está no GET" não me agrada. Considera trocar isso por números (em vez de "tutorial=utorrent" usares "tutorial=1" e 1="utorrent.htm" ;) )

O código que usei não fui eu que criei, passaram-me. Esse funcionou, obrigado :) Mas porque é que o nome do ficheiro do GET não agrada?

Já agora, sabes dizer-me como se cria um ficherio tipo download.php?=465, onde 465 e o numero do ficheiro, e depois, ao clicar vai dar ao ficheiro? E ao clicar com botao direito » guardar como também.
 
Serrot, passando os dois IFs para um IF/ELSE IF/ELSE acaba por ter o mesmo efeito

Tens razão.

Quando escrevi o post ainda não tinha visto o teu post q claro tb resolve o problema,
dai posteriormente ter incluido o P.S. com edit
 
O nome do ficheiro estar no GET não me agrada porque qualquer pessoa pode alterar o URL, e arriscas-te a que se conheçam truques que em última instância permitam a um utilizador qualquer aceder a um ficheiro arbitrário no disco. A velha história do /etc/passwd em sistemas UNIX.

Em relação a download.php?id=123, 123 não será o nome do ficheiro, será um número associado a um nome. Assim, evitas o que eu disse no primeiro parágrafo deste post :P
Tendo o nome de um ficheiro associado a um id numérico, não tens tanto o risco de acederem a quaisquer ficheiros do teu disco. Podes colocar isso numa base de dados, e é meio caminho andado para um sistema minimamente seguro.
Para te certificares em como não "brincam" com a tua BD (caso exista), basta-te uma verificação do tipo
PHP:
if (!is_numeric($_GET["id"])) die("Hacking attempt");
Senão ainda levas com requests como "site.php?id=1 UNION SELECT * FROM users.passwords" ou algo semelhante.

Para veres como se "provoca" um download: http://www.phpit.net/code/force-download/ e http://www.webmasterworld.com/forum88/12634.htm


Para falar de SQL Injection, um bom site: http://www.webappsec.org/projects/articles/091007.shtml
 
Back
Topo