Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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";$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?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/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/mysqli.real-escape-string.php)
[https://www.php.net/manual/pt_BR/pdo.prepare.php](https://www.php.net/manual/pt_BR/pdo.prepare.php)
[https://imasters.com.br/back-end/sql-injection-com-php](https://imasters.com.br/back-end/sql-injection-com-php)FUNCIONOU Gleyson.
Seguirei tua orientação Michael.
Aguadeço