Recuperar valor pela URL [RESOLVIDO]

1. Recuperar valor pela URL [RESOLVIDO]

Helio
helioh3

(usa Debian)

Enviado em 23/09/2013 - 05:11h

Olá eu tenho um arquivo .htaccess com url amigável e não estou conseguindo recuperar valores da url.
Detalhes:



Quero recuperar o valor de um diretorio que estou passando pela url.

$baseDir = 'uploads/arquivos/';
$abreDir = ($_GET['dir'] != '' ? $_GET['dir'] : $baseDir );
echo $abreDir;


Na url fica assim: www.site.com.br/transparencia/home.php?dir=recuperar

feito isso não consigo, quando dou um echo para exibir alguma coisa na url. Não mostra.

Tenho também uma função que pela as urls, estou desconfiado dela, mas tentei de tudo e não consigo fazer a recuperação acima.
Função:
function getHome(){
$url = $_GET['url'];
$url = explode('/', $url);
$url[0] = ($url[0] == NULL ? 'index' : $url[0]);

if(file_exists('tpl/'.$url[0].'.php')){
require_once('tpl/'.$url[0].'.php');
}elseif(file_exists('tpl/'.$url[0].'/'.$url[1].'.php')){
require_once('tpl/'.$url[0].'/'.$url[1].'.php');
}else{
require_once('tpl/404.php');
}
}


htaccess:
[codeRewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1][/code]

Gostaria de saber como faço pra continuar usando a função url dinâmica e conseguir recuperar valores arquivo.php?teste=valor

Obrigado pela ajuda.


  


2. MELHOR RESPOSTA

Diego
diegobh

(usa CentOS)

Enviado em 23/09/2013 - 18:07h

Seu código está bem confuso, então vamos esclarecer alguns pontos:

ANTES DE TUDO O mod_rewrite DO APACHE TEM QUE ESTAR ATIVADO!

.htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?get=$1 [L,QSA]
</IfModule>


index.php

<?php
$get = $_GET['get'];
// pegar o caminho
$path = realpath(dirname(__FILE__));
// verificar a get
if($get != ''){
$dados = explode('/', $get);
// define o caminho e o nome do arquivo
$arquivo = $path . '/' . $dados[0] . '.php';
// verificar se o arquivo existe
if(file_exists($arquivo) == false){
// pagina de erro
include $path . '/erro404.php';
}else{
include $arquivo;
}
}else{
include $path . '/topo.php';
include $path . '/conteudo.php';
}
?>


home.php
 
<?php
echo 'Pagina Home';
?>


servicos.php

<?php
echo 'Pagina Serviços';
?>


contato.php

<?php
echo 'Pagina Contato';
?>


topo.php

<?php
echo 'Pagina do Topo';
?>


Links p/ as páginas:

<a href="/">Index</a><br />
<a href="/servicos">Serviços</a><br />
<a href="/contato">Contato</a><br />



então vou te mostrar como funciona,

http://localhost/contato/diego/5

para vc imprimir diego:
echo $dados['1'];

para vc imprimir 5
echo $dados['2'];

e assim por dianta: 3, 4 e etc...

so vou deixar bem claro para você, se vc usar get na home use assim:
http://localhost/index/diego/5

porque se vc colocar assim:
http://localhost/diego/5

o script vai achar que diego é um pagina: "diego.php", dai não vai encontrar o arquivo e vai redirecionar para pagina erro404.php


Fonte: http://phpbrasil.com/phorum/read.php?1,178229,178249

Espero que agora tenha ficado claro ;)

3. Re: Recuperar valor pela URL [RESOLVIDO]

CASSIO FERRAZ
cassio88

(usa Ubuntu)

Enviado em 23/09/2013 - 11:12h

1) sobre GET:
se a página for
http://example.com/?name=Hannes
echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
retornará
Hello Hannes!
foi assim que você fez?

2) sobre urls, você consultou o site do PHP?
http://www.php.net/manual/pt_BR/function.urlencode.php

Dá depois um retorno se isto resolveu.

Abraços.


4. Re: Recuperar valor pela URL [RESOLVIDO]

Helio
helioh3

(usa Debian)

Enviado em 23/09/2013 - 16:04h

Cassio, obrigado por responder.

Eu fiz uma leitura de diretorios pegando pela url:

<?php
$baseDir = 'uploads/arquivos/';
$abreDir = ($_GET['dir'] != '' ? $_GET['dir'] : $baseDir );
$openDir = dir($abreDir);
$strrdir = strrpos(substr($abreDir,0, -1),'/');
$voltaDir = substr($abreDir,0,$strrdir+1);

