Como ordenar colunas da páginas com cliques
21/06/2016
0
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
Posts
21/06/2016
Wellington Silva
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.
21/06/2016
Jones
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.
21/06/2016
Jones
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.
21/06/2016
Wellington Silva
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.
27/06/2016
Jones
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.
27/06/2016
Jones
<?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.
05/01/2017
Jones
segue o link da pergunta
https://www.devmedia.com.br/forum/como-fazer-consulta-em-varios-campos-combinados/573035
Clique aqui para fazer login e interagir na Comunidade :)