Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wagner M.M

[Resolvido] Paginação PHP

Recommended Posts

Olá pessoal

 

Tenho um código em PHP que faz uma paginação no resultado do MYSQL, mais o código tem problema que quando passa para outra página, repeti os registros da página anterior tirando uma.

 

Tipo assim:

 

1ª Página

José

Silva

Rodrigues

 

2ª Página

Silva

Rodrigues

Farias

 

Teria como deixar na segunda página apenas os registros referentes a página atual?

 

Segue meu Código

 

<?php
// definir o numero de itens por pagina
$itens_por_pagina = 5;

// pegar a pagina atual
$pagina = intval($_GET['pagina']);

echo $pagina;

// puxar produtos do banco
$sql_code = "select distinct tipo_evento_usuario, nome_evento, data, hora, 	auxiliar_evento_usuario from festa_usuario LIMIT $pagina, $itens_por_pagina";
$execute = $mysqli->query($sql_code) or die($mysqli->error);
$produto = $execute->fetch_assoc();
$num = $execute->num_rows;

// pega a quantidade total de objetos no banco de dados
$num_total = $mysqli->query("select distinct  auxiliar_evento_usuario from festa_usuario")->num_rows;

// definir numero de páginas
$num_paginas = ceil($num_total/$itens_por_pagina);

				
				
				
				
 if($num > 0){ ?>


<?php echo $produto['nome']?>


<?php do{ ?>
<?php } while($produto = $execute->fetch_assoc()); ?>

				<nav>
				  <ul class="pagination">
				    <li>
				      <a href="festas-cadastradas.php?pagina=0" aria-label="Previous">
				        <span aria-hidden="true">&laquo;</span>
				      </a>
				    </li>
				    <?php 
				    for($i=0;$i<$num_paginas;$i++){
				    $estilo = "";
				    if($pagina == $i)
				    	$estilo = "class=\"active\"";
				    ?>
				    <li <?php echo $estilo; ?> ><a href="festas-cadastradas.php?pagina=<?php echo $i; ?>"><?php echo $i+1; ?></a></li>
					<?php } ?>
				    <li>
				      <a href="festas-cadastradas.php?pagina=<?php echo $num_paginas-1; ?>" aria-label="Next">
				        <span aria-hidden="true">&raquo;</span>
				      </a>
				    </li>
				  </ul>
				</nav>
  				<?php } ?>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A lógica da sua paginação está errada:

LIMIT $pagina, $itens_por_pagina

Após o limit o primeiro item marca onde a paginação vai começar, o segundo a quantidade de registros por página, por isso você tem que calcular de forma exata o valor do primeiro item.

 

De forma básica você deve pegar a página atual, diminuir 1 e então multiplicar pelo número de registros por página, assim:

Página 1 (5 registros por página)

(1-1)*5 => 0 (iniciará no registro "0", ou seja no primeiro;

Página 2 (5 registros por página)

(2-1)*5 => 5 

Página 3

(3-1)*5 => 10

 

Essa é a lógica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou fazendo o que você falou,  diminui 1 e então multipliquei pelo número de registros por página,

 

$pagina = (intval($_GET['pagina'])-1)*5;

Mais na primeira  página fica com valor -5 a variavel $pagina, retornando esse erro

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é esse:

intval($_GET['pagina'])

 

Se o $_GET não for um inteiro ou não estiver setado ele retornará como 0, 

 

Logo:

(0-1)*5 = -5.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na primeira página o  intval($_GET['pagina']) é setado como zero pois ele não pega o valor de nenhum lugar ficando com valor '0', isso eu entendi.

Como fazer para que fica setado como valor '1' do intval($_GET['pagina'])  na primeira página?

Compartilhar este post


Link para o post
Compartilhar em outros sites
$pagina = (intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha como eu fiz ESerra,

 

$pagina_1 = (intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']);
$pagina_2 =($pagina_1-1)*5;
// puxar produtos do banco
$sql_code = "select distinct tipo_evento_usuario, nome_evento, data, hora, auxiliar_evento_usuario from festa_usuario LIMIT $pagina_2, $itens_por_pagina";

Na primeira página funcionou mais na segunda ja não funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quantos registros tem o BD? Quantos registros por página? $pagina_2 está retornando o valor correto?

 

Uma dia, evite dizer que "deu erro", isso não define nada, você tem que especificar:

Na segunda página não apareceu nada;

Na segunda página apareceu um erro na query;

Etc.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quantos registros tem o BD?

6

Quantos registros por página?
5

 

$pagina_2 está retornando o valor correto?

está retornando 0 (zero)

 

Na segunda página como $pagina_2 é 0 (zero), fica como na primeira página,  minha dúvida é fazer a lógica que você falou

Sendo que com iso 

 

$pagina_1 = (intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']);
$pagina_2 =($pagina_1-1)*5;

 

$pagina_2 vai ser sempre igual a zero e precisa ser apenas na primeira página

 

Página 1 (5 registros por página)

(1-1)*5 => 0 (iniciará no registro "0", ou seja no primeiro;

Página 2 (5 registros por página)

(2-1)*5 => 5 

Página 3

(3-1)*5 => 10

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz assim

 

// pegar a pagina atual
$pagina_1 = (intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']);
$pagina_2 =((intval($_GET['pagina']+$pagina_1))-1)*5;

Deu certo, mostrou na segunda página apenas o registro referente, porém ali na numeração das páginas não fica selecionado o numero '2' quando vai pra segunda página, essa é a parte do código, pode me dizer porque ocorre isso?

 

                

<nav style="text-align:center; font-size:26px;">
                  <ul class="pagination">
                    <li>
                      <a href="festas-cadastradas.php?pagina=0" aria-label="Previous">
                        <span aria-hidden="true">«</span>
                      </a>
                    </li>
                    <?php 
                    for($i=0;$i<$num_paginas;$i++){
                    $estilo = "";
                    if($pagina == $i)
                        $estilo = "class=\"active\"";
                    ?>
                    <li <?php echo $estilo; ?> ><a href="festas-cadastradas.php?pagina=<?php echo $i; ?>"><?php echo $i+1; ?></a></li>
                    <?php } ?>
                    <li>
                      <a href="festas-cadastradas.php?pagina=<?php echo $num_paginas; ?>" aria-label="Next">
                        <span aria-hidden="true">»</span>
                      </a>
                    </li>
                  </ul>
                </nav>


 

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou fazendo assim, e está quase, mais só que agora a paginação começa de trás para frente

 

tipo

 

Primeira Página 

Farias

 

Segunda Página

José

Silva

Rodrigues

 

$pagina_1 = ((intval($_GET['pagina']) == 0)?1:intval($_GET['pagina'])-1)*5;

teria alguma sugestão?
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui fazendo assim 


 

$itens_por_pagina = 5;
// pegar a pagina atual
if ((intval($_GET['pagina'])<=0)){
$pagina_1 =0;
}
if ((intval($_GET['pagina'])>=1)){
echo" um";
$pagina_1 = ((intval($_GET['pagina']) == 1)?1:intval($_GET['pagina'])-1)*5;
}
// puxar produtos do banco
$sql_code = "select distinct tipo_evento_usuario, nome_evento, data, hora,     auxiliar_evento_usuario from festa_usuario LIMIT $pagina_1, $itens_por_pagina";

Só que não fica selecionado o numero da página quando troca de página


                        

<?php } while($produto = $execute->fetch_assoc()); ?>
                <nav style="text-align:center; font-size:26px;">
                  <ul class="pagination">
                    <li>
                      <a href="festas-cadastradas.php?pagina=0" aria-label="Previous">
                        <span aria-hidden="true">«</span>
                      </a>
                    </li>
                    <?php 
                    for($i=0;$i<$num_paginas;$i++){
                    $estilo = "";
                    if($pagina == $i)
                    
                        $estilo = "class=\"active\"";
                    ?>
                    <li <?php echo $estilo; ?> ><a href="festas-cadastradas.php?pagina=<?php echo $i+1; ?>"><?php echo $i+1; ?></a></li>
                    <?php } ?>
                    <li>
                      <a href="festas-cadastradas.php?pagina=<?php echo $num_paginas; ?>" aria-label="Next">
                        <span aria-hidden="true">»</span>
                      </a>
                    </li>
                  </ul>
                </nav>
                  <?php } ?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi ESerra não precisava ter me dado uma advertência só queria solucionar a paginação, acho que esse é propósito do Fórum, mais tudo bem...

Segue o código funcionando para quem precisar, já foi testado

 

 

<?php
   // definir o numero de itens por pagina
   $itens_por_pagina = 5;
   
   if(intval($_GET['pagina'])<=0){
   echo intval($_GET['pagina']);
   $pagina =0;
   }
   if(intval($_GET['pagina'])>=1){
   echo intval($_GET['pagina']);// pegar a pagina atual
   $pagina = ((intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']))*5;
   }
   
   // puxar produtos do banco
   $sql_code = "select distinct tipo_evento_usuario, nome_evento, data, hora, 	auxiliar_evento_usuario from festa_usuario LIMIT $pagina, $itens_por_pagina";
   $execute = $mysqli->query($sql_code) or die($mysqli->error);
   $produto = $execute->fetch_assoc();
   $num = $execute->num_rows;
   
   // pega a quantidade total de objetos no banco de dados
   $num_total = $mysqli->query("select distinct  auxiliar_evento_usuario from festa_usuario")->num_rows;
   
   // definir numero de páginas
   $num_paginas = ceil($num_total/$itens_por_pagina);
   
   
   
   
   
    if($num > 0){ ?>
<?php do{ $i++;?>
<h3><i class="entypo-lamp"></i> <?php echo $produto['tipo_evento_usuario']?></h3>
<?php } while($produto = $execute->fetch_assoc()); ?>
                  <nav style="text-align: center;font-size: 29px;">
                     <ul class="pagination">
                        <li>
                           <a href="festas-cadastradas.php?pagina=<?php echo $_GET['pagina']-1 ?>" aria-label="Previous">
                           <span aria-hidden="true">&laquo;</span>
                           </a>
                        </li>
                        <?php 
                           for($i=0;$i<$num_paginas;$i++){
                           $estilo = "";
                           if($_GET['pagina'] == $i)
                           	$estilo = "class=\"active\"";
                           ?>
                        <li <?php echo $estilo; ?> ><a href="festas-cadastradas.php?pagina=<?php echo $i; ?>"><?php echo $i+1; ?></a></li>
                        <?php } ?>
                        <li>
                           <a href="festas-cadastradas.php?pagina=<?php echo $_GET['pagina']+1 ?>" aria-label="Next">
                           <span aria-hidden="true">&raquo;</span>
                           </a>
                        </li>
                     </ul>
                  </nav>
<?php } ?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.