Jump to content
landerbadi

Passar variável pela URL sem informar o nome do arquivo .php

Recommended Posts

Sim... Manipulando o get:

<?php
$entrada = (isset($_GET['exemplo']) && !empty($_GET['exemplo']) ? $_GET['exemplo'] : false);
switch($entrada) {
  case 'idx':
    $arquivo = 'arquivo_qualquer.php';
    break;
  case 'outro_exemplo':
    $arquivo = 'outro_arquivo.php';
    break;
  default:
    $arquivo = 'arquivo_padrao.php';
    break;
}
include($arquivo);

Isso ficaria no index.php, e toda vez que um parâmetro de url exemplo existir ele vai incluir o arquivo de acordo com o valor caso não um arquivo padrão é incluído.

Então se a url for

http://localhost?arquivo=idx&id=123

 

Quer dizer que arquivo_qualquer.php será incluído então o parâmetro id você poderá manipular-lo no arquivo aberto.

 

Isso é uma questão de rotina quando trabalhamos com url's amigáveis.

Share this post


Link to post
Share on other sites

Boa tarde @Omar~

Quero aqui aproveitando o post questão de url

Bom eu tenho em meu HTACCESS

ele me dar uma url que preciso de boa me trazendo titulo e o id

# PERMISSIONANDO REESCRITA
#-------------------------------------------------------------------
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f

#-------------------------------------------------------------------
# EXTENSAO PHP
#-------------------------------------------------------------------
RewriteRule ^(.*)$ $1.php
#-------------------------------------------------------------------
RewriteEngine On    # Turn on the rewriting engine
# not rewrite css, js and images
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpg|gif|png)$ [NC]
#cria a condicao
#RewriteRule ^([a-z0-9-]+)/?$ cidades.php?nome=$1 [L,NC]
RewriteRule ^([0-9A-z_-]+)\/([0-9A-z_-]+)\/$ job_detalhes.php?nome=$1&id=$2 [QSA,L,NC]

O que eu preciso é fazer com que ele me traga apenas o titulo sem o id ou seja que ele aceita  pegar apegas o titulo

do jeito que esta ai por mais que eu tente pegar apenas o titulo ele não aceita da erro 404 diz que a pagina não existe

No caso não estou usando nada de mais que htaccess e uma função para quebrar os caracteres...

 

    //URL DEBUG CHARACTERS
    function encodeSEOString($string) {
        $string = preg_replace("`\[.*\]`U", "", $string);
        $string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i', '-', $string);
        $string = htmlentities($string, ENT_COMPAT, 'utf-8');
        $string = preg_replace("`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i", "\\1", $string);
        $string = preg_replace(array("`[^a-z0-9]`i", "`[-]+`"), "-", $string);
        return strtolower(trim($string, '-'));
    }
    ;

 

Já no uns do html esta desta forma ou seja ele pode ficar assim com este id não tem problemas

<a href="<?php echo encodeSEOString($dados['titulo']); ?>/<?php echo $dados['id']; ?>/" target="_blank">

Mais já neste outro html quero que fica desta forma que será de listar a cidade que ficaria mais o menos assim

Ex:

Se eu deixa como o primeiro html

ficaria assim

meusite.com/sao_paulo/12/forum-imasters/123/

 

mais quero que fique desta forma

meusite.com/sao_paulo/forum-imasters/123/

 

Quando eu clicar onde estará todas as cidade no index.php

ele vai abrir assim

 

meusite.com/sao_paulo/   

<a href="<?php echo encodeSEOString($dados['titulo']); ?>/" target="_blank">

Nas tabelas

TABLEA 01

news

id

titulo

data

texto

resumo

status

 

Na tabela

TABELA

cidades

id

titulo

estado

status

data

 

Espero que possa entender ai

e Peso desculpas ao amigo ai que fez o post e os pessoal do FÓRUM também, se estou infringindo a regra do FÓRUM

Share this post


Link to post
Share on other sites

@Jack Oliveira

Não entendi de onde vem as url's se são inseridas ou composta no html como links.

 

Bom.. não sei o que esse "12" faz e qual a utilidade em:

2 horas atrás, Jack Oliveira disse:

meusite.com/sao_paulo/12/forum-imasters/123/

 

No entanto se ele for uma informação necessária você não pode ofuscar.

Justamente porque irá precisar para fazer alguma coisa. Do contrário você poderá criar funções que filtrem a entrada da url, e remova dados desnecessários, mas se forem desnecessários a arquitetura da aplicação deve ser reavaliada, pois está criando algo não usável.

Share this post


Link to post
Share on other sites
6 horas atrás, Omar~ disse:

Não entendi de onde vem as url's se são inseridas ou composta no html como links.

 

