Array
(
)

Como ordenar colunas da páginas com cliques

Jones
   - 21 jun 2016

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.

Wellington Silva
   - 21 jun 2016

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.

Jones
   - 21 jun 2016

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.

Jones
   - 21 jun 2016


Citação:
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.

Wellington Silva
   - 21 jun 2016

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
#Código

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


No seu controller, você irá recuperar utilizando
#Código
$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.

Jones
   - 27 jun 2016


Citação:
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
#Código

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


No seu controller, você irá recuperar utilizando
#Código
$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.

Jones
   - 27 jun 2016

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.