1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Como colocar 2 includes numa página?

Discussão em 'Web Development' iniciada por FlashJJ, 16 de Março de 2008. (Respostas: 6; Visualizações: 1305)

  1. FlashJJ

    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: 16 de Março de 2008
  2. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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: 16 de Março de 2008
  3. Serrot

    Serrot Power Member

    Eu parece-me que se removeres o ultimo else ficas com o problema resolvido:

    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:


    P.S: e claro como o angelofwisdom disse deves usar $_GET['tutorial'] e $_GET['area'] e não $tutorial e $area
     
    Última edição: 16 de Março de 2008
  4. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Serrot, passando os dois IFs para um IF/ELSE IF/ELSE acaba por ter o mesmo efeito :)
     
  5. FlashJJ

    FlashJJ Power Member

    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.
     
  6. Serrot

    Serrot Power Member

    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
     
  7. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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
     

Partilhar esta Página