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

Order By


BrenoLourenço

Pergunta

Salve!

Eu ia aproveitar o outro topic, mas mudou o assunto.

Estou fazendo uma consulta no Banco de Dados e realizando a Paginação, mas até aí tudo certinho! Porém estou tendo problemas, um já foi solucionado que era a soma dos contadores das páginas, mas agora é o seguinte, eu montei uma html para o usuário poder escolher qual o tipo de ordenação que ele quer. Só que quando eu monto o comando SELECT, não estou conseguindo fazer com que o comando receba a opção que o usuário escolheu. Melhor dizendo, ele até funciona da primeira vez, mas quando clico em 'próxima página' dá erro.

O comando está assim:

$opcao = $_POST["opc"];
...
$query = "SELECT * FROM tabela ORDER BY $opcao ASC LIMIT $begin,15";
$resultado = mysql_query($query);

while ($linha = mysql_fetch_array($resultado)) {
// minha saída de dados
}
Como eu disse, na primeira página (de 1 a 15 registros) está tudo perfeito, mas quando click em 'próximo' ele parece que não lê a variável $opcao, gerando este erro:
Exibindo registro 16 a 30 no total de 48 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\htdocs\cef\htmls\consulta.php on line 54
Sendo que a linha 54 é o comando while postado logo acima. Tem alguma outra maneira de fazer isso? Eu pensei em passar o valor de $opcao ao clicar em 'próximo', mas nele já passo um valor, veja como está:
'<a href="consulta.php?begin=' . ($begin+15) . '"><b>Próximas</b></a>';

Tem como passar outro valor ou alguma outra maneira...?

Desde já obrigado pela atenção!

Abraço!

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Use o método $_GET para pegar a ordem.

Quando você montar o link para outros registros você põe esta variável (ordem) la também, junto com o número da página...

$opcao=$_GET['opcao'];

'<a href="consulta.php?opcao='. $opcao .'&begin=' . ($begin+15) . '"><b>Próximas</b></a>';

Espero ter ajudado!

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu Newton pela atenção, mas continua dando o mesmo erro.

E ainda pior, nem a primeira página ele exibe.

Exibindo registro 1 a 15 no total de 48 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\htdocs\cef\htmls\consulta.php on line 54

Quem souber como me ajudar, grato por isso.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

tenta assim....


CODE  

$opcao = $_POST["opc"];
...
$query = "SELECT * FROM tabela ORDER BY $opcao ASC LIMIT $begin,15";
$resultado = mysql_query($query);

while (($linha = mysql_fetch_array($resultado))!=null) {
// minha saída de dados
}



Link para o comentário
Compartilhar em outros sites

  • 0

amigo...

tem muita informação nesse meio... faz assim posta seu fonte ae, se você puder! assim fica mais facil de ajudar...

fallou... cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Antes disso só tem uma página html onde não está dando erro, o $_POST está recebendo o valor corretamente.

Peguei esse código daqui mesmo, a algum tempo atrás... mas só agora estou tentendo implementá-lo.

Aí vai o código:

<html>
<head><title> Pagina </title>
</head>
<link rel="stylesheet" href="../recursos/estilo.css" type="text/css">
<body bgcolor="#FFFFFF" background="fundo.jpg">

<?php
include ("../includes/conexao.php");
$opcao = $_POST["opc"];

$begin = @$_GET['begin'];

if (!$begin)
{ $begin = 0; }

$query = "SELECT * FROM tabela";
$resultado = mysql_query($query);
$total = mysql_num_rows($resultado);

$a=$begin + 1;
$b=$begin + 15;
if ($b < $total)
{
  echo "Exibindo registro <b> $a </b> a <b> $b </b> no total de <b> $total  </b>";
}
else
{
  echo "Exibindo registro <b> $a </b> a <b> $total </b> no total de <b> $total  </b>";
}

$query = "SELECT * FROM tabela ORDER BY $opcao ASC LIMIT $begin,15";
$resultado = mysql_query($query);

while (($linha = mysql_fetch_array($resultado))!=null) {
//while ($linha = mysql_fetch_array($resultado)) {

//minha saída

}
if ($total != "0") {
    if (($begin > 0) and ($begin <= 15)) {
        $anteriores = '<a href="consulta.php?begin=0"><b>Anteriores</b></a>';
    } elseif (($begin > 0) and ($begin > 15)) {
        $anteriores = '<a href="consulta.php?begin=' . ($begin-15) . '"><b>Anteriores</b></a>';
    } else {
        $anteriores = '<b>Anteriores</b>';
    }
    if (($begin < $total) and (($begin+15) >= $total)) {
        $proximas = '<b>Próximas</b>';
    } else {
        $proximas = '<a href="consulta.php?begin=' . ($begin+15) . '"><b>Próximas</b></a>';
    }

echo $anteriores . " | " . $proximas;
}

?>
</body>
</html>

blink.gif

Se eu colocar no "SELECT ..... ORDER BY Nome ASC...." funciona corretamente, mas eu queria essa opção do usuário escolher.

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

Pô, ninguém conseguiu solucionar meu problema...

Será que ninguém sabe ou não dá mesmo?

Se não dá pra fazer, pelo menos alguém me diga que isto não é possível, porque uma vez vi uma mensagem que dizia o seguinte: "TUDO É POSSÍVEL, BASTA SABER FAZER"

E eu não estou sabendo fazer...

sad.gif

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

Claro!

Coloquei um echo antes e depois, veja o resultado:

echo "<br>$query<br>";
$query = "SELECT * FROM tabela ORDER BY $opcao ASC LIMIT $begin,15";
$resultado = mysql_query($query);
echo "<br>$query<br>";
while ($linha = mysql_fetch_array($resultado)) {
Assim que entrei na página, tudo certo, funcionando. Mas quando clico em 'próxima', ele dá o erro, mas agora mostra valor da query, veja:
Exibindo registro 16 a 30 no total de 48 
SELECT * FROM tabela

SELECT * FROM tabela ORDER BY ASC LIMIT 15,15

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\htdocs\cef\htmls\consulta.php on line 55

Ou seja, ele não está pegando o valor $opcao quando vou para próxima página, está passando vazio.

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

Segue o script com algumas modificações, o problema é que não existe a variavel "$opcao" para a segunda página. wink.gif

<html>

<head><title> Pagina </title>

</head>

<link rel="stylesheet" href="../recursos/estilo.css" type="text/css">

<body bgcolor="#FFFFFF" background="fundo.jpg">

<?php

include ("../includes/conexao.php");

if($_POST['opc']) $opcao = $_POST["opc"]; else $opcao = $_GET["opcao"];

$begin = @$_GET['begin'];

if (!$begin)

{ $begin = 0; }

$query = "SELECT * FROM tabela";

$resultado = mysql_query($query);

$total = mysql_num_rows($resultado);

$a=$begin + 1;

$b=$begin + 15;

if ($b < $total)

{

echo "Exibindo registro <b> $a </b> a <b> $b </b> no total de <b> $total  </b>";

}

else

{

echo "Exibindo registro <b> $a </b> a <b> $total </b> no total de <b> $total  </b>";

}

$query = "SELECT * FROM tabela ORDER BY $opcao ASC LIMIT $begin,15";

$resultado = mysql_query($query);

while (($linha = mysql_fetch_array($resultado))!=null) {

//while ($linha = mysql_fetch_array($resultado)) {

//minha saída

}

if ($total != "0") {

  if (($begin > 0) and ($begin <= 15)) {

      $anteriores = '<a href="consulta.php?begin=0"><b>Anteriores</b></a>';

  } elseif (($begin > 0) and ($begin > 15)) {

      $anteriores = '<a href="consulta.php?begin=' . ($begin-15) . '&opcao='.$opcao.'"><b>Anteriores</b></a>';

  } else {

      $anteriores = '<b>Anteriores</b>';

  }

  if (($begin < $total) and (($begin+15) >= $total)) {

      $proximas = '<b>Próximas</b>';

  } else {

      $proximas = '<a href="consulta.php?begin=' . ($begin+15) . '&opcao='.$opcao.'"><b>Próximas</b></a>';

  }

echo $anteriores . " | " . $proximas;

}

?>

</body>

</html>

Link para o comentário
Compartilhar em outros sites

  • 0

Pô Gladisson, valeu muito aí pela ajuda cara!

Funcionou que uma beleza!

Eu suspeitava que esse era o problema, tanto é que em um dos meus posts eu falei isso, o problema era que eu não sabia passar o valor de $opcao para a segunda etapa.

Mas valeu mesmo amigo! Pane resolvida!

Abração!

biggrin.gif

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,3k
    • Posts
      652,2k
×
×
  • Criar Novo...