Jump to content


Photo

Php + Url Amigável = Erros


  • Faça o login para participar
5 replies to this topic

#1 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 14/01/2010, 16:40

Olá gente!

Estou desenvolvendo um site teste, e estou tentando aprender URL amigável... funciona perfeitamente quando passo só 1 atributo, ex:

http://localhost/ (seria o index.php)
http://localhost/noticias (seria o noticias.php)

Porém, quando quero passar um parâmetro adicional, ou 2, dá erro e não sei o que acontece. Acredito que seja pq uso includes para fazer as url amigáveis, e não é possível passar parâmetros através de includes. Porém, como posso resolver isso?

ex: http://localhost/noticias/17/

controle.php
[codebox]<?php
$url = strip_tags($_SERVER['REQUEST_URI']);
$url_array = explode("/", $url);

array_shift($url_array);
print_r($url_array);

if(empty($url_array) or $url_array[0] == ""){
include("index.php");
exit();
}else{
include($url_array[0].".php");
exit();
}
?>[/codebox]

Gostaria de saber também como capturar os parametros da url depois de convertidos com o .htaccess... dá pra usar $_GET['noticias'] normalmente? acho que não né... gostaria de capturar o "17" para fazer a consulta no banco de dados depois...

noticias.php
[codebox]<body>
<h1>Teste de URL amigável</h1>
<h2>Notícias</h2>
<ul>
<li><a href="/">Index</a></li>
<li><a href="/noticia/17">Notícia nº 17</a></li>
</ul>
<h3>URL: <?php $_GET['noticia']."/".$_GET['id']; ?></h3>
</body>[/codebox]

.htaccess
[codebox]RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ controle.php [L,NC][/codebox]

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 14/01/2010, 16:55

Erm, URL amigável com PHP? :ponder:

Porque não no próprio .htaccess? :huh:

[]’s Até mais

#3 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 14/01/2010, 20:49

Se $url_array[0] é "noticias", $url_array[1] será "17".

Da forma que .htacces está, realmente não tem como puxar os valores pelo $_GET. O que você poderia fazer é criar variáveis $_GET alí dentro do controle.

$_GET['pagina'] = $url_array[0]; // noticias
$_GET['id'] = $url_array[1]; // 17

Como você dá include nos arquivos alí dentro do controle, você conseguirá recuperar os valores dos $_GET falso sem problema nos arquivos includados. ^_^

Mas acho que tem como fazer isso pelo .htaccess, o PF que gosta que gosta de fazer esse tipo de arte. Mas para mim, se tem mais liberdade quando tudo é tratado no arquivo controle.

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#4 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 14/01/2010, 22:44

Só dá pra falar em .htaccess quando todos os possíveis URIs já estiverem definidos. Mas é tão liberal quanto o próprio controller. Diria até que mais, digamos, "apropriado". :ponder:

[]’sAté mais

#5 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 15/01/2010, 08:04

pois é... eu nao vou poder ter livre acesso ao htaccess. Como vou poder cadastrar quase 100% do site lá, inclusive seções, categorias, etc., quero tentar deixar tudo no PHP... mas eu descobri aqui um jeitinho brasileiro.

Como se trata de include, pensei no seguinte: Ele incluiu o arquivo. Não foi aberta outra página... posteriormente, a variavel $url_array pode ser recuperada. E deu certo (y)

Mas por curiosidade, como eu faria isso só com .htaccess?

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#6 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 15/01/2010, 13:58

Mas por curiosidade, como eu faria isso só com .htaccess?

Depende das necessidades...

Um exemplo bem genérico seria assim:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\w+)/?(?<img src='http://forum.wmonline.com.br/public/style_emoticons/<#EMO_DIR#>/sad.gif' class='bbc_emoticon' alt=':(' />\d+)/?)? controller.php?pg=$1&id=$2
Neste exemplo ao acessar /noticias/17 você teria no $_GET: pg=noticias e id=17. No caso de não passar nenhum número, você teria pg=noticias e id=, o que no código vai significar uma string vazia.

Mas tu podes partir de um exemplo básico e ir adaptando conforme as reais necessidades.

[]’sAté mais




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq