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

Ajuda comando de seleção (Resolvido)


RRH

Pergunta

Tenho as seguintes variáveis passadas pelo link:

$a = $_GET["a"];

$b = $_GET["b"];

$c = $_GET["c"];

$d = $_GET["d"];

E estou tendo problema com o seguinte código:

if ($a == 0) 
$sql="SELECT * FROM tabela WHERE b='$b' AND c='$c' AND d='$d' ";
$query=mysql_query($sql);
$total=mysql_num_rows($query);

if ($b == 0) 
$sql="SELECT * FROM tabela WHERE a='$a' AND c='$c' AND d='$d' ";
$query=mysql_query($sql);
$total=mysql_num_rows($query);

if ($a.$b.$c == 0) 
$sql="SELECT * FROM tabela WHERE d='$d' ";
$query=mysql_query($sql);
$total=mysql_num_rows($query);

Se eu colocar o terceiro if o filtro não funciona, ou se deixar somente o terceiro if ou somente os dois primeiros if funciona parte do filtro! Quem puder ajudar fico grato.

Editado por RRH
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Primeiro, eu acho que dá pra simplificar um pouco isso aí:

switch(0)
{
   case $a : $sql="SELECT * FROM tabela WHERE b='$b' AND c='$c' AND d='$d' "; break;
   case $b : $sql="SELECT * FROM tabela WHERE a='$a' AND c='$c' AND d='$d' "; break;
   case($a.$b.$c) : $sql="SELECT * FROM tabela WHERE d='$d' "; break;
}

$query=mysql_query($sql);
$total=mysql_num_rows($query);
Mas antes de testar isso, continue lendo porque tem uma outra coisa que eu acho que está errada. Você deve notar que no seu código, esses IFs seus estão sem as chaves {}, ou seja, na hora que você faz:
if ($a == 0)
  $sql = ...;
  $query = ...;
  $total = ...; // coloquei "..." só pra exemplo.
SOMENTE a variável $sql receberá o valor e a $query e o $total TERÃO VALORES! Ou seja, digamos que o $a é igual a 0 e que $a.$b.$c também é igual a 0, o filtro que será executado será o último ("SELECT * FROM tabela WHERE d='$d'"), já que você substitui os valores nas variáveis. Mas outra coisa, o que você pretende com esse 3º IF? Esse aqui:
if ($a.$b.$c == 0) 
$sql="SELECT * FROM tabela WHERE d='$d' ";
$query=mysql_query($sql);
$total=mysql_num_rows($query);
???? Você quer saber se TODOS são 0? Eu acho que isso aí não vai dá certo não, porque você está CONCATENANDO as variáveis, portanto o valor de $a.$b.$c é igual a uma STRING (cujo valor seria "000" caso todos fossem 0), e não a um INTEIRO, como você está comparando ali em cima! Se você quer saber se TODOS os valores são 0, faz o seguinte (vou copiar o meu código, mas corrigindo essa parte):
switch(0)
  {
     case $a : $sql="SELECT * FROM tabela WHERE b='$b' AND c='$c' AND d='$d' "; break;
     case $b : $sql="SELECT * FROM tabela WHERE a='$a' AND c='$c' AND d='$d' "; break;
     case($a+$b+$c) : $sql="SELECT * FROM tabela WHERE d='$d' "; break;
  }

  $query=mysql_query($sql);
  $total=mysql_num_rows($query);

Dessa maneira, você estará SOMANDO as variáveis $a, $b e $c. Se a soma delas for 0, portanto, cada uma das variáveis vale 0. Ajudou em algo amigo? Teste e poste os resultados!

Abraços

Editado por Vithor
Link para o comentário
Compartilhar em outros sites

  • 0

Tenho uma página que passa as seguintes variáveis pela url dependendo do link que clicar é lógico:

http://10.169.239.34/select.php?a=ESTADO&a...DADE&c=ZONA (Seleciona todos os cadastros do ESTADO "$x" AND CIDADE "$x" AND ZONA "$x)

http://10.169.239.34/select.php?a=ESTADO&c=ZONA (Seleciona todos os cadastros do ESTADO "$x" AND ZONA "$x)

http://10.169.239.34/select.php?a=ESTADO&b=CIDADE (Seleciona todos os cadastros do ESTADO "$x" AND CIDADE "$x)

http://10.169.239.34/select.php?a=ESTADO (Seleciona todos os cadastros do estado "x")

Por isso no meu entendimento é preciso fazer a verificação de quais variáveis foram passadas para que o sistema realize o filtro. Estou iniciando em php e dei uma olhada nessa função switch mas ainda não obtive sucesso. Com o código switch que você passou ou executa um ou outro. Mas muito obrigado, pois sua dica já me acrescentou mais conhecimento.

EDIT

Consegui aqui:

switch(null)

{

case $a : $sql="SELECT * FROM tabela WHERE b='$b' AND c='$c' AND d='$d' "; break;

case $b : $sql="SELECT * FROM tabela WHERE a='$a' AND c='$c' AND d='$d' "; break;

case($a.$b.$c) : $sql="SELECT * FROM tabela WHERE d='$d' "; break;

}

$query=mysql_query($sql);

$total=mysql_num_rows($query);

Editado por RRH
Link para o comentário
Compartilhar em outros sites

  • 0

se deu certo, então beleza...

O meu código não tinha funcionado, porque eu não sabia que as variáveis NÃO eram passadas, eu assumi que elas ERAM passadas, mas com o valor 0 caso não fosse nada...

se você fizer o switch(null) como você fez, e a variável do $_GET não existir, ele vai dar certo pois ele vai comparar NULL com NULL.

abraços!

EDIT

Cara eu vi que você colocou que está iniciando em PHP né... Seguinte: SWITCH() não é uma função, é uma estrutura de comparação... muito útil pra quando você tem que fazer vários IFs... a estrutura básica é a seguinte:

switch($variavel)
  {
     case $valor1 : $chamaFuncao1(); $soma += 1; $fazMaisCoisas(); break;
     case $valor2 : $chamaFuncao2(); $soma += 2; $fazMaisCoisas(); break;
     [b]default[/b] : $chamaFuncaoPadrao(); $soma += 3; $fazMaisCoisas(); break;
  }

Você pode ver que você faz switch(nome_da_variavel) { case valor_assumido_pela_variavel : acoes; break; } onde acoes podem ser várias coisas, não necessariamente é uma atribuição, ou uma chamada a uma função... é como se fosse um IF só que a "{" corresponde ao ":" do case e o "}" do IF corresponde ao "break;". Você pode ver também que neste último exemplo eu usei uma coisa chamada default. O default acontece caso nenhum dos "case" funcione. Ou seja, caso a $variavel não tenha $valor1, nem $valor2, as operações dentro do default são executadas. É como um último ELSE.

Editado por Vithor
Link para o comentário
Compartilhar em outros sites

  • 0

Realmente eu não falei que em alguns links algumas variáveis não seriam passadas. Inicialmente pensava que se variável não fosse passada seria = 0, mas na verdade é = null. Mas tudo que voce passou aqui acrescentou muito ao meus aprendizado. Mais uma vez muito obrigado.

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...