Ivo Pereira Posted December 15, 2009 at 01:08 AM Report Share #300437 Posted December 15, 2009 at 01:08 AM Boas pessoal, nos meus tempos de PHP sei que havia uma função ou algo do género, que permitia "mascarar" os ficheiros, isto é, imaginemos o seguinte caso: http://www.site.com/?pagina=home Isto iria, mascarar por exemplo a página entrada.php. http://www.site.com/?pagina=galeria Iria mascar fotos.php Gostaria de saber como fazer algo deste género, viste que já não me lembro, e já andei à procura por PHP Get URL no Google, e acho que não era nada daquilo 🙂 Abraços 🙂 Link to comment Share on other sites More sharing options...
Guest id194 Posted December 15, 2009 at 02:11 AM Report Share #300441 Posted December 15, 2009 at 02:11 AM Isso é só fazer um index.php e lá dentro processas a variável $pagina e fazes include ao respectivo ficheiro .php. Se a ideia é também esconder o index.php (dando-lhe outro nome), penso que tens de usar .htaccess para fazer redireccionamentos no Apache. Ou definir outro nome para o ficheiro "default". Link to comment Share on other sites More sharing options...
Ivo Pereira Posted December 15, 2009 at 07:33 AM Author Report Share #300443 Posted December 15, 2009 at 07:33 AM Será que me podias dizer o nome dessa função ou coisa assim do género ? 🙂 Link to comment Share on other sites More sharing options...
yoda Posted December 15, 2009 at 09:18 AM Report Share #300446 Posted December 15, 2009 at 09:18 AM mod_rewrite do Apache before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
softklin Posted December 15, 2009 at 09:45 AM Report Share #300451 Posted December 15, 2009 at 09:45 AM Deixo-te aqui um tutorial de htaccess, mas precisamente de como usar de forma basica o mod_rewrite: http://www.easymodrewrite.com/guide-syntax Convém ter noções de regexp (expressões regulares) para criar as regras. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted December 15, 2009 at 10:46 AM Report Share #300461 Posted December 15, 2009 at 10:46 AM A minha solução (sem mod_rewrite) passa por teres um index.php onde carregas todos os ficheiros que falaste (entrada.php, fotos.php) dentro 🙂 Servirá apenas de posto de controlo para determinar o que é que carrega o quê. Visto o parâmetro "pagina" diferir do nome dos ficheiros, eu faria assim: <?php $routes = array ( "home" => "entrada.php", "galeria" => "fotos.php" ); if(isset($_GET['pagina']) && isset($routes[$_GET['pagina']])) # Se existir o indice nos routes require($routes[$_GET['pagina']]); # Carrega o ficheiro respectivo else # Senão, manda para um 404 personalizado { header('error404.php'); exit(); } ?> Atenção que isto é um sistema simples de routing sem expressões regulares nem substituições como as frameworks actuais têm 🙂 Link to comment Share on other sites More sharing options...
Ivo Pereira Posted December 15, 2009 at 06:24 PM Author Report Share #300530 Posted December 15, 2009 at 06:24 PM @mAiN_iNfEcTiOn: era mesmo isso que procurava 🙂 obrigado lembro-me de utilizar isso 🙂 obrigado a todos mesmo assim 🙂 Link to comment Share on other sites More sharing options...
softklin Posted December 15, 2009 at 08:27 PM Report Share #300574 Posted December 15, 2009 at 08:27 PM Não me digas que estavas com medo das expressões regulares... 🙂 :) No entanto, a solução do main_infection está muito boa e segura, do ponto de vista de inclusão de outros ficheiros que não as páginas, pelo que se não precisares de URL's "bonitos", serve muito bem. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted December 15, 2009 at 09:48 PM Report Share #300599 Posted December 15, 2009 at 09:48 PM ainda assim, se precisar de usar url's bonitos, podes usar na mesma o mod_rewrite 🙂 basta criares um ficheiro .htaccess na raiz com o seguinte código: # Activa o URL Rewriting RewriteEngine On # Define a base RewriteBase / # Permite acesso a todos os ficheiros, desde que directamente RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Rewrite all other URLs to index.php/URL RewriteRule .* index.php?pagina=$0 [PT,L] Atenção que isto deve funcionar para endereços do tipo: http://www.exemplo.tld/home/ No entanto, precisas do código que eu coloquei na mesma.... Fixe fixe é ter uma classe de segmentação de endereços ... isso é que é 🙂 Link to comment Share on other sites More sharing options...
Ivo Pereira Posted December 15, 2009 at 09:53 PM Author Report Share #300601 Posted December 15, 2009 at 09:53 PM O que entendem por url's bonitos? 🙂 E nunca me dei com as expressões regulares 🙂 E as segmentação de endereços? O que é? 🙂 Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted December 15, 2009 at 10:54 PM Report Share #300629 Posted December 15, 2009 at 10:54 PM Ora bem... Vamos por partes... URL's Bonitos (clean urls): URL's bonitos (ou clean urls) são endereços no formato: http://www.exemplo.tld/parametro1/parametro2/parametro3/ ao invés do formato: http://www.exemplo.tld/index.php?variavel1=parametro1&variavel2=parametro2&variavel3=parametro3 Os clean urls são endereços que além de serem 'bonitos', indicam o que estás a ver logo à primeira vista e para os motores de pesquisa (como o Google) é considerado um ponto forte para um site subir no ranking de pesquisa. Segmentação de Endereços ou (URI Segmentation) A Segmentação de Endereços (ou URI Segmentation) é o acto de partir os URLs bonitos em segmentos. Por exemplo, temos o seguinte endereço: http://www.teste.com/produtos/listar/ordenar-por/referencia:asc/ Uma classe de segmentação de urls vai partir o endereço de modo a ser possível usar os dados 😛 Dessa forma, imagina uma classe do género: $url = new URL(); echo $url->segment(1); Isto iria mostrar "produtos"; Ou então $url = new URL(); echo $url->segment('produtos'); Iria mostrar "listar"; No entanto, para teres uma boa introdução podes também ver a wikipédia: http://en.wikipedia.org/wiki/Rewrite_engine 👍 Link to comment Share on other sites More sharing options...
Ivo Pereira Posted December 16, 2009 at 01:21 AM Author Report Share #300656 Posted December 16, 2009 at 01:21 AM Hmm, tenho de explorar bem isso 👍 Já agora, imagina que tenho um comando SQL que me vá aparecer a página de edição do id 1 de uma tabela, e tal poderia ser feito assim, vá digo eu: site.com/?editar_noticia&id=1 (nem estou a ver se isto tá correcto 😛 ) Isto o que faria na página de edição, era ir por buscar o número do id pelo GET, e preencher as informações dos campos para editar por aí? Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted December 16, 2009 at 10:19 AM Report Share #300671 Posted December 16, 2009 at 10:19 AM Certo 😛 Seguindo a tua lógica de cima, seria um endereço do tipo: site.com/?pagina=editar_noticia&id=1 E o que o PHP faria/fará é: 1 - Verificar qual a página a carregar (neste caso, editar_noticia) e faz o require. 2 - Verificar qual o id (neste caso, 1) e carregar os dados da base de dados referentes ao id = 1 👍 Gosto sempre de referir que os dados passados por URL (ou seja por $_GET) devem ser sempre "escapados" (escaped) para ter a certeza que não estás a meter dados inválidos, XSS ou código de injecção SQL (SQL Injection). Para isso deves sempre fazer algo do género: <?php /** * Usando o teu endereço exemplo: site.com/?pagina=editar_noticia&id * E sabendo que ele passa naquele código-exemplo que coloquei aqui antes * Vamos imaginar que este ficheiro é o editar_noticia.php **/ # Primeiro validamos se não foram passados os dados que pretendíamos pelo $_GET # Neste caso, só precisamos do id # Nota: separei os if's para se perceber os diferentes passos, visto que têm o mesmo final # caso se verifiquem . if( empty($_GET['id']) ) # Se for vazio, reencaminhamos para um sitio qualquer { header('location: /'); # Neste caso, o index exit(); } elseif( ctype_digit($_GET['id']) === FALSE ) # Caso o valor passado no id não seja um dígito { header('location: /'); # Neste caso, o index exit(); } # Se chegar aqui é porque está tudo de acordo # Depois, vamos então fazer o escape das variáveis que vamos usar no $_GET foreach($_GET as $key=>$value) $_GET[$key] = strip_tags($value); # Agora, vamos obter os dados da notícia a editar: # Nota: vou assumir que já tens a conexão à base de dados feita (o mysql_connect e o mysql_select_db) $result = mysql_query('SELECT * FROM noticias WHERE id = ' . mysql_real_escape_string($_GET['id'])); $record = mysql_fetch_object($result); # Aqui usa o mysql_fetch_object (eu prefiro), mas podes usar o mysql_fetch_assoc() # Daqui para baixo é só carregares os dados para o form. Exemplo: ?> <form name="teste" method="post" action=""> <label for="campo">Campo:</label><input name="campo" id="campo" type="text" value="<?php echo $record->campo;?>" /> </form> Abraço Link to comment Share on other sites More sharing options...
Ivo Pereira Posted December 21, 2009 at 02:52 AM Author Report Share #301617 Posted December 21, 2009 at 02:52 AM E imagina que eu numa página tenho uma lista de radioboxes, que vieram de uma consulta SQL, e cada uma delas corresponde a item. Tenho depois uma optionbox com um button, com as opções editar e eliminar. A pessoa escolhe o radio, onde escolhe o item que quer editar ou eliminar, e depois a acção, logo seguiria para uma página do tipo ?accao=editar_noticia&id=x Como faria eu isto? echo '<td><input type="radio" name="'.mysql_result($query, 0).'" value="'.mysql_result($query, 0).'"/></td>'; Estou a utilizar isto para dar o nome do id às radios, estou a seguir bem? E depois? Abraço e obrigado pela 'paxorra' 🙂 Link to comment Share on other sites More sharing options...
jcfr Posted March 1, 2010 at 02:02 PM Report Share #313947 Posted March 1, 2010 at 02:02 PM com o .htaccess se nao me engano farias algo do genero RewriteRule ^edit/([A-Za-z0-9-]+)/?$ alterar.php?id=$1 [NC,L] RewriteRule ^del/([A-Za-z0-9-]+)/?$ apagar.php?id=$1 [NC,L] e qundo reencaminhasse para www.mypage.com/edit/204/ iria abrir a página alterar.php?id=204 e quando o encaminhamento fosse www.mypage.com/del/204 iria abrir a página apagar.php?id=204 não sou especialista mas penso que seria assim.... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now