while($arq = $openDir -> read()):
if($arq != '.' && $arq != '..'):
if(is_dir($abreDir.$arq)){
//diretorios
echo'<div class="lista">';
echo'<div class="ico"><img src="'.BASE.'/tpl/transparencia/images/ico-folder.png" border="0"></div>';
echo'<h2>'.$arq.'</h2>';

echo' <h4><a href="home?dir='.$abreDir.$arq.'/">Abrir</a></h4>';
echo'</div>';

}else{
//arquivos
echo'<div class="lista">';
echo'<div class="ico"><img src="'.BASE.'/tpl/transparencia/images/ico-pdf.png" border="0"></div>';
echo'<h2>'.$arq.'</h2>';
echo' <h4><a href="'.$abreDir.$arq.'">Visualizar</a></h4>';

echo'</div>';
}

endif;

endwhile;
if($abreDir != $baseDir){
echo'<a href="home.php?dir='.$voltaDir.'">Voltar</a>';
}
$openDir ->close();

?>


Só que quando tento fazer o debug pra vê se realmente ele está pegando o valor de "dir" passado pela URL. Ele não mostra.

$baseDir = 'uploads/arquivos/';
$abreDir = ($_GET['dir'] != '' ? $_GET['dir'] : $baseDir );
echo $abreDir;

Exemplo:
Quando eu digito: www.meusite.com.br/arquivo.php?dir=qualquercoisa
Ele da url não encontrada por causa da minha função que inclui os arquivos(404.php) .php da url pegando na pasta TLP/ que é o meu layout do site.


function getHome(){
$url = $_GET['url'];
$url = explode('/', $url);
$url[0] = ($url[0] == NULL ? 'index' : $url[0]);

if(file_exists('tpl/'.$url[0].'.php')){
require_once('tpl/'.$url[0].'.php');
}elseif(file_exists('tpl/'.$url[0].'/'.$url[1].'.php')){
require_once('tpl/'.$url[0].'/'.$url[1].'.php');
}else{
require_once('tpl/404.php');
}
}


Seu eu tento digitar: www.meusite.com.br/arquivo?dir=qualquercoisa, tirando o .php ele não recupera o valor também.


Já consultei o link que me mando mas não consegui.

Obrigado pela Cássio

Abração.







5. Re: Recuperar valor pela URL [RESOLVIDO]

Diego
diegobh

(usa CentOS)

Enviado em 23/09/2013 - 16:42h

Adicione logo depois de abrir o php:

<?php
$teste = $_GET['teste'];


E no final do seu arquivo, adicone:
<script> alert('<?= $teste; ?>'); </script> 


Ex completo (teste.php):

<?php
$teste = $_GET['teste'];
$dir = $_GET['dir'];
?>
<html>
<head></head>
<body>
<script>
alert('Valor de Teste: <?= $teste; ?>');
alert('Valor de Dir: <?= $dir; ?>');
</script>
</body>
</html>


Acesse a página:
www.sua.pagina.com.br/?dir=QQ_DIR_AQUI&teste=TESTE_OK!

Deve abrir uma msg de alerta com o valor: "Teste_OK!"

É assím que funciona o método $_GET.


6. Recuperar valor pela URL

CASSIO FERRAZ
cassio88

(usa Ubuntu)

Enviado em 23/09/2013 - 16:44h

Helio,
Eu fiquei em dúvida sobre exatamente que dúvidas ficaram, em todo o caso postei 2 coisas abaixo:

1)
http://www.php.net/manual/pt_BR/ref.url.php
mostra as funções relacionadas a url, você conseguiu abrir a página? Teve dificuldade no inglês?

2)
"Seu eu tento digitar: www.meusite.com.br/arquivo?dir=qualquercoisa">www.meusite.com.br/arquivo?dir=qualquercoisa, tirando o .php ele não recupera o valor também."
Quando você digita:
www.meusite.com.br/arquivo.php?dir=qualquercoisa">www.meusite.com.br/arquivo.php?dir=qualquercoisa
$url = $_GET['dir'];
retorna
qualquercoisa
não entendi o motivo do $url = explode('/', $url);
note que o site é www.meusite.com.br
e você mandou executar o arquivo
arquivo.php
e passou o parâmetro dir com o valor qualquercoisa

Fico no aguardo
um abraço









7. Re: Recuperar valor pela URL [RESOLVIDO]

Helio
helioh3

(usa Debian)

Enviado em 24/09/2013 - 03:19h

Cássio e Diego, desculpas pela demora...

Meu diretorio:

http://i535.photobucket.com/albums/ee351/helioh3/estruturadediretorios.jpg

O arquivo htaccess. que contém a varial $url que você estava com dúvida Cássio:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1


A minha função:

function getHome(){
$url = $_GET['url'];
$url = explode('/', $url);
$url[0] = ($url[0] == NULL ? 'index' : $url[0]);

if(file_exists('tpl/'.$url[0].'.php')){
require_once('tpl/'.$url[0].'.php');
}elseif(file_exists('tpl/'.$url[0].'/'.$url[1].'.php')){
require_once('tpl/'.$url[0].'/'.$url[1].'.php');
}else{
require_once('tpl/404.php');
}
}

