Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 75 postagens
Mais de 75 postagens
Tópico Autor
Mensagens: 75

Ordena dados em um clique

13-06-2010 10:13

Bom dia a todos.

Bom galera meu problema é o seguinte, tenho uma página de consulta aonde são listados os clientes cadastrados em meu BD.

Onde por default eles são ordenados por nome (order by nome), então eu gostaria de fazer que com um clique eu pudesse ordenar por uma outra forma, por exemplo pelo horário.

Até tentei fazer assim, os dados são passados corretamente no firebug, no entanto a tabela não se ordenar da forma que desejo.

Abaixo estão os meu códigos, alguém poderia me dizer aonde que estou errando ?!

Códigos JS
var valor_global = ''; jQuery(document).ready(function(){ jQuery('a[name=order]').click(function(e) { //cancela o comportamento padrão do link e.preventDefault(); valor_global = jQuery(this).attr("rel"); var campo_valor = valor_global; //}); //jQuery('a[name=order]').submit(function(e) { jQuery.ajax({ type:"POST", url:"order-by-dados.php", data:{valor:campo_valor}, success: function(atual){ jQuery('#campo-pesquisa-no-border-for').html(atual); //jQuery(this).html(atual); } }) return false }); });

Códigos PHP
<?php require_once "conexao.php"; $valor = $_POST["valor"]; //$valor = 'nome'; if ($nome != "") { $sql = "SELECT id, nome, cpf, valor, datavenc, pagamento, horario FROM cliente WHERE nome REGEXP '" . $Search . "' AND datavenc >= CURDATE() AND pagamento = 'S' order by '$valor' LIMIT $inicio, $qnt"; } else if ($cpf != "") { $sql = "SELECT id, nome, cpf, valor, datavenc, pagamento, horario FROM cliente WHERE cpf like '%$cpf%' AND datavenc >= CURDATE() AND pagamento = 'S' order by '$valor' LIMIT $inicio, $qnt"; } else { $sql = "SELECT id, nome, cpf, valor, datavenc, pagamento, horario FROM cliente WHERE datavenc >= CURDATE() AND pagamento = 'S' order by '$valor' LIMIT $inicio, $qnt"; } $dados = mysql_query($sql); ?>

DIV para ser atualizada
<div id="campo-pesquisa-no-border-for" class="load-<?php echo $clienteid; ?>"> <div id="campo-pesquisa-dados" style="background:<?php echo $bgcolor; ?>;"><?php echo $nome; ?></div> <div id="campo-pesquisa-cpf" style="background:<?php echo $bgcolor; ?>;"><?php echo mysql_result ($dados, $linha, cpf) ?></div> <div id="campo-pesquisa-sexo" style="background:<?php echo $bgcolor; ?>;"><?php echo mysql_result ($dados, $linha, horario) ?></div> <div id="campo-pesquisa-sexo" style="background:<?php echo $bgcolor; ?>;"><?php echo $valor.".00" ?></div> <div id="campo-pesquisa-data" style="background:<?php echo $bgcolor; ?>;" class="up-<?php echo $clienteid ?>"><?php echo $datavenc ?></div> <div id="campo-pesquisa-cpf" style="background:<?php echo $bgcolor; ?>;"> <form id="pagamento" name="pagamento" method="post" action=""> <label><input name="modal" id="#dialog-pagamento" type="radio" size="<?php echo $_SESSION["id"];?>" rel="<?php echo $clienteid ?>" value="S" <?php if (mysql_result ($dados, $linha, pagamento) == "S") {echo "checked='checked'";}?>> Sim</label> <label><input name="modal" id="#dialog-pagamento" type="radio" size="<?php echo $_SESSION["id"];?>" rel="<?php echo $clienteid ?>" value="N" <?php if (mysql_result ($dados, $linha, pagamento) == "N") {echo "checked='checked'";} ?>> N&atilde;o</label> </form> </div> <div id="campo-pesquisa-operacoes" style="background:<?php echo $bgcolor; ?>;"><a href ="<?php echo "$endereco/alterar-dados-cliente/".$clienteid?>"> Alterar</a> </div> <div id="campo-pesquisa-operacoes" style="background:<?php echo $bgcolor; ?>;"><a rel="<?php echo $clienteid ?>" name="modal" id="#dialog-excluir" href="">Excluir</a> </div> <div id="campo-pesquisa-operacoes" style="background:<?php echo $bgcolor; ?>;"><a href ="<?php echo "$endereco/dados-pessoais-cliente/".$clienteid?>">+Detalhes</a> </div> </div>

Só para deixar mais esclarecido esse DIV que é para ser atualizada fica dentro de um laço de repetição (FOR).

Outro detalhe importante, quando dou um "echo $sql" dentro do arquivo que está em PHP, e clico em "horário" por exemplo, o order by fica como horário, no entanto na página nada acontece.

Uma outra coisa que prestei atenção é quando mando ordenar, o valor para ser ordenado fica entre aspas simples, por exemplo 'horario'. E se eu colocar direto sem aspas simples, ele ordena corretamente, no entanto, tentei retirar a aspas simples de '$valor' e dá erro.

O erro é o seguinte abaixo.
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\VertrigoServ\www\mensalidade\consultar-clientes-adimplentes.php on line 124

Sendo na minha linha 124 do seguinte arquivo no qual ele aponta o ERRO é onde fica o meu laço de repetição (FOR)
for ($linha=0; $linha < mysql_num_rows($dados); $linha++)

Alguém sabe me dizer o que devo fazer para corrigir este ERRO ?!

Desde de já obrigado pela ajuda de todos, té mais.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Ordena dados em um clique

13-06-2010 10:18

Vou te falar uma forma mais fácil

Primeiro você vai pegar o script jQuery para carregar o link no div desejado.

Você vai passar o documento a ser aberto no link para o script jQuery, no estilo

consulta.php?ordena=numero
consulta.php?ordena=data
...

Na página consulta

$ordem = $_GET['ordena'];

Na query

SELECT * FROM suatabela ... ORDER BY $ordem
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 75 postagens
Mais de 75 postagens
Tópico Autor
Mensagens: 75

Ordena dados em um clique

13-06-2010 10:29

Olá web, eu tentei fazer da seguinte forma abaixo no entanto continua dando o mesmo erro caso eu deixe sem aspas simples

Código JS
jQuery.ajax({ type:"GET", //data:{valor:campo_valor}, url:"order-by-dados.php?ordem="+campo_valor, success: function(atual){ jQuery('#campo-pesquisa-no-border-for').html(atual); //jQuery(this).html(atual); }

Código PHP
SELECT id, nome, cpf, valor, datavenc, pagamento, horario FROM cliente WHERE datavenc >= CURDATE() AND pagamento = 'S' order by $ordem LIMIT $inicio, $qnt

E na minha página de consulta ficou assim

$ordem = $_GET["ordem"];


Não sei se era assim que você tinha dito para mim fazer, mais foi assim que entendir. Era realmente assim ?!

Desde de já obrigado pela ajuda, té mais.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Ordena dados em um clique

13-06-2010 10:44

Primeiramente, testa essa consulta simples, depois você adapta seu conteúdo

// consulta $conexao = mysql_connect("localhost", "login", "senha") or die(mysql_error()); $db = mysql_select_db("bd"); // se não passar ordem, ordena pelo id, se passar, ordena pelo valor passado $_GET["ordem"] == "" ? $ordem = "id" : $ordem = $_GET['ordem']; // query $selec = "SELECT * FROM minhatabela ORDER BY $ordem ASC"; $exec = mysql_query($selec, $conexao) or die(mysql_error()); $total = mysql_num_rows($exec); while($campos=mysql_fetch_array($exec)) { extract($campos); echo "$id<br>"; } echo $total;

MOVIDO: de JavaScript para MySQL
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 75 postagens
Mais de 75 postagens
Tópico Autor
Mensagens: 75

Ordena dados em um clique

13-06-2010 11:53

Fazendo da forma que você disse o valor é passado corretamente, no order by.

Agora apresenta um outro problema, em vez da DIV que possui os clientes listados mudar a ORDEM ela sobre-escreve o primeiro registro e não ordena na ordem que eu desejo, fica na ordenação default.

A DIV que possui meus registros chama-se campo-pesquisa-no-border-for, e no arquivo jQuery a deixo da seguinte forma abaixo:
success: function(atual){ jQuery('#campo-pesquisa-no-border-for').html(atual); }

Está correto dessa forma ?! Se não, como que ela deve ficar para mudar a ordem dos dados ?!

Mais uma vez obrigado pela ajuda, té mais.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Ordena dados em um clique

13-06-2010 12:32

Usa do load(), ai você passa a ordem pelo link

http://www.codigosnaweb.com/forum/Carre ... _2791.html
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado