Ir para conteúdo
Fórum Script Brasil
  • 0

sistema de pesquisa c/ filtros por $_get?


Tesla

Pergunta

estou montando um site pra um projeto mas estou com um problema, bom primeiro vou explicar:

tenho uma tabela no MySQL chamada novidades, ela vai conter todas as novidades do site, eu montei uma pagina do meu site pras pessoas que quiserem acessar as novidades mais antigas, com os filtros da pesquisa pelas novidades passadas por metodo $_GET montei o seguinte código:

<?
include ("config.php");
//---------------- Captura os Filtros para pesquisa
$novidade["id"] = $_GET["novidadeid"];
$novidade["titulo"] = $_GET["novidadetitulo"];
$novidade["data"] = $_GET["novidadedata"];
$novidade["autor"] = $_GET["novidadeautor"];
$novidade["tipo"] = $_GET["novidadetipo"];
$novidade["sqt"] = $_GET["novidadesqt"];
$novidade["spt"] = $_GET["novidadespt"];
//---------------- Mensgens
$nao_encontrado = '<table id="titulo_erro">
  <tr>
    <td><img src="imgs/symbols/symbol_stop.gif" />N&atilde;o Foi Poss&iacute;vel Obter Resultados Com Os Filtros Selecionados <img src="imgs/symbols/symbol_stop.gif" /></td>
  </tr>
</table>';
//--------------- Condições & Funções
mysql_select_db ("disclecow",$lig);

$psq_query = 'SELECT * FROM novidades';
$psq_query1 = ' WHERE id>'.$novidade["spt"].' and ver=1 '; 
$psq_query2 = ' ORDER BY id DESC LIMIT '.$novidade["sqt"];
$condic_query = '';
//----- Verifica Se Get É um Valor Válido em ID
if (($novidade["id"] != "0") or ($novidade["id"] != " ") or ($novidade["id"] != "") or ($novidade["id"] != "null")) {
$condic_query = $condic_query.' and id='.$novidade["id"];
}
//----- Verifica Se Get É um Valor Válido em Titulo
if (($novidade["titulo"] != "") or ($novidade["titulo"] != " ") or ($novidade["titulo"] != "null")) {
$condic_query = $condic_query.' and titulo="'.$novidade["titulo"].'"';
}
//----- Verifica Se Get É um Valor Válido em Data
if (($novidade["data"] != "") or ($novidade["data"] != " ") or ($novidade["data"] != "null")) {
$condic_query = $condic_query.' and data="'.$novidade["data"].'"';
}
//----- Verifica Se Get É um Valor Válido em Autor
if (($novidade["autor"] != "") or ($novidade["autor"] != " ") or ($novidade["autor"] != "null")) {
$condic_query = $condic_query.' and autor="'.$novidade["autor"].'"';
}
//----- Verifica Se Get É um Valor Válido em Tipo
if (($novidade["tipo"] != "") or ($novidade["tipo"] != " ") or ($novidade["tipo"] != "null")) {
$condic_query = $condic_query.' and tipo="'.$novidade["tipo"].'"';
}
//--------------- Obtendo Resultados
$all_query = $psq_query.$psq_query1.$condic_query.$psq_query2;
$query_psq = mysql_query($all_query,$lig);
echo $all_query;
e o código continua mas seria desnescessário eu postar o resto...
Problema quando eu fui dar um echo no $all_query pra ver se ele ia montar um comando certo pro MySQL ele imprimiu isso:
SELECT * FROM novidades WHERE id>1 and ver=1 and id=2 and titulo="null" and data="null" and autor="null" and tipo="null" ORDER BY id DESC LIMIT 1
Eu passei as instruções deste modo:
http://meusite.com/index.php?uid=889&novidadeid=2&novidadetitulo=null&novidadedata=null&novidadeautor=null&novidadetipo=null&novidadesqt=1&novidadespt=1

No Caso o Problem é que ele não está respeitando a condição de que se o parâmetro for =null ele não adiciona a query que será passada para o mysql. Qual é o meu erro?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

No caso você pode simplesmente testar com empty, pois ele verifica se está vazio ou se é nulo...

Isso:

if (($novidade["tipo"] != "") or ($novidade["tipo"] != " ") or ($novidade["tipo"] != "null")) {
$condic_query = $condic_query.' and tipo="'.$novidade["tipo"].'"';
}
Passa para:
if (!empty($novidade["tipo"]) {
$condic_query = $condic_query.' and tipo="'.$novidade["tipo"].'"';
}

Outro detalhe, pegar algo de uma querystring e jogar direto numa query é pedir pra ter problema, dá uma pesquisada sobre sql injection e trate esses dados vindos da querystring, por exemplo, se novidadeid sempre vai ser um número você pode testar com ctype_digit se é um número e se é um número maior do que zero (se for chave primária da tabela sempre vai ter que ser maior do que zero).

Link para o comentário
Compartilhar em outros sites

  • 0

ótimo valeu, agora to com outra dúvida, é sobre um sistema de comentários:

eu to salvando os comentários no mysql como um text e com o separador </ct> e os nicks dos comentários com </nk>, dps eu dou um explode nos dois e obtenho um array, ai eu uso um for pra postar todo esse array no site, mas estou com uma dúvida...

existe algum método de eu por exemplo, apagar um comentário de mau gosto, sem ser via mysql?

já pensei, pensei e pensei mas n consegui achar algo correspondente, alguém pod me da uma base ae?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...