Tylër 0 Denunciar post Postado Maio 24, 2010 Boa tarde, sobre o artigo Função para criar URL amigável com PHP, tenho algumas dúvidas que gostaria de esclarecer, pois este artigo é perteito!!! ^^ Esta é minha aplicação: Bom, a princípio, pensei que funcionaria, bom, mas não como eu queria... A página /applications/index.php encontra-se da seguinte maneira: <?php include('config/connection.php'); //configurar manutencao do site include("config/maintanance.php"); include("config/param.php"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title><?php echo $title_site.' - '.$desc_site; ?></title> <?php if( $page=="" ) { include("ts_includes/home.php"); } else if( $page=="products" ) { include("ts_includes/products.php"); } ?> A página /config/param.php: <?php $page = filter_var( @$_GET[ 'id_post' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); $id = filter_var( @$_GET[ 'id' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); // se solicitou alguma pagina if( isset($_GET['id_post']) || isset($_GET['id']) ) { switch( $page ) { case 'products': $desc_site = 'Produtos'; $content = 'Produtos!'; break; case 'contact': $desc_site = 'Contato'; $content = 'Entre em contato conosco'; break; case 'rss': include("ts_includes/rss.php"); break; default: $desc_site = 'Error 404 - Esta página não existe!'; $content = 'Esta página não existe!'; } } ?> O que acontece eh quando eu acesso uma url do tipo: http://localhost/products ou http://localhost/contact sempre vai para mesma página inical, o título não muda, nem nada.... O que estou fazendo de errado? Se precisarem de mais informações sobre a aplicação, podem perguntar.... Att. Eh, já que não tem como eu editar, então vamos recriar o post.... Bom, eu preciso capturar os parâmetros desta url: http://localhost/products/site1 ou http://localhost/products/1 Mas utilizando a página main.php do artigo citado acima, eu teria que criar a página products.php e pegar apenas uma id, mas na verdade, estou passando "products" e "1" ou "site1" como parâmetros de index.php, sem criar outra página.... main.php include('url_response.php'); $urlpatterns = array( '/'=>'index.php', '/(?P<page>\w+)'=>'index.php', '/post/(?P<page>\w+)'=>'post.php', ); url_response($urlpatterns); Minha dúvida é como fazer para capturar 2 ou mais parâmetros utilizando urlpatterns. '/(?P<page>\w+)'=>'index.php', em index eu precisaria passar uma string e uma ou mais ids como valores '/post/(?P<page>\w+)'=>'post.php', --> eu precisaria passar uma string e uma id como valores Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Maio 24, 2010 Ola meu amigo Tylër eu vi esse artigo aqui no imasters para ser sincero eu achei muito doido a criacao de url amigavel :) $page = filter_var( @$_GET[ 'id_post' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); $id = filter_var( @$_GET[ 'id' ] , FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW ); isso você pode troca por mysql $page=mysql_escape_string($_GET["id_post"]); minha segunda dica seria legal em vez de usar o switch :) você fazer essa busca via banco de dados igual faz o wordpress :) dar para imaginar esse switch com 50 entradas sobre o htacess um exemplo bem simples para você montar RewriteRule ^index/termometro/([a-zA-Z0-9_-]*)/([a-zA-Z0-9_-]*)/([a-zA-Z0-9_-]*)$ termometro.php?mes=$1&ano=$2&pagina=$3 aqui eu to pegando tres parametro :) ou seja você pode personalizar as entradas do seu site :) eu acho mais simples dessa forma alem de ser mais rapido ponto a ser avaliado pela minha dica gerenciamento de url amigavel via banco uma camada maior de segurança e reducao de linhas de code :) um abraço meu velho Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Maio 24, 2010 Sim, tem razão! Quando eu tinha parceria em uma empresa que tava abrindo, eu utilizava checagem do arquivo que pegava o parâmetro pelo banco, nem sei pq não tô programando assim agora rsrsrsrsr Bom, mas sobre os demais pontos, não dá pra eu ficar utilizando escape mysql, pois nem todos os submits são pra inserir no banco, e esta função só funciona se for realizar consultas no banco, não é mesmo? ;) Bom, o que eu tô querendo mesmo é realizar algo como: main.php '/(?P<page>w+\/?P<id>w+)'=>'index.php',Isso aí não funciona, sempre cai no bad request da página url_response.php Estou tentando passar 2 parâmetros como referência mas não consigo.... Já pesquisei sobre preg_match com urlpatterns mas não encontrei nada parecido... Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Maio 24, 2010 Cada louco com sua loucura , eu la sei pq você esta programado assim ta fazendo sol :) deve ser a influencia do sol :) agora serio eu achei esse modelo que você colcou muito louco ,apesar que o wordpress faz via banco de dados isso que você procura para te explicar seria complexo demais na logica seria ele jogar todo o site para index e faz o gerenciamento via banco de dados sobre o escape mysql nao e necessario inserir no banco e so uma camada de protecao no seu code :) e clar que você pode colocar um "if " para ver ser esta passando numero ou string e trata isso e claro mais no post anterior eu te mostrei RewriteRule ^index/termometro/([a-zA-Z0-9_-]*)/([a-zA-Z0-9_-]*)/([a-zA-Z0-9_-]*)$ termometro.php?mes=$1&ano=$2&pagina=$3 aonde estou/pagina da expresao /campo a procurar /campo a procurar /campo a procurar pagina de resposta e parametro passado via get :) deu para pega a ideia agora ? um abraço Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Maio 26, 2010 Bom, isso foge totalmente do exemplo do tutorial.... Alguém tem alguma forma de me ajudar com este exemplo? Compartilhar este post Link para o post Compartilhar em outros sites
WilliamF 0 Denunciar post Postado Março 17, 2012 Povo seguinte tava lendo ai o post, eu utilizo de outro modo vejam <?php $Routes = array( '/' => 'home.php', '/home' => 'home.php', '/cadastro' => 'cadastro.php', // Acessa todas as noticias mas sem utilizar parâmetros '/noticias' => 'noticias.php', // busca notícias por categoria e id '/noticias/(?P<categoria>\w+)/id:(?P<id>\d+)' => 'noticias.php', // Exemplo da url funcionando com paginação ^^ '/ranking/page:(?P<page>\d+)' => 'ranking.php' ); function normalize($url){ if( preg_match('/[a-z]+:+[0-9]/', $url) ): return $url; endif; $url = "/$url"; while( strpos($url, '//') ): $url = str_replace('//', '/', $url); endwhile; rtrim($url, '/'); return ( empty($url) ) ? '/': $url; } function response($Routes){ $Request = str_replace( normalize(PROJECT), '', $_SERVER['REQUEST_URI'] ); $Path = APP; foreach( $Routes as $Alias => $File ): if( !file_exists(APP.$File) ): // Arquivo de 404 referente ao erro URL n encontrada. include(APP.'404.php'); else: if( preg_match('@^{$Alias}$@',$Request, $_GET) ): include(APP.$File); else: // Arquivo diferenciado do 404 dizendo erro ao processar sua URL ou o q você quiser include(APP.'process.php'); endif; endif; endforeach; } ?> desse modo eu posso utilizar de vaaaaaaaaarios modos usando ex: /noticias/esportes/id:15 ou /noticias/esportes ou /noticias/id:15 de modos bem flexíveis bastanto apenas add o modo desejado no $Routes; meu único problema até hj sempre foi passar como PROJECT o seguinte valor dirname($_SERVER['PHP_SELF']); toda vez q passo ele, no caso pra q o dir do projeto seja pego automaticamente o script da pau e funciona ñ mais. o pq, simples qnd você coloca o nome no project ele ta assim: // Sem barras // Retorna: nome_do_dir_do_projeto define('PROJECT', 'nome_do_dir_do_projeto'); // agora usando o dirname ele retorna assim: // Retorno: /nome_do_dir_do_projeto define('PROJECT', dirname($_SERVER['PHP_SELF'])); Ai por causa da maldira barrinha / por alguma razão o script buga, ja tentei usar explode('/', PROJECT); mais por alguma razão o script altera automaticamente o nome do projeto, ex: /WebRs com explode se eu n digito nada ele fica igual, agora se eu passo algum param na URL ex: /cadastro ele retorna /WebRS/cadastro preceberam q o WebR"S" fico maiúsculo, n intendi esse bug ainda, se alguém puder me ajudar a fixar pra poder utilizar com o dirname(), eu agradeceria mt, bom mais inquanto isso... testem essa modificação da função original q postei acima, digam se deu algum resultado no projeto de vc6. t+ vlw Att.WilliamF. Porto Alegre, 16 de Março de 2012. Compartilhar este post Link para o post Compartilhar em outros sites