Ir para conteúdo
Fórum Script Brasil
  • 0

A paginação no mysqli


Frank K Hosaka

Pergunta

Ainda não dominei a ferramenta Livewire do Laravel, mas eu gostei dele.

O Livewire me lembra os primeiros anos que comecei a engatinhar no PHP, quando não sabia como separar o PHP do HTML.

Apesar de não saber como usar o Livewire, ele me ensinou que o Eloquent tem uma paginação embutida, ou seja, você não precisa do Livewire para paginar. O Eloquent tem o paginador embutido.

Esse não é o caso do mysqli, mas a Gemini provou que ele tem um paginador embutido. Ele está depois do comando limit:

** o roteador que foi improvisado no método inicio só serve para esse exemplo em particular **

index.php
<?php
header('location:balancete.php?balancete_1');

balancete.php
<?php
$mysqli=new mysqli("localhost","root","","teste");

class Balancete 
{
	function inicio()
	{
		$rota=explode("_",key($_GET));
		$metodo=$rota[0];
		$argumento=$rota[1];
		return $this->$metodo($argumento);
	}

	function balancete($paginaAtual=null)
	{
		global $mysqli;
		$registros=$mysqli->query("select count(*) as total from tbconta")
			->fetch_assoc()['total'];
		$registrosPorPagina=10;
		$paginaAtual = ($paginaAtual) ? $paginaAtual : 1;
		$indicador = ($paginaAtual - 1) * $registrosPorPagina;
		$contas=json_decode(json_encode(
			$mysqli->query("select * from tbconta limit $indicador, 
				$registrosPorPagina")->fetch_all(MYSQLI_ASSOC)));
		?>
		<table><th>Conta<th>Descricao
		<?php foreach($contas as $conta): ?>
			<tr><td><?=$conta->conta?><td><?=$conta->descricao?>
		<?php endforeach; 
			$paginaAnterior=$paginaAtual-1;
			$paginaAtual++; ?>
		</table>
		<a href=?balancete.<?=$paginaAnterior?>>Anterior</a>
		<a href=?balancete.<?=$paginaAtual?>>Próximo</a>
		<?php

	}
}

(new Balancete)->inicio();

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Fase 2: aqui inclui o saldo inicial de cada conta, e também introduzi o Tailwinds no PHP.

Usei o tutorial em https://tailwindcss.com/docs/installation - eles presumem que você vai utilizar um subdiretório chamado /src/, mas coloquei tudo no diretório raiz.

Os principais arquivos ficaram assim:

input.css
@tailwind base;
@tailwind components;
@tailwind utilities;

tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
  content: ["*.{php,js}"],
  theme: { extend: {}, },
  plugins: [],
}

Para ativar o servidor do Tailwinds, usei esse comando:

npx tailwindcss -i input.css -o output.css --watch

E o meu arquivo principal ficou assim:

balancete.php
<?php
$mysqli=new mysqli("localhost","root","","teste");
function dec($value) 
{
    return ($value) ? number_format($value,2,',','.') : null;
}

class Balancete 
{
	function inicio()
	{
		$rota=explode("_",key($_GET));
		$metodo=$rota[0];
		$argumento=$rota[1];
		return $this->$metodo($argumento);
	}

	function balancete($paginaAtual=null)
	{
		global $mysqli;
		$primeiroDia='2024-10-01';
		$ultimoDia='2024-10-31';
		$matriz=[];
		$registros=$mysqli->query("select count(*) as total from tbconta")
			->fetch_assoc()['total'];
		$registrosPorPagina=20;
		$paginaAtual = ($paginaAtual) ? $paginaAtual : 1;
		$indicador = ($paginaAtual - 1) * $registrosPorPagina;
		$contas=json_decode(json_encode(
			$mysqli->query("select * from tbconta limit $indicador, $registrosPorPagina")
			->fetch_all(MYSQLI_ASSOC)));
		foreach($contas as $conta)
		{
			$debitos=$mysqli->query("select sum(valor) as soma from tbdiario
				where contad=$conta->conta and dia < '$primeiroDia'")->fetch_assoc()['soma'];
			$creditos=$mysqli->query("select sum(valor) as soma from tbdiario
				where contac=$conta->conta and dia < '$primeiroDia'")->fetch_assoc()['soma'];
			$inicio=round($debitos-$creditos,2);
			$matriz[]=['conta'=>$conta->conta,'descricao'=>$conta->descricao,'inicio'=>$inicio];
		}
		$jMatriz=json_decode(json_encode($matriz));
		?>
		<link rel="stylesheet" href="output.css">
		<div class='w-[500px] mx-auto'>
		<div class="bg-blue-500 text-white">Balancete</div>
		<div class="flex">
          <div class="w-1/6 p-0 font-bold">Conta</div>
          <div class="w-1/2 p-0 font-bold">Descrição</div>
          <div class="w-1/6 p-0 font-bold text-right">Início</div>
		</div>
      	<?php foreach($jMatriz as $conta): ?>
		<div class="flex">
          <div class="w-1/6 p-0"><?=$conta->conta?></div>
          <div class="w-1/2 p-0 whitespace-nowrap"><?=$conta->descricao?></div>
          <div class="w-1/6 p-0 text-right"><?=dec($conta->inicio)?></div>
		</div>
		<?php endforeach; 
			$paginaAnterior=$paginaAtual-1;
			$paginaAtual++; ?>
		</table>
		<div class=py-2></div>
		<a href=?balancete.<?=$paginaAnterior?>
			class="bg-blue-500 hover:bg-blue-700 text-white 
			font-bold py-1 px-2 rounded">Anterior</a>
		<a href=?balancete.<?=$paginaAtual?>
			class="bg-blue-500 hover:bg-blue-700 text-white 
			font-bold py-1 px-2 rounded">Próximo</a>
		</div>
		<?php
	}
}
(new Balancete)->inicio();

 

Captura de tela 2024-10-02 163220.png

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...