Como ordenar colunas da páginas com cliques

21/06/2016

0

Preciso de uma grande ajuda com php. Sou novo em programação orientado a objetos, com ajuda de algumas pessoas tenho conseguido fazer um site onde trabalho de patrimônio, e tentado seguir umas regras de programação sempre que posso.

Tenho visto alguns exemplos de como ordenar colunas, mas não consigo colocar no meu, pois tenho procurado seguir conselhos de algumas pessoas na área de PHP e deixado meu site legalzinho, mas não vejo como colocar certo código dentro do meu, que são por meio de referência e parâmetros, mas certas coisas ainda tenho dificuldade ai da que parecer ser pouco, segue abaixo um pouco do meu código.

em views onde lista esta o seguinte list.php

<?php
// verificar se houve algum erro:
if ($sqli->error) {
// exibe o erro na tela:
die('<p class="error">Falha ao executar query: ' . $sqli->error . '</p>');
// fazer o procedimento de exibição apenas se houver resultado da busca acima
} elseif ($result->num_rows) {
// pegar todos os resultados em formato de array associativo
$dados = $result->fetch_all(MYSQLI_ASSOC);
// linha de cabeçalho da tabela
$linha = '<tr><th>' . implode('</th><th>', array_keys($dados[0])) . '</th><th>Opções</th></tr>';
// percorrer os dados
foreach ($dados as $k => $v) {
// acrescenta outra linha
$v['nome'] = nl2br($v['nome']);
$linha.='<tr><td>' . implode('</td><td>', $v) . '</td><td><input type="checkbox" title="Marque para excluir: ' . $v['nome'] . '" value=' . $v['id'] . ' name="sel[]">
<a href="?usuario/add/' . $v['id'] . '" title="Editar ' . $v['nome'] . '" class="edit"></a>
<a href="?usuario/list/'.$v['id'].'" title="Remover: '. $v['nome'].'" class="del"></a></td></tr>';
}
// mostra a linha na tela:
echo '<form method="post"><table class="tablesorter "><thead>'.$linha.'</thead><tr><td colspan="5"></td><td>';
?>
<input type="submit" value="Excluir marcados"
onClick="return confirm('Tem certeza de que deseja excluir os itens selecionados.\nATENÇÃO: os itens excluídos sãoo também desvinculados do banco de dados para as quais estão gravados.')">
</td></tr></table></form>
<?php

} else {
echo '<p class="warning">Nenhum registro encontrado!</p><a href="sql/install.php">Restaurar Database</a>';
}
?>


em controllers list.php

<?php
//apagar um
if(isset($PARAMS[0])){
$id = intval($PARAMS[0]);
$result = $sqli->query('DELETE FROM usuarios WHERE id='.$id);
if ($sqli->error) {
// exibe o erro na tela:
$msg[]='<p class="error">Falha ao deletar cadastro: ' . $sqli->error . '</p>';
} else {
$msg[]='<p class="ok">Remoção efetuada com sucesso!</p>';
}
}

// apagar vários
if (isset($_POST['sel'])) {
$result = $sqli->query('DELETE FROM usuarios WHERE id in(' . implode(', ', $_POST['sel']) . ')');
// verificar se houve algum erro:
if ($sqli->error) {
// exibe o erro na tela:
$msg[]='<p class="error">Falha ao deletar cadastro: ' . $sqli->error . '</p>';
}
}

$result = $sqli->query('SELECT id, nome, email, senha, situacoe_id,niveis_acesso_id,created, modified FROM usuarios order by id');
connect.php

<?php

// arquivo para conexão com o mysql
// definição de variáveis para conexão
$host = 'localhost'; // endereço do banco
$user = 'root'; // usuário
$pass = ''; // senha
$database = 'cad_user'; // nome do banco de dados

// se estiver em was
if (preg_match('/^(was)/', $_SERVER['SERVER_NAME'])) {
$pass = '';
}

// estabelecer conexão:
$sqli = new mysqli($host, $user, $pass);

// verificando se conectou de boas:
if ($sqli->connect_error) {
// se houver alguma falha, exibe mensagem:
echo '<p class="error">Falha na conexão: ' . $sqli->connect_error . '</p>';
}

// definir o padrão de caracteres
if (!$sqli->set_charset('utf8')) {
// se não conseguir definir o padrão de caracteres, exibe o padrão disponível
echo "<p class='error'>Seu charset não é utf8!<br>$sqli->character_set_name()</p>";
}

// selecionar/abrir o banco de dados para trabalhar
if (!$sqli->select_db($database)) {
// se o banco de dados não for encontrado
if (!preg_match('/install.php/', $_SERVER['PHP_SELF'])) {
// ir para o arquivo de instalação do baco de dados, se já não estiver nele:
header('Location: sql/install.php');
}
echo "<p class='error'>Banco de dados não encontrado!</p>";
}
Tentei algumas forma de como ordenar como sugere o artigo Tablesorter: Plugin jQuery para ordenar tabelas, mas não sei como ele não ordena, o código que coloquei esta sem as modificações que fiz.

Espero que me ajudem, pois ate agora ninguém me deu uma luz sobre isso.
Jones

Jones

Responder

Posts

21/06/2016

Wellington Silva

Caso queira resolver isso com html e javascript pesquise por datatables.

Se quer resolver com PHP, você precisa informar na URL por qual campo quer ordenar, por exemplo: index.php?list=product&orderby=id.
Já no controller você irá capturar esse parametro "orderby" e tratar ele, e simplesmente coloca-lo na select.

Irá ocorrer um refresh na página e exibir os dados ordenado pelo campo informado.
Responder

