[PHP] Urls Dinamicas

Started by Byter, September 23, 2007, 10:09:32 PM

Previous topic - Next topic

Byter

Alguem me Pode dizer como funcionam as urls dinamicas no PHP?
E qe nao precebo muito daquilo.

Por exemplo para ter:

portfolio.php?webdesign
portfolio.php?design

Etc..
Obrigado.
Byter O meu Blog


ilovehentai

Quotehttp://www.webtuga.com/forum/navegacao-em-php-t4354.html

Em relação a este método que está correctíssimo, caso sejam muitos links, não usaria uma situação de if e Else, é mais prático uma sitação de switch case, que simplifica muito o código, assim:




no caso de teres uma url deste tipo: http://www.o_teu_site.com/index.php?variavel_URL=index



$urlVar = $_GET[\\'variavel_URL\\'];



switch($urlVar){



case "index":

 include("index.php");

 break;



case "contactos":

 include("contactos.php");

 break;



case "acerca":

 include("acerca.php");

 break;



case "noticias":

 include("noticias.php");

 break;



}

Basicamente ele lê a variável do tipo GET apartir da URL e vai comparar, assim que ele encontrar ele inclui o ficheiro php e quebra a cadeia.

Byter

Obrigado mas e tipo.
Se a pagina nao for encontrada?
Tenho de usar um else?
EDIT:

Ja sei como é, aqui esta:

Portfólio!



(
$urlVar = $_GET[\\'des\\'];



switch($urlVar){

case "index":

 include("1.html");

 break;



case "contactos":

 include("contactos.php");

 break;



case "acerca":

 include("acerca.php");

 break;



case "noticias":

 include("noticias.php");

 break;

 default:

if(empty($_GET["des"])){

echo "o meu protefolio";

} else {

echo "

a pagina nao foi encontrada";

}



}

(

Byter O meu Blog

XsTeAl

se queres fazer tipo isto portfolio.php?webdesign  espera uam beca que eu digo como fazer...

EDIT:

vamos la comecar



// pega a url no navegador, o que vier depois do ?

$query = $QUERY_STRING;



// case

$l=0; //verificador

$ext="php"; //extensão dos arquivos



switch($query){

case "oop": $url = "oop.".$ext; $l++; break;

case "lpv": $url = "lpv.".$ext; $l++; break;

}



// vamos ver se a query foi feita

echo ($l==0) ? "Query inválida!": "";



?>

Aonde irá aparecer as páginas da querystring colocas o código abaixo:

if(isset($url)){ include($url); } else { include("principal.php"); }

?>

Vou explicar melhor...

Na parte do meio onde aparecerá os conteúdos dos links clicados no site colocas esse último código que eu passei. ok?
colocas apenas esse código na tabela do meio do site, e o conteúdo do site que irá aparecerá inicialmente (assim que acessarem ou sem ter clicados em algum link) colocas num arquivo principal.php que foi declarado no código.

O primeiro código colocas no inicio dos códigos do seu site, ou seja, antes dos códigos de HTML. (dê preferência).

---------------------------------------------

como aqui deram o link tens uma maneira mais facil








 if(!isset($c)) $c="noticias";



 $invalide = array(\\'/\\',\\'//\\',\\':\\',\\'.\\');



 $c = str_replace($invalide,\\' \\',$c);



 if(!file_exists($c.".php")) $c = "noticias";



 include($c.".php"); ?>

é meter este codigo na parte que queres que apareca o conteudo.

depois e fazeres o link assim index.php?c=ola

por exemplo... para parecer alguma ocisa tens de ter uma pagina ola.php no servidor no mesmo directoriuo qeu o index.php ou outra pagina, neste codigo se n for encontrada alguam pagina vai para a oticias por exemplo (foi a que eu defeni) e podes por outra e quando acederes ao index.php aparece logo la as noticias no conteudo.

espero que fui esclarecedor com estes dos codigos feitos por mim

Byter

Mas isso eu sei e ja tinha dito tudo no codigo a cima.
E já consegui.
Mas a minha outra duvida é:
ter portfolio.php?web e
portfolio.php?des
ou seja duas variaveis
E para isso é preciso mais uma $urlVar certo?

Entao fiz o seguinte para nao aparecerem 2 cenas iguais no incluide da pag:




$urlVar = $_GET[\\'des\\'];



switch($urlVar){

case "index":

 include("portfolio/des.html");

 break;



case "des1":

 include("portfolio/design/des1.html");

 break;



 

}



$urlVar = $_GET[\\'web\\'];



switch($urlVar){

case "index":

 include("portfolio/web.html");

 break;



case "techtuga":

 include("portfolio/design/techtuga.html");

 break;



default:

if(empty($_GET["des" or "web"])){

include("inicio.php");

} else {

include("404.html");

}



}
Em vez de repetir duas vezes, no fim pus so 1:
Este codigo:

default:

if(empty($_GET["des" or "web"])){

include("inicio.php");

[b]// ESTA PARTE È A QUE ESCREVE NO INICIO NO PORTFOLIO.PHP , mas se PUSESSE AQUI E NO OUTRO URLVAR, APARECIAM DUAS VEZES O MESMO[/b]

} else {

include("404.html");

}
Mas para não se repetir o inicio.php que é onde esta o conteudo da pagina portfolio.php,

include("inicio.php");
// ESTA PARTE È A QUE ESCREVE NO INICIO NO PORTFOLIO.PHP , mas se PUSESSE AQUI E NO OUTRO URLVAR, APARECIAM DUAS VEZES O MESMO

quando não esta nada depois do portfolio.php? por exemplo portfolio.php?web=ex, como diz no codigo se estiver vazio ele escreve no documento o incluide(onde inclui o inicio.php com a parte principal), e como se pusesse duas vezes nas duas UrlVars ele repetia duas, por isso pus so em baixo e ja deu certo.
mas se forem a:
www.techtuga.net/t/portfolio.php e carregarem em webdesign da tudo certinho, mas se carregarem em design aparece repetido a parte do webdesign em baixo.
Porque?
E algum erro do Code em CIma?
Vejam la no site, e esclarecam me, obrigado.
Se não preceberem o que disse digam. Que esta confuso lol.
Byter O meu Blog

XsTeAl

n metas urlVar mete antes assim:

$des = $_GET[\\'des\\'];



switch($des){

case "index":

 include("portfolio/des.html");

 break;



case "des1":

 include("portfolio/design/des1.html");

 break;



 

}



   $web = $_GET[\\'web\\'];



switch($web){

case "index":

 include("portfolio/web.html");

 break;



case "techtuga":

 include("portfolio/design/techtuga.html");

 break;



  default:

 if(empty($_GET["des" or "web"])){

include("inicio.php");

 } else {

include("404.html");

 }



}

exprimenta assim

Byter

Assim ja da?
Mas há um erro tipo.
Quando vao a Http://www.techtuga.net/t/portfolio.php
se forem a webdesign tudo bem.
Mas se forem a design repete o web design.
Porque?
Byter O meu Blog

Byter

Byter O meu Blog

ilovehentai

QuoteE ajuda lol?

Mostra lá o código, para ver como estás a fazer as coisas.

Byter

$des = $_GET[\\'des\\'];



switch($des){

case "index":

 include("portfolio/des.html");

 break;



case "des1":

 include("portfolio/design/des1.html");

 break;



 

}



   $web = $_GET[\\'web\\'];



switch($web){

case "index":

 include("portfolio/web.html");

 break;



case "techtuga":

 include("portfolio/design/techtuga.html");

 break;



  default:

 if(empty($_GET["des" or "web"])){

include("inicio.php");

 } else {

include("404.html");

 }



}
Mas precebeste o que queria?
E que quando carrego webdesign tudo bem mas quando carrego design, repete-me o web design.
Byter O meu Blog

Teotónio Ricardo

Depois pode brincar também com o mod_rewrite para dár comida ao google bot...

ilovehentai

Vamos la ver se percebi bem o que pretendes. Tipo tens uma página central que funciona como layout, e depois dentro desse layout queres carregar um determinado conteúdo. Ou seja, queres fazer um include (em PHP) de um determinado conteúdo que está num ficheiro PHP dentro do centro do layout. Para começar não vejo a necessidade de 2 variáveis do tipo GET, vamo la ver isto om muita calma.

    Tu tens uma página chamada de portfolio.php

    Quando clicas em Design aparece os trabalhos relacionados com design

    Quando clicas em Webdesign aparecem os conteúdos de webdesign.
      Então se for esse o caso vamos la pensar bem:

      Primeiro e acima de tudo só necessitas de 1 variável GET. Vejamos este pseudo-código




Ler a variável GET



caso for webdesign:

carrega o ficheiro de webdesign;

caso for design:

carrega o ficheiro de design;

senão:

aparece erro página não existente.

Ou seja, as URL vão se parecer com isto




http://www.techtuga.net/t/portfolio.php -> para a página de portfolio

http://www.techtuga.net/t/portfolio.php?go=webdesign  -> para a página de webdesign

http://www.techtuga.net/t/portfolio.php?go=design -> para a página de design

Prontos agora montamos tudo, dentro do espaço onde queres carregar o conteúdo, não sei se o fazes dentro de uma DIV ou de uma célula de uma tabela (não interessa), colocas este código







if(isset($_GET[\\'go\\'])){



$varURL = $_GET[\\'go\\'];



switch($varURL){

 case "webdesign":

 include("webdesign.php");

 break;

 case "design":

 include("design.php");

 break;

 default:

  echo "Oops esta página não existe, clique aqui para voltar ao nosso portfolio!";

}



}else{



include("portfolio.php");



}



?>

Penso que assim garantimos que o conteúdo da página portfolio só aparece quando outra coisa senão que a varíavel go aparece na URL, e caso a variável go é declarada o include da página muda consoante a conteúdo da variável.

Eu por acaso tou um pouco cansado e perguiçoso, mas facilmente consegues agora se quiseres alterar garantir que nada mais pode surgir na url para além da variável "go", tas a vontade. Penso que assim simplificas mais o código e evitas esses erros.

XsTeAl

PT Byter tenta tirar o

  default:

 if(empty($_GET["des" or "web"])){

include("inicio.php");

 } else {

include("404.html");

 }

n precisas disso para nada e exprimenta o segundo codigo do meu post la em cima que faz isso automactico mas com extensao em php.

Byter

Pera la eu quero dois urlvars porque é portolio.php?design=
portfolio.php?webdesign=
Precebes?
E e nisso que na parte do design aparece repetido o inicio.php, aquele incluide no codigo, so que no webdesign aparece bem.
E se tirar o que me disseste, no portfolio.php nao aparece nada(incliude do inicio.php). :S
Porque o problema de repetir o que esta no inicio.php(aquele incluide no codigo) na parte do design e na do web design não(essa parte esta bem) é disto que esta mal:
  default:

 if(empty($_GET["des"]) or empty($_GET["web"])){  

 include("inicio.php");

 } else

{  

 include("404.html");

  }
O que tenho de mudar?
Resumindo e Concluindo:
ilovehentai eu quero aquele codigo que me deste mas com duas urlvars, sem repetir duas vezes o incluide no portolio.php
Byter O meu Blog

ilovehentai







if(isset($_GET[\\'des\\']) || isset($_GET[\\'webdesign\\'])){



if(!empty($_GET["des" or "web"])){



$des = $_GET[\\'des\\'];



switch($des){

case "index":

include("portfolio/des.html");

break;



case "des1":

 include("portfolio/design/des1.html");

 break;





}



$web = $_GET[\\'web\\'];



switch($web){

case "index":

include("portfolio/web.html");

break;



case "techtuga":

include("portfolio/design/techtuga.html");

break;





}



}else{



include("inicio.php");



include("404.html");



}



}else{



include("portfolio.php");



}



?>

É uma coisa desse género que pretendes? Não sei se tou a perceber bem, mas se for uma coisa assim, continuo a achar que nao necessitas assim de duas variáveis, contudo, sabes que podes possuir várias variáveis na URL bastando para isso apenas separá-las por um i comercial (&) por exemplo

http://www.meusite.com?var1=exemplo&var2=exemplo&var3=exemplo

Byter

Isso que me deste ta se a passar...
www.techtuga.net/t/portfolio.php LOL!
Repete tudo quantas vezes.
Ja agora se me pdueres dar o teu msn, para me explicares melhor agradecia.
Consegui da seguinte maneira:

$des = $_GET[\\'des\\'];

$web = $_GET[\\'web\\'];

 

switch($des){

case "index":

include("portfolio/des.html");

break;

case "des1":

include("portfolio/design/des1.html");

break;

default:

switch($web){

case "index":

include("portfolio/web.html");

break;

 case "techtuga":

include("portfolio/design/techtuga.html");

break;

 

default:

if(empty($_GET["des"]) or empty($_GET["web"])){

 include("inicio.php");

} else {

 include("404.html");

}

 

}

}
Byter O meu Blog

XsTeAl

ta a dar desta maneira que te dei?

Byter

Aquela que disse ja funcionava...
Byter O meu Blog