busca essa variavel: e adiciona no meu diretório principal a pasta 'tpl/' ficando assim:
www.meusite.com.br/tpl/
Veja:
http://i535.photobucket.com/albums/ee351/helioh3/tpl.jpg

Ou seja, quando coloco um arquivo fora do diretório do meu site, consigo recuperar valores normalmente, como fiz com o teste que vc me mandou veja:
http://i535.photobucket.com/albums/ee351/helioh3/testephp.jpg

Agora quando eu coloco o arquivo no meu 'tpl/', que é onde tá o arquivo de leitura do diretório:
http://i535.photobucket.com/albums/ee351/helioh3/arquivoleituradediretorio.jpg
<title><?php echo SITENAME ;?></title>
<meta name="language" content="pt-br" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="description" content="<?php echo SITEDESC ;?>" />
<meta name="keywords" content="<?php echo SITETAGS;?>" />
<meta name="author" content="APPSTUDIO" />
<meta name="url" content="<?php echo BASE;?>" />
<meta name="robots" content="INDEX,FOLLOW" />
</head>
<div id="contener">
<?php
setArq('tpl/header');
?>
<div id="content">
<div class="transparencia">
<div class="logo">
<a href="#"><img src="<?php setHome();?>/tpl/transparencia/images/logo.png" alt="Logo" title="Portal Transparência" border="0"></a>
</div>

<div class="intro">
<p>O Portal Transparência é um canal pelo qual o cidadão pode acompanhar os gastos realizados diretamente pelo Poder Legislativo. Os registros existentes no Portal da Transparência serão permanentemente atualizados.</p>
<p>A atual gestão vem adotando diversas medidas para informatizar a instituição e possibilitar a geração de informações detalhadas, que atendam aos preceitos de lisura e transparência com as finanças públicas da Câmara Municipal de Dianópolis.</p>

</div>
<?php
$dir = $_GET['dir'];
$baseDir = 'uploads/arquivos/';
$abreDir = ($_GET['dir'] != '' ? $_GET['dir'] : $baseDir );
$openDir = dir($abreDir);
$strrdir = strrpos(substr($abreDir,0, -1),'/');
$voltaDir = substr($abreDir,0,$strrdir+1);

while($arq = $openDir -> read()):
if($arq != '.' && $arq != '..'):
if(is_dir($abreDir.$arq)){
//diretorios
echo'<div class="lista">';
echo'<div class="ico"><img src="'.BASE.'/tpl/transparencia/images/ico-folder.png" border="0"></div>';
echo'<h2>'.$arq.'</h2>';
echo' <h4><a href="home?dir='.$abreDir.$arq.'/">Abrir</a></h4>';
echo'</div>';
}else{
//arquivos
echo'<div class="lista">';
echo'<div class="ico"><img src="'.BASE.'/tpl/transparencia/images/ico-pdf.png" border="0"></div>';
echo'<h2>'.$arq.'</h2>';
echo' <h4><a href="'.$abreDir.$arq.'">Visualizar</a></h4>';

echo'</div>';
}

endif;

endwhile;
if($abreDir != $baseDir){
echo'<a href="home&home?dir='.$voltaDir.'">Voltar</a>';
}
$openDir ->close();

?>
<div class="texto">
<p>Os arquivos estão em formato PDF. O programa para visualizar este tipo de documento é o Adobe Reader. Baixe gratuitamente clicando no botão abaixo:</p>
<a href="http://get.adobe.com/br/reader/" style="border:0" target="_blank" title="Baixar Adobe Reader"><img src="<?php setHome();?>/tpl/transparencia/images/getadobe.png"></a>
</div>
</div>
</div><!--/<CONTENT--></CONTENT-->

<script> alert('<?= $dir; ?>'); </script>


não consigo recuperar os valores como pode ver:
http://i535.photobucket.com/albums/ee351/helioh3/mostrarvaloresjquery.jpg

Será se não é por causa do htaccess que tá recebendo uma recuperação? veja:
RewriteRule ^(.*)$ index.php?url=$1 

ele já tá pegando um valor depois de index.php?url=$1 ou seja quando eu adicionar o meu home?dir=qualquercoisa ele terá que adicionar mais um valor ou seja irá passar então dois valores. Será se pode passar mais de dois..?rsrs

Obs. eu tenho que passar desse jeito: home?dir=qualquercoisa, ao em vês de passar:home.php?dir.

Seu passar home.php?dir, dá erro por que a função já tá incluindo arquivos .php

Cássio e Diego, pela ajudar.











8. Re: Recuperar valor pela URL [RESOLVIDO]

Helio
helioh3

(usa Debian)

Enviado em 26/09/2013 - 01:19h

Deu certo:

Fiz assim...

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1


Alterei apenas a variável $url utilizando seu htaccess Diego:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
</IfModule>


Agradeço ao Cássio e ao Diego por dedicar um pouco de seu precioso tempo me ajudando.

Grande abraço a vocês.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts