Jump to content
Aureo Almeida

Problema com variável $_GET ao passar parâmetro para o SQL

Recommended Posts

Eu possuo em uma página em que existe um menu, com categorias inseridas a partir de um banco de dados, e na mesma página uma listagem de produtos.

A função deste menu é enviar para a clausula where do SQL que lista os produtos parâmetros que permitam filtro dos produtos. Faço isso com a variável $_GET, da seguinte forma:

$sub_id = $_GET['sct_id'];

Isso funciona certinho, porém o problema é que quando a página é carregada, a não ser que seja feita uma opção no menu para selecionar os produtos, a listagem deles volta vazia e com o seguinte erro:

array(0) { } 
Notice: Undefined index: sct_id in D:\XAMPP\htdocs\projeto\arq\cosm.php on line 76

Tentei desenvolver as seguinte condições que mudassem o SQL,  mas não consegui fazer dar certo:

if(empty($sub_id = array(0)))
$sql = "SELECT * FROM psd_produtos WHERE  ctg_id = 1";
else
{
$sql = "SELECT * FROM psd_produtos WHERE  ctg_id = 1 AND sct_id = '$sub_id'";
}

Como fazer com que o SQL que orienta a consulta quando a página for carregada seja um, e quando passo parâmetro via GET seja outro?

Share this post


Link to post
Share on other sites

Só, PELAMORDEDEUS gatanta que o usuário não consiga alterar a query com outros dados... tipo:

 

https://suapagina.local/produtos?sct_id=%27%20OR%20%27%27%20=%20%27

Que, escapado fica assim:

 

https://suapagina.local/produtos?sct_id=' OR '' = '

Que, acaba gerando a seguinte variável no seu script:

<?php

$_GET['sct_id'] === "' OR '' = '";  // true

E, consequentemente, sua query fica assim:

SELECT * FROM psd_produtos WHERE  ctg_id = 1 AND sct_id = '' OR '' = ''

Deixando o usuário listar o que quiser ou mesmo executar outras queries como apagar os produtos de sua loja.

 

Recomendo você estudar sobre escapamento e preparação de queries.

 

Referencias:

https://www.php.net/manual/pt_BR/function.mysql-real-escape-string.php

https://www.php.net/manual/pt_BR/mysqli.real-escape-string.php

https://www.php.net/manual/pt_BR/pdo.prepare.php