Ola @Omar~ Eu estou criando um job

No arquivo index.php

dentro dele me mostrara todas as cidades que foram cadastradas no banco de dados

dentro deste index.php

terá esta url 

<a href="<?php echo encodeSEOString($dados['titulo']); ?>/" target="_blank">

este é o HTML do job da cidade

        	<div class="col-md-4 grid_view show_listing_cidade">
        
            	<div class="listing_wrap">
                    <div class="listing_img">
                        <?php if ($nova_guia == 'S') { ?>
                        <a href="<?php echo encodeSEOString($cidade['titulo']); ?>/" target="_blank">
                            <?php } ?>
                            <img src="./imagem/empresa/<?php echo $cidade["imagem"]; ?>" alt="<?php echo $cidade["titulo"]; ?>"></a>
                    </div>
                    <div class="listing_info">
                        <?php if ($nova_guia == 'S') { ?>
                        <a href="<?php echo encodeSEOString($cidade['titulo']); ?>/" target="_blank">
                            <?php } ?>
                           <h4><?php echo $strtitulo;?></a></h4>
                      <p><?php echo substr($cidade["frase"], 0, 60); ?></p>						
                        <div class="listing_review_info">
                            <p><span class="review_score"><?php echo $dados["visitas"]; ?></span></p>
                        </div>
                    </div>
                </div>
            </div>
6 horas atrás, Omar~ disse:

Bom.. não sei o que esse "12" faz e qual a utilidade em:

este "12" ele seria o id da cidade 

meusite.com/sao_paulo/12/forum-imasters/123/

 

Ex:

TABELA "cidades"

ID      TITULO              ESTADO                  DATA           STATUS

1       Cuiabá                Mato Grosso       20/05/2000    Ativo

2      Rio de Janeiro    Rio de Janeiro     22/05/2000   Ativo

10    Salvador              Baia                      25/06/2000   Ativo

12   São Paulo            São Paulo             28/07/2000  Ativo

 

 

Bom o que estou tentando falar ai é como posso pegar usando apenas este htaccess e esta função para que na url amigavel não pegar o id

Disso aqui

meusite.com/sao_paulo/12/

 

ele ficar assim

meusite.com/sao_paulo/

 

Ex da url do fórum

https://forum.imasters.com.br/topic/584707-passar-variável-pela-url-sem-informar-o-nome-do-arquivo-php/

Nela mostra o ID 584707 depois mostra o TITULO -passar-variável-pela-url-sem-informar-o-nome-do-arquivo-php/ vamos supor que este titulo fosse o nome de uma cidade

 

Neste caso no que eu quero que ficasse assim

https://forum.imasters.com.br/passar-variável-pela-url-sem-informar-o-nome-do-arquivo-php/

 

Entendeu

 

Na home.php

é onde estará as informações desta cidade

ou seja esta url seria

meusite.com/home.php?id12

 

No jeito que eu fiz ela fica assim

meusite.com/sao_paulo/12/

quero que fica assim

meusite.com/sao_paulo/

 

No php que pega as listagem do banco esta assim

<?php	
	require_once('../funcao/database.php');

	
	if (ModoManutencao()) { header("Location: ../manutencao/"); }

$id = get('id');
    // Numa explicação no internet dissia que para pegar apenas o TITULO sem o ID tinha que fazer da seguinte forma
   // Pegar onde esta $id = get('id'); trocar o id de dentro do ('id') colocar ('titulo') fazendo ficar desta forma $id = get('titulo');
   // E onde esta o  id = '{$id}' fazer  assim  titulo = '{$id}' que assim daria para pegar apenas o titulo do banco de dados
     //$id = get('titulo');


	$Query = DBRead('cidades','*',"WHERE   status = 'Ativo' AND indexar = 'S' AND id = '{$id}'");  if (is_array($Query)) { foreach ($Query as $cidades) {
                    $titulo   = $cidades['titulo'];
                    $estado   = $cidades['estado'];
                    $status   = $cidades['status'];

Seria isso                                                                        

 

Share this post


Link to post
Share on other sites

@Jack Oliveira

Hun...

8 horas atrás, Jack Oliveira disse:

esta função para que na url amigavel não pegar o id

Eu usaria o modelo assim:

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

Então tudo que vem na url depois do endereço físico base passa a ser $_GET['entrada']

Assim sendo o get para isso sao_paulo/12/forum-imasters/123/ é uma string só.

No entanto como temos que obter cada entrada temos que dividi-la em diferentes coisas.

<?php
$filtro = filter_input(INPUT_GET, 'entrada', FILTER_DEFAULT); // Identifica se é realmente uma super global GET
$requisitado = empty($filtro) ? 'padrao' : $filtro; // Se exite assume o existente, do contrário o get será "padrao"
$separa = explode('/', $requisitado); // Aqui separamos em índices a partir de todas ocorrências de barras
$url = array_filter($separa); // Removemos então ídices nulos ou vazios do array

 

Se dermos então var_dump($url) com a seguinte url "meusite.com/sao_paulo/12/forum-imasters/123/teremos:

Citar

array(5) {

    [0]=> string(9) "sao_paulo"

    [1]=> string(2) "12"

    [2]=> string(14) "forum-imasters"

    [3]=> string(3) "123"

}

 

Com isso fica simples manipular cada entrada na url, por exemplo se eu quiser remover o 12.

unset($url[1]);

 

No entanto como você disse não há necessidade desse 12.

Então vamos supor que eu escreva o seguinte link, ao acessar-lo irei consultar no banco se os dados do link existe

<a href="sao_paulo/outra_coisa">Exemplo</a>

 

Ao redirecionar, quer dizer que url no índice zero é "sao_paulo" então eu uso essa informação $url[0] para fazer a consulta no banco de dados pelo nome da cidade.

$query = "SELECT * FROM cidades WHERE titulo = '{$url[0]}'";

O ideal é que sempre manipule a entrada para transformar a string do índice em formato válido para o banco de dados, seja na hora de salvar, seja na hora de ler.

Veja essa postagem:

https://forum.imasters.com.br/topic/584706-transformar-uma-frase-em-formato-url/?do=findComment&amp;comment=2283669

 

Você terá que reestruturar seus databases para no caso usar JOINS, o nome de cada cidade deve está presente em db's que tem dados compartilhados, já que não quer usar o id.

 

Uma coisa que me chamou atenção foi em uma query apresentada por você temos o seguinte trecho:

8 horas atrás, Jack Oliveira disse:

indexar = 'S'

Hora que nas estruturas de tabelas que você apresentou não existe a coluna indexar.

Logo temos um erro de query.

 

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Gildvan Arley
      Olá a todos
      estou criando uma área do usuário onde vai ser listados os kits do servidor de jogos que eu tenho em sua área.
      quando o kit acaba vai aparecer o botão de pagamento pra ele e nessa hora cada kit vai ter seu valor, estou com problema na parte de link do pagamento
      gostaria de saber qual o formato devo usar varchar ? no tipo la no BD e como posso pegar esse link la do banco de dados? 
      testei uns formas aqui e nada deu certo.
       
      cada kit tem seu valor, ai eu quero colocar o link de pagamento, pra quando o kit for removido aparecer o botão de pagamento pra ele, os botões já estão dando certo, só estou com problema pra pegar
      o link de cada kit. os valores de cada kit já estão criados no mercado pago
      <?php $data = date("Y/m/d"); $fimVip = $exibir_pag["fimvip"]; $dataPag = $exibir_pag["data"]; $mercadoP = $exibir_vip["mercadopago"];//A URL do mercado pago que esta no banco de dados if ($dataPag == NULL || strtotime($fimVip) < strtotime($data)){?> <table class="table"> <thead> <tr><span class="list-group-item text-left"><strong>Formas de pagamentos</strong></span></h5></tr> <tr> <th><a target="_blank" href="<?php echo $mercadoP;?>"><span class="label label-info">M. Pago</span></a></th> <th><a target="_blank" href="#"><span class="label label-success">PicPay</span></a></th> <th><a target="_blank" href="#"><span class="label label-info">Paypal</span></a></th> </tr> </thead> </table> <?php } else { echo ''; } ?> Imagem do painel
      do BD
       
    • By landerbadi
      Olá galera. Estou com uma dúvida aqui e vou tentar ser o mais objetivo possível.
       
      Tenho uma váriável $texto com o valor Alguém viu minha maçã?
       
       
      Eu preciso transformar essa variável em um formato de URL. Ou seja, remover do texto os acentos, espaços, sinais de pontuação, etc. Ficando algo assim: alguem_viu_minha_maca (formato URL compatível com a barra de endereço do navegador).
       
      Alguém sabe como fazer isso?
    • By goio
      Pessoal, estou com dificuldades com essa URL amigável, oque pretendo é o seguinte:
          No array $pages são as páginas permitidas, contato.php e teste.php
          Até ai tudo bem chama as páginas certas, se não existir os arquivos mostra a mensagem que a página não existe.
               http://localhost/contato
          Agora estou com dificuldades de fazer essa verificação pelo banco de dados, se baseando pelo slug da minha tabela
              http://localhost/produtos/tenis-azul
              Apenas exibe a mensagem de que a página não existe.
       
      Como poderia resolver esse problema? se precisar posto a class CRUD

          
      <?php class URL extends CRUD     {         private $selectTable;         private $listResult;         private function setURL()         {             $pages = array ( "fazer-pedido", "contato", "page-teste" );             $categorias = array ( "sapato", "tenis" );             if ( isset ( $_GET['url'] ) ) :                 $url = addslashes ( $_GET['url'] );                 $sepURL = explode ( "/", $url );             endif;             if ( isset( $sepURL[1] ) ) :                 $this->selectTable = $this->selectTable( "COUNT(slug) AS slug", "tabela", "LIMIT 1", array () );                 $count = $this->selectTable->rowCount();                 foreach ( $this->selectTable as $this->listResult ) :                                          if ( $sepURL[1] === $this->listResult['slug'] ) :                         require DIR_FILES."slug".EXT;                     else :                         echo "Essa página não existe, Verificação: ".$sepURL[1];                     endif;                 endforeach;             elseif ( isset( $sepURL[0] ) && in_array ( $sepURL[0], $pages ) ) :                 if ( file_exists ( DIR_FILES.$sepURL[0].EXT ) ) :                     require DIR_FILES.$sepURL[0].EXT;                 else :                     echo "Essa página não existe";                 endif;             elseif ( isset( $sepURL[0] ) && in_array ( $sepURL[0], $categorias ) ) :                 require DIR_FILES."categorias".EXT;             else :                 require DIR_FILES."home".EXT;             endif;         }         public function getURL()         {             return $this->setURL();         }     }  
    • By groudon900
      Peço ajuda de coração de vocês, eu to batendo bastante cabeça, eu fiz o site todo em URL amigavel, e fui implementar uma galeria que passa de pagina para pagina 2 e assim vai , só que como ela faz um URL com o ID, o site não aceita e não sei o que fazer
       
      código da pagina de galeria
      <?php if(isset($_SESSION['msg'])){ unset($_SESSION['msg']); } //Receber o número da página $pagina_atual = filter_input(INPUT_GET,'pagina', FILTER_SANITIZE_NUMBER_INT); $pagina = (!empty($pagina_atual)) ? $pagina_atual : 1; //Setar a quantidade de itens por pagina $qnt_result_pg = 50; //calcular o inicio visualização $inicio = ($qnt_result_pg * $pagina) - $qnt_result_pg; $result_usuarios = "SELECT * FROM galeria LIMIT $inicio, $qnt_result_pg"; $resultado_usuarios = mysqli_query($conn, $result_usuarios); while($row_usuario = mysqli_fetch_assoc($resultado_usuarios)){ ?> <img src ="fotos\<?php echo $row_usuario['foto'] ?>" class="foto2"> <?php } //Paginção - Somar a quantidade de usuários $result_pg = "SELECT COUNT(id) AS num_result FROM noticias"; $resultado_pg = mysqli_query($conn, $result_pg); $row_pg = mysqli_fetch_assoc($resultado_pg); //echo $row_pg['num_result']; //Quantidade de pagina $quantidade_pg = ceil($row_pg['num_result'] / $qnt_result_pg); //Limitar os link antes depois $max_links = 2; echo "<a href='index.php?pagina=1'>Primeira</a> "; for($pag_ant = $pagina - $max_links; $pag_ant <= $pagina - 1; $pag_ant++){ if($pag_ant >= 1){ echo "<a href='index.php?pagina=$pag_ant'>$pag_ant</a> "; } } echo "$pagina "; for($pag_dep = $pagina + 1; $pag_dep <= $pagina + $max_links; $pag_dep++){ if($pag_dep <= $quantidade_pg){ echo "<a href='index.php?pagina=$pag_dep'>$pag_dep</a> "; } } echo "<a href='index.php?pagina=$quantidade_pg'>Ultima</a>"; ?> Agora o código da URL amigável
       
      <?php $pro = 'proteção'; $pag = isset($_GET['pag']) ? $_GET['pag'] : 'home'; $e = explode('/',$pag); $pg = $e[0]; if(file_exists("pags/$pg.php")){ include"pags/$pg.php"; }else{ echo '<div class="alert alert-danger"> <strong>Página Inexistente!</strong> Desculpe, mas está página não existe. </div>'; echo '<div class="alert alert-danger"> <strong>Por Favor!</strong> Selecione uma opção a partir do menu, caso este erro Persista entre em contato com a administração. </div>'; } ?>  
       
      onde acho que está o problema
       
      echo "<a href='index.php?pagina=$quantidade_pg'>Ultima</a>";  
    • By reberthkss
      Bom dia!
       
      Eu to precisando implementar URL no meu projeto, mas tudo que eu achei na internet não ta dando certo... Alguem manja?
       
      To utilizando o wamp sserver aqui no meu pc
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.