21/06/2016

Jones

Não sei se entendi, então peço desculpas por isso, se for para ordernar por um campo eu sei, posso fazer naquele select em que o $result recebe, mas não sei sei fazer para ordenar com um clique em qualquer camp, pois vi exemplos usando html, mas não consegui fazer para o meu codigo, pois se cheguei ate aqui foi pela ajuda algumas pessoas tendo bastante paciencia (rsrs) pois em POO estou começando agora e principalmente PHP, onde estou aprendo por tutoriais e fóruns.

peço se poder ser mais claro para eu poder enter melhor aonde modificar e como começar. por favor poste um exemplo com o codigo que eu dexei.
Responder

21/06/2016

Jones

Caso queira resolver isso com html e javascript pesquise por datatables.

Se quer resolver com PHP, você precisa informar na URL por qual campo quer ordenar, por exemplo: index.php?list=product&orderby=id.
Já no controller você irá capturar esse parametro "orderby" e tratar ele, e simplesmente coloca-lo na select.

Irá ocorrer um refresh na página e exibir os dados ordenado pelo campo informado.



Não sei se entendi, então peço desculpas por isso, se for para ordernar por um campo eu sei, posso fazer naquele select em que o $result recebe, mas não sei sei fazer para ordenar com um clique em qualquer camp, pois vi exemplos usando html, mas não consegui fazer para o meu codigo, pois se cheguei ate aqui foi pela ajuda algumas pessoas tendo bastante paciencia (rsrs) pois em POO estou começando agora e principalmente PHP, onde estou aprendo por tutoriais e fóruns.

peço se poder ser mais claro para eu poder enter melhor aonde modificar e como começar. por favor poste um exemplo com o codigo que eu dexei.
Responder

21/06/2016

Wellington Silva

Então meu amigo, está impossível de entender seu código.

Primeiro porque não está dentro da tag "code" deixando ainda mais ilegível o código.
Segundo porque está faltando código ai, como você mesmo diz não ter muito conhecimento na linguagem fica difícil postar algum exemplo se o código não esta completo.

Caso você esteja chegando no list.php (controller), você precisa criar um link <a> na coluna que deseja order e adicionar
<a href='list.php?orderby=id'>ID</a>
<a href='list.php?orderby=name'>Nome</a>


No seu controller, você irá recuperar utilizando
$orderby = '';
if (isset($_GET['orderby']) && $_GET['orderby'] == 'id')
    $orderby = $_GET['id'];

$query = "SELECT * FROM customers ORDER BY $orderby";


Esse é um exemplo para se adaptar no seu código.
Responder

27/06/2016

Jones

Então meu amigo, está impossível de entender seu código.

Primeiro porque não está dentro da tag "code" deixando ainda mais ilegível o código.
Segundo porque está faltando código ai, como você mesmo diz não ter muito conhecimento na linguagem fica difícil postar algum exemplo se o código não esta completo.

Caso você esteja chegando no list.php (controller), você precisa criar um link <a> na coluna que deseja order e adicionar
<a href='list.php?orderby=id'>ID</a>
<a href='list.php?orderby=name'>Nome</a>


No seu controller, você irá recuperar utilizando
$orderby = '';
if (isset($_GET['orderby']) && $_GET['orderby'] == 'id')
    $orderby = $_GET['id'];

$query = "SELECT * FROM customers ORDER BY $orderby";


Esse é um exemplo para se adaptar no seu código.




bom dia, tentei fazer mas não deu certo, tentei criar um link no list.php em controllers, mas acho que erre onde colocar coloquei em cima, apareceu em cima do meu menu, e não buscava nada e devo substituir (isset($PARAMS[0])){
$id = intval($PARAMS[0]) isso por isso o codigo que vc me mostrou ?


que mais eu deveria postar para você usar o meu codigo e testar ?

preciso muito dessa ajuda, desde já agradeço.
Responder

27/06/2016

Jones

Bom dia eu fiz assim

<?php
//apagar um
$orderby = '';
if(isset($_POST['orderby']) && $_POST['orderby'] == 'id'){
$orderby = $_GET['id'];

$id = intval($PARAMS[0]);
$result = $sqli->query('DELETE FROM usuarios WHERE id='.$id);
if ($sqli->error) {
// exibe o erro na tela:
$msg[]='<p class="error">Falha ao deletar cadastro: ' . $sqli->error . '</p>';
} else {
$msg[]='<p class="ok">Remoção efetuada com sucesso!</p>';
}
}

// apagar vários
if (isset($_POST['sel'])) {
$result = $sqli->query('DELETE FROM usuarios WHERE id in(' . implode(', ', $_POST['sel']) . ')');
// verificar se houve algum erro:
if ($sqli->error) {
// exibe o erro na tela:
$msg[]='<p class="error">Falha ao deletar cadastro: ' . $sqli->error . '</p>';
}
}

$result = $sqli->query('SELECT * FROM usuarios order by $orderby');

?>

<a href='list.php?orderby=id'>ID</a>
<a href='list.php?orderby=nome'>Nome</a>

até aparece o id e nome mais ao clicar da erro, e o id e nome ficam em cima do menu.
Responder

05/01/2017

Jones

Bom dia obrigado pela ajuda, sua dica me ajudou bastante, embora deixei essa parte de lado para me focar em outra parte do codigo, em que me pediram para fazer busca de campos combinados mas fiquei perdido, postei minha dúvida aqui mas ninguem me ajudou ate agora

segue o link da pergunta

https://www.devmedia.com.br/forum/como-fazer-consulta-em-varios-campos-combinados/573035
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar