• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sir Pereira

[RESOLVIDO] Get URL

15 mensagens neste tópico

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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Será que me podias dizer o nome dessa função ou coisa assim do género ? :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@mAiN_iNfEcTiOn: era mesmo isso que procurava :) obrigado

lembro-me de utilizar isso :)

obrigado a todos mesmo assim :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 é :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 é? :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :P 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

:thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, tenho de explorar bem isso :thumbsup:

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 :P)

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í?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Certo :P

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 :thumbsup:

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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' :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora