← PHP

Paginação + filtro por letra

Lida 12428 vezes

Offline

TutoDS 
Membro
Mensagens 12 Gostos 0
Troféus totais: 16
Trófeus: (Ver todos)
Level 4 Level 3 Avatar Third year Anniversary Second year Anniversary One year Anniversary Windows User 10 Posts Combination Level 2

Boas malta.
Estou a desenvolver um projeto em PHP, aprendi PHP sozinho, por isso ainda não sei muita coisa, estou a aprender a pouco e pouco.
Porém estou com um problema em juntar a paginação (que funciona 5*) + o filtro pela primeira letra do nome do utilizador.
Só que não estou a conseguir  :confused:
Alguém me pode ajudar a corrigir isto pf?
Obrigado
Offline

=IceBurn= 
Membro
Mensagens 897 Gostos 3
Feedback +3

Troféus totais: 32
Trófeus: (Ver todos)
Windows User Level 6 Linux User Mobile User Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5

Podes mostrar o que já tens feito? Seria mais fácil assim.
Offline

TutoDS 
Membro
Mensagens 12 Gostos 0
Troféus totais: 16
Trófeus: (Ver todos)
Level 4 Level 3 Avatar Third year Anniversary Second year Anniversary One year Anniversary Windows User 10 Posts Combination Level 2

Podes mostrar o que já tens feito? Seria mais fácil assim.
Tenho a paginação a funcionar e fiz a parte das letras e tentei fazer o código mas não funciona.
Assim que ligar o PC posto o código
Offline

TutoDS 
Membro
Mensagens 12 Gostos 0
Troféus totais: 16
Trófeus: (Ver todos)
Level 4 Level 3 Avatar Third year Anniversary Second year Anniversary One year Anniversary Windows User 10 Posts Combination Level 2

Podes mostrar o que já tens feito? Seria mais fácil assim.
Vai iamgem em anexo, a paginçaõ esta tudo ok falta o resto!
Offline

=IceBurn= 
Membro
Mensagens 897 Gostos 3
Feedback +3

Troféus totais: 32
Trófeus: (Ver todos)
Windows User Level 6 Linux User Mobile User Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5

Ou colocas o código que já tens ou então dificilmente alguém te pode ajudar. Uma imagem não serve de nada.
Offline

TutoDS 
Membro
Mensagens 12 Gostos 0
Troféus totais: 16
Trófeus: (Ver todos)
Level 4 Level 3 Avatar Third year Anniversary Second year Anniversary One year Anniversary Windows User 10 Posts Combination Level 2

Código: [Seleccione]
<?php 
/*=================== Ficheiros ===================*/
    # Conexão BD #
    
include "functions/functions.php";
    
$db conBD();

    
# Session #
    
include "actions/session.php";

    
# Head #
    
include "files/head_footer.php";


    if (
$login_type === "2") {
        
        
$char ''

        
/****** Paginação ******/
        
$perPage 1;

        
$queryCount "SELECT id_user FROM utilizador";

        if (isset(
$_GET['char'])) {
            
$queryCount .= " WHERE nome LIKE '$char%'";
        }

        
$results $db->query($queryCount);

        
$totalResults $results->rowCount();

        
$nPages ceil($totalResults/$perPage);

        if (!isset(
$_GET['page'])) {
            
$page 1;
            
        } else {
           
$page $_GET['page'];
        }

        
$firstResult = ($page-1)*$perPage;
        
        
/****** ******/

        
$query "SELECT * FROM utilizador JOIN user_type ON user_type.id_user_type = utilizador.user_type JOIN user_status ON user_status.id_user_status = utilizador.user_status";


        if (isset(
$_GET['char'])) {
            
$char $_GET['char'];

            
$char preg_replace("#[a-z]#i",'',$char);

            
$query .= " WHERE utilizador.nome LIKE '$char%'";
        }

        
$query .= " LIMIT $firstResult,$perPage";

        
        
$sql $db->query($query);

        
$nResult $sql->rowCount();

        
gerarHeadAdmin("Utilizadores","utilizadores");
?>

Onde crio a barra com todas as letras:
Código: [Seleccione]
<?php
                        $character 
range('A''Z');  
                        echo 
'<ul class="pagination justify-content-center" aria-label="Page navigation example">';  
                        
$class = (!isset($_GET['char'])) ? ' class="active page-item" ' 'class="page-item"' ;
                        echo 
'<li '.$class.'><a class="page-link" href="utilizadores">Todos</a></li>';  
            
                        foreach(
$character as $alphabet)  
                        {  
                            
$class = ($_GET['char'] == strtolower($alphabet)) ? ' class="active page-item" ' 'class="page-item"' ;

                            echo 
'<li '.$class.'><a class="page-link" href="utilizadores/1/'.strtolower($alphabet).'">'.$alphabet.'</a></li>';  
                        }  
                        echo 
'</ul>';
                    
?>
Offline

=IceBurn= 
Membro
Mensagens 897 Gostos 3
Feedback +3

Troféus totais: 32
Trófeus: (Ver todos)
Windows User Level 6 Linux User Mobile User Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5

Experimenta assim...

<?php
/*=================== Ficheiros ===================*/
# Conexão BD #
include "functions/functions.php";
$db conBD();

# Session #
include "actions/session.php";

# Head #
include "files/head_footer.php";


if (
$login_type === "2") {

    
$char = isset($_GET['char']) ? preg_replace('#[a-z]#i'''$_GET['char']) : 0;

    
/****** Paginação ******/
    
$perPage 1;

    
$queryCount "SELECT id_user FROM utilizador";

    if (!empty(
$char)) {

        
$queryCount .= " WHERE nome LIKE '$char%'";
    }

    
$results $db->query($queryCount);

    
$totalResults $results->rowCount();

    
$nPages ceil($totalResults $perPage);

    if (!isset(
$_GET['page'])) {
        
        
$page 1;

    } else {
        
        
$page = (int)$_GET['page'];
        
    }

    
$firstResult = ($page 1) * $perPage;

    
/****** ******/

    
$query "SELECT * FROM utilizador JOIN user_type ON user_type.id_user_type = utilizador.user_type JOIN user_status ON user_status.id_user_status = utilizador.user_status";


    if (!empty(
$char)) {

        
$query .= " WHERE utilizador.nome LIKE '$char%'";
    }

    
$query .= " LIMIT $firstResult,$perPage";


    
$sql $db->query($query);

    
$nResult $sql->rowCount();

    
gerarHeadAdmin("Utilizadores""utilizadores");

}
?>
Offline

TutoDS 
Membro
Mensagens 12 Gostos 0
Troféus totais: 16
Trófeus: (Ver todos)
Level 4 Level 3 Avatar Third year Anniversary Second year Anniversary One year Anniversary Windows User 10 Posts Combination Level 2

Obrigado, vou experimentar.
As letras ficam iguais certo?
No HTACCESS faço o page no $1 e a letra no $2 para ficar utilizador/page/letra certo?
Offline

TutoDS 
Membro
Mensagens 12 Gostos 0
Troféus totais: 16
Trófeus: (Ver todos)
Level 4 Level 3 Avatar Third year Anniversary Second year Anniversary One year Anniversary Windows User 10 Posts Combination Level 2

Experimenta assim...

<?php
/*=================== Ficheiros ===================*/
# Conexão BD #
include "functions/functions.php";
$db conBD();

# Session #
include "actions/session.php";

# Head #
include "files/head_footer.php";


if (
$login_type === "2") {

    
$char = isset($_GET['char']) ? preg_replace('#[a-z]#i'''$_GET['char']) : 0;

    
/****** Paginação ******/
    
$perPage 1;

    
$queryCount "SELECT id_user FROM utilizador";

    if (!empty(
$char)) {

        
$queryCount .= " WHERE nome LIKE '$char%'";
    }

    
$results $db->query($queryCount);

    
$totalResults $results->rowCount();

    
$nPages ceil($totalResults $perPage);

    if (!isset(
$_GET['page'])) {
        
        
$page 1;

    } else {
        
        
$page = (int)$_GET['page'];
        
    }

    
$firstResult = ($page 1) * $perPage;

    
/****** ******/

    
$query "SELECT * FROM utilizador JOIN user_type ON user_type.id_user_type = utilizador.user_type JOIN user_status ON user_status.id_user_status = utilizador.user_status";


    if (!empty(
$char)) {

        
$query .= " WHERE utilizador.nome LIKE '$char%'";
    }

    
$query .= " LIMIT $firstResult,$perPage";


    
$sql $db->query($query);

    
$nResult $sql->rowCount();

    
gerarHeadAdmin("Utilizadores""utilizadores");

}
?>


Já testei, mas não funciona.
A página nem o header carrega.  :-(
Offline

=IceBurn= 
Membro
Mensagens 897 Gostos 3
Feedback +3

Troféus totais: 32
Trófeus: (Ver todos)
Windows User Level 6 Linux User Mobile User Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5

E qual é o erro que te dá?

No inivio do código coloca

Código: [Seleccione]
error_reporting(E_ALL);

Quanto ao .htaccess depende de como tens a query string definida.
Offline

TutoDS 
Membro
Mensagens 12 Gostos 0
Troféus totais: 16
Trófeus: (Ver todos)
Level 4 Level 3 Avatar Third year Anniversary Second year Anniversary One year Anniversary Windows User 10 Posts Combination Level 2

E qual é o erro que te dá?

No inivio do código coloca

Código: [Seleccione]
error_reporting(E_ALL);

Quanto ao .htaccess depende de como tens a query string definida.
Fiz isso e não aparece nada, fica a página em branco
Offline

TutoDS 
Membro
Mensagens 12 Gostos 0
Troféus totais: 16
Trófeus: (Ver todos)
Level 4 Level 3 Avatar Third year Anniversary Second year Anniversary One year Anniversary Windows User 10 Posts Combination Level 2

voltei a colocar o código antigo e já funciona  :-(
Não sei o que se passa
Offline

TutoDS 
Membro
Mensagens 12 Gostos 0
Troféus totais: 16
Trófeus: (Ver todos)
Level 4 Level 3 Avatar Third year Anniversary Second year Anniversary One year Anniversary Windows User 10 Posts Combination Level 2

E qual é o erro que te dá?

No inivio do código coloca

Código: [Seleccione]
error_reporting(E_ALL);

Quanto ao .htaccess depende de como tens a query string definida.
Alguma ideia?