https://imasters.com.br/back-end/sql-injection-com-php

 

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 Pedro Batista Lopes
      Olá pessoal alguém pode me ajudar estou com uma duvida, espero que vocês consigam me ajudar,
      Faço uma busca no banco de dados com mysql, depois faço um laço de repetição foreach e pego os dados do banco e jogo em uma tabel, 
      gostaria de que um campo desse laço se repetisse varias vezes.
      No banco ele pegas as informações de nota fiscal, cliente,nome do cliente e a soma das notas por um período de tempo,
      gostaria que repetisse esse período, que no caso é um ano de janeiro a dezembro.
      segue o codigo.
      </form> <?php $dataIncio = $_POST['data-ini']; $dataFim = $_POST['data-fim']; $dataIncio = date('d/m/Y', strtotime($dataIncio)); $dataFim = date('d/m/Y', strtotime($dataFim)); $buscaNotas = $db->prepare("select a.empresa, a.cliente, b.nom_cliente, e.cod_uni_feder, d.cod_repres, b.cod_tip_cli, count(a.nota_fiscal) as QTD_MES from fat_nf_mestre a join clientes b on (b.cod_cliente = a.cliente) join fat_nf_item c on (c.empresa = a.empresa and c.trans_nota_fiscal = a.trans_nota_fiscal) join pedidos d on (d.cod_empresa = c.empresa and d.num_pedido = c.pedido) join cidades e on (e.cod_cidade = b.cod_cidade) where a.empresa = '10' and dat_hor_emissao between EXTEND(MDY(01,01,2019)) and EXTEND(MDY(01,30,2019)) // esse é o campo que gostaria que repetisse a data está ///01/01/2019 a 01/30/2019 gostaria de um jeito para mudar 01/02//2019 a 30/02/2019 assim por diante. and d.cod_tip_carteira = '1' --and b.nom_cliente = 'MAGAZINE LUIZA S/A' --and b.cod_cliente = '047960950075482' and c.seq_item_nf = '1' and a.sit_nota_fiscal <> 'C' group by 1,2,3,4,5,6"); $buscaNotas->execute(); $linha = $buscaNotas->fetchAll(PDO::FETCH_ASSOC); ?> <table border="1px solid black" class="table col-sm-12 table-striped table-hover"> <thead class="thead-dark "> <tr> <th>Empresa</th> <th>Cliente</th> <th>Nome do cliente</th> <th>Uni_Feder</th> <th>Codigo Representante</th> <th>Cod_tipo_cli</th> <th>janeiro</th>// aqui eu faria janeiro, feveiro, março, abril.....até dezembro <th>Fevereiro</th> </tr> </thead> <?php foreach ($linha as $listar) { ?> <tr> <td><?= $listar['empresa'];?></td> <td><?=$listar['cliente']; ?></td> <td><?=$listar['nom_cliente']; ?></td> <td><?=$listar['cod_uni_feder']; ?></td> <td><?=$listar['cod_repres']; ?></td> <td><?=$listar['cod_tip_cli']; ?></td> <td><?=$listar['qtd_mes']; ?></td> // aqui é a saida onde queria que saisse o restante dos dados. </tr> <?php } ?> </table> <?php   
    • By vdso
      Bom dia! Sou novo aqui no forum e tambem estou iniciando com sql, onde trabalho preciso encontrar uma determinada tabela e me falaram para procurar no dicionário de dados, como faço isso?
    • By device
      Olá pessoal. Bom dia...
      Preciso somar campos de uma tabela, mas de acordo com critérios que estão na base de dados
      Lá tenho lançado valores como segue.
      MES - ANO - ITEM - VALOR
      O campo mes vai de Janeiro a dezembro, setados em Combobox
      O campo ANO, ITEM selecionados tb em ComboBox e Valor preenchido em campo Edit
      Agora é o problema. 
      Preciso filtrar a soma de acordo com o MES, ANO e ITEM e somar seus valores que estão nos campos Edit
      Por exemplo. 
      Somar todos os Valores, de acordo com o MES, ANO e ITEM (farmácia ou mercado) por exemplo e colocar em uma var.
      O Combobox ITEM, assim como mes de 30 dias e Ano de 2019 à 20xx, tem itens, como Farmacia, mercado, medico, dentista, exames, etc    
      Alguma santa alma poderia dar uma ajuda?  
    • By teylorg
      Olá, boa tarde, estou com este erro quando importo a database e não sei como resolver.
       
      -- Copiando estrutura para view onnde.mega_anunciantes -- Criando tabela temporária para evitar erros de dependência de VIEW CREATE TABLE `mega_anunciantes` ( `cod_mega` INT(13) UNSIGNED NOT NULL, `razao` VARCHAR(250) NOT NULL COLLATE 'latin1_swedish_ci', `nome` VARCHAR(250) NOT NULL COLLATE 'latin1_swedish_ci', `cnpj` VARCHAR(200) NOT NULL COLLATE 'latin1_swedish_ci', `inscricao` VARCHAR(50) NOT NULL COLLATE 'latin1_swedish_ci', `slogo` VARCHAR(200) NOT NULL COLLATE 'latin1_swedish_ci', `pais` VARCHAR(200) NOT NULL COLLATE 'latin1_swedish_ci', `estado` VARCHAR(200) NOT NULL COLLATE 'latin1_swedish_ci', `cidade` VARCHAR(100) NOT NULL COLLATE 'latin1_swedish_ci', `endereco` VARCHAR(150) NOT NULL COLLATE 'latin1_swedish_ci', `bairro` VARCHAR(200) NOT NULL COLLATE 'latin1_swedish_ci', `cep` VARCHAR(50) NOT NULL COLLATE 'latin1_swedish_ci', `complemento` VARCHAR(200) NOT NULL COLLATE 'latin1_swedish_ci', `email` VARCHAR(200) NOT NULL COLLATE 'latin1_swedish_ci[...]
    • By whoopic
      Olá a todos!
      Estou a tentar perceber qual a melhor abordagem para:
      (Campos/Colunas:)
      A - Moeda
      B - Igual a A
      C - (A+B)/2
      D - Caixa de seleção7Checkbox : Se "ligada": C=C/2
       
      Preciso que estes campos sejam "persistentes", para que os possa usar em relatórios.
       
      Pensei em colunas "computadas". Consigo realizar tudo isto com essa abordagem?
      Tentei por exemplo no campo B, usando o campo de fórmula para coluna computada e inserindo o nome da coluna A.
       
       
      Pode alguém dar-me um empurrãozinho?
      Obrigado desde já.
       
×

Important Information

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