PAGINACION PERSONAS API JSON PHP MYSQL
hacer codigo que cargue tabla persona con nombre y foto guardada en carpeta con html con fetch api json en php y base dato mysql hacer paginacion con siguiente y anterior
Para crear un código que cargue una tabla de personas con nombre y foto guardada en una carpeta utilizando HTML y Fetch API JSON en PHP y una base de datos MySQL y que además tenga paginación con botones de siguiente y anterior, podemos seguir los siguientes pasos:
Crear una base de datos MySQL con una tabla llamada "personas" que tenga los siguientes campos: id (autoincremental), nombre (varchar), foto (varchar) y fecha_creacion (timestamp).
Crear una carpeta llamada "fotos" en la raíz del proyecto donde se guardarán las fotos de las personas.
Crear un archivo HTML que tenga una tabla con tres columnas: "ID", "Nombre" y "Foto". Esta tabla estará vacía al principio y se llenará dinámicamente a través de JavaScript utilizando Fetch API JSON.
Crear un archivo PHP que se encargue de leer los datos de la base de datos y devolverlos en formato JSON cuando se llame mediante Fetch API. Este archivo también se encargará de realizar la paginación. Para ello, recibirá dos parámetros mediante GET: "pagina" y "registros_por_pagina". La variable "pagina" indicará el número de página actual y "registros_por_pagina" el número de registros que se mostrarán en cada página.
En el archivo HTML, crear un script de JavaScript que llame al archivo PHP mediante Fetch API para obtener los datos de la base de datos y llenar la tabla. Este script también se encargará de manejar la paginación y actualizar la tabla cada vez que se cambie de página.
Agregar botones de siguiente y anterior debajo de la tabla para permitir la navegación entre páginas. Estos botones también llamarán al archivo PHP mediante Fetch API para obtener los datos de la siguiente o anterior página y actualizar la tabla.
A continuación se muestra un ejemplo de cómo podría ser el código PHP para leer los datos de la base de datos y realizar la paginación:
php
Copy code
<?php
// Conectar a la base de datos
$conexion = new mysqli("servidor", "usuario", "contraseña", "basedatos");
// Obtener los parámetros de paginación
$pagina = $_GET["pagina"] ?? 1;
$registros_por_pagina = $_GET["registros_por_pagina"] ?? 10;
// Calcular el índice de inicio y fin para los registros de la página actual
$indice_inicio = ($pagina - 1) * $registros_por_pagina;
$indice_fin = $indice_inicio + $registros_por_pagina;
// Consultar los registros de la página actual
$resultado = $conexion->query("SELECT * FROM personas ORDER BY fecha_creacion DESC LIMIT $indice_inicio, $registros_por_pagina");
// Crear un array con los datos de las personas
$personas = [];
while ($fila = $resultado->fetch_assoc()) {
$personas[] = $fila;
}
// Calcular el número total de páginas
$resultado_total = $conexion->query("SELECT COUNT(*) AS total FROM personas");
$numero_total_registros = $resultado_total->fetch_assoc()["total"];
$numero_total_paginas = ceil($numero_total_registros / $registros_por_pagina);
// Devolver los datos en formato JSON
echo json_encode([
"personas" => $personas,
"numero_total_paginas" => $numero_total_paginas,
"pagina_actual" => $pagina,
]);
En el siguiente ejemplo se muestra cómo podría ser el código HTML
jose fernandez
ejemplo se muestra cómo podría ser el código HTML
A continuación se muestra un ejemplo de cómo podría ser el código HTML para la tabla de personas con paginación:
html
Copy code
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Tabla de personas con paginación</title>
</head>
<body>
<table id="tabla_personas">
<thead>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>Foto</th>
</tr>
</thead>
<tbody>
<!-- Aquí se llenará dinámicamente la tabla -->
</tbody>
</table>
<div id="contenedor_botones">
<button id="boton_anterior">Anterior</button>
<button id="boton_siguiente">Siguiente</button>
</div>
<script>
// Configuración de la paginación
var registros_por_pagina = 10;
var pagina_actual = 1;
var numero_total_paginas = 1;
// Función para llenar la tabla con los datos obtenidos del servidor
function llenarTabla(personas) {
var tbody = document.querySelector("#tabla_personas tbody");
tbody.innerHTML = "";
personas.forEach(function(persona) {
var tr = document.createElement("tr");
tr.innerHTML = `
<td>${persona.id}</td>
<td>${persona.nombre}</td>
<td><img src="fotos/${persona.foto}" alt="${persona.nombre}" width="50"></td>
`;
tbody.appendChild(tr);
});
}
// Función para actualizar la paginación
function actualizarPaginacion() {
var boton_anterior = document.querySelector("#boton_anterior");
var boton_siguiente = document.querySelector("#boton_siguiente");
boton_anterior.disabled = pagina_actual == 1;
boton_siguiente.disabled = pagina_actual == numero_total_paginas;
}
// Función para obtener los datos del servidor y llenar la tabla
function obtenerDatos() {
fetch(`datos.php?pagina=${pagina_actual}®istros_por_pagina=${registros_por_pagina}`)
.then(function(response) {
return response.json();
})
.then(function(data) {
llenarTabla(data.personas);
numero_total_paginas = data.numero_total_paginas;
actualizarPaginacion();
});
}
// Manejadores de eventos para los botones de paginación
document.querySelector("#boton_anterior").addEventListener("click", function() {
if (pagina_actual > 1) {
pagina_actual--;
obtenerDatos();
}
});
document.querySelector("#boton_siguiente").addEventListener("click", function() {
if (pagina_actual < numero_total_paginas) {
pagina_actual++;
obtenerDatos();
}
});
// Obtener los datos del servidor y llenar la tabla al cargar la página
obtenerDatos();
</script>
</body>
</html>
Este código utiliza Fetch API para llamar al archivo PHP y obtener los datos de la base de datos en formato JSON. Luego, utiliza JavaScript para llenar la tabla con los datos obtenidos y actualizar la paginación al cambiar de página. Los botones de siguiente y anterior llaman al servidor para obtener los datos de la siguiente o anterior página y actualizar la tabla.
jose fernandez
hazlo pero con el metodo pdo de php
Aquí está el código PHP para obtener los datos de la base de datos usando PDO en lugar de la extensión mysql:
php
Copy code
<?php
// Conexión a la base de datos
$host = "localhost";
$dbname = "nombre_de_la_base_de_datos";
$username = "nombre_de_usuario";
$password = "contraseña";
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// Obtener la página actual y el número de registros por página
$pagina = isset($_GET["pagina"]) ? (int)$_GET["pagina"] : 1;
$registros_por_pagina = isset($_GET["registros_por_pagina"]) ? (int)$_GET["registros_por_pagina"] : 10;
// Calcular el índice del primer registro de la página actual
$indice_primer_registro = ($pagina - 1) * $registros_por_pagina;
// Consultar la base de datos para obtener los registros de la página actual
$stmt = $conn->prepare("SELECT * FROM personas ORDER BY id LIMIT :inicio, :registros_por_pagina");
$stmt->bindParam(":inicio", $indice_primer_registro, PDO::PARAM_INT);
$stmt->bindParam(":registros_por_pagina", $registros_por_pagina, PDO::PARAM_INT);
$stmt->execute();
$personas = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Contar el número total de registros en la base de datos
$stmt = $conn->prepare("SELECT COUNT(*) AS total FROM personas");
$stmt->execute();
$total_registros = $stmt->fetch(PDO::FETCH_ASSOC)["total"];
// Calcular el número total de páginas
$numero_total_paginas = ceil($total_registros / $registros_por_pagina);
// Retornar los datos en formato JSON
echo json_encode(array(
"personas" => $personas,
"numero_total_paginas" => $numero_total_paginas
));
?>
Este código utiliza PDO para conectarse a la base de datos y ejecutar consultas. El código también calcula el número total de registros y el número total de páginas para la paginación. Al final, devuelve los datos en formato JSON para ser procesados por el código JavaScript que se muestra en mi respuesta anterior.
jose fernandez
haz el código HTML pero para pdo
El código HTML no cambia si utilizamos PDO o la extensión mysql para conectarnos a la base de datos. Aquí te muestro el mismo código HTML que proporcioné en mi respuesta anterior:
html
Copy code
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Paginación con PHP, MySQL y Fetch API</title>
<style>
#personas {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
margin: 0 auto;
max-width: 800px;
}
.persona {
display: flex;
flex-direction: column;
align-items: center;
margin: 20px;
max-width: 200px;
}
.persona img {
width: 100%;
max-width: 200px;
height: auto;
}
.pagination {
display: flex;
justify-content: center;
margin-top: 20px;
}
.pagination button {
background-color: #4CAF50;
border: none;
color: white;
cursor: pointer;
margin: 0 10px;
padding: 10px;
text-align: center;
text-decoration: none;
font-size: 16px;
}
.pagination button:hover {
background-color: #3e8e41;
}
.pagination button:disabled {
background-color: #aaaaaa;
cursor: default;
}
</style>
</head>
<body>
<h1>Paginación con PHP, MySQL y Fetch API</h1>
<div id="personas"></div>
<div class="pagination">
<button id="anterior" disabled>Anterior</button>
<button id="siguiente">Siguiente</button>
</div>
<script>
// Definir variables globales
var pagina_actual = 1;
var numero_total_paginas = 1;
var registros_por_pagina = 10;
// Obtener la lista de personas de la página actual
function obtenerPersonas() {
fetch(`obtener_personas.php?pagina=${pagina_actual}®istros_por_pagina=${registros_por_pagina}`)
.then(response => response.json())
.then(data => {
// Actualizar la variable global con el número total de páginas
numero_total_paginas = data.numero_total_paginas;
// Crear el HTML para mostrar la lista de personas
var html = "";
data.personas.forEach(persona => {
html += `
<div class="persona">
<img src="${persona.foto}" alt="${persona.nombre}">
<p>${persona.nombre}</p>
</div>
`;
});
// Insertar el HTML en la página
document.getElementById("personas").innerHTML = html;
// Habilitar o deshabilitar los botones de paginación según corresponda
if (pagina_actual == 1) {
document.getElementById("anterior").disabled = true;
} else {
document.getElementById("anterior").disabled = false;
}
if (pagina_actual == numero_total_paginas) {
document.getElementById("siguiente").disabled = true;
} else {
document.getElementById("siguiente").disabled = false;
}
});
}
// Manejar el clic en el botón "Siguiente"
document.getElementById("siguiente").addEventListener("click", function() {
if (pagina_actual < numero_total_paginas) {
pagina
jose fernandez
hazme de nuevo el código HTML pero para pdo
De acuerdo, aquí te muestro el código HTML para la paginación con PDO:
html
Copy code
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Paginación con PHP, MySQL y Fetch API</title>
<style>
#personas {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
margin: 0 auto;
max-width: 800px;
}
.persona {
display: flex;
flex-direction: column;
align-items: center;
margin: 20px;
max-width: 200px;
}
.persona img {
width: 100%;
max-width: 200px;
height: auto;
}
.pagination {
display: flex;
justify-content: center;
margin-top: 20px;
}
.pagination button {
background-color: #4CAF50;
border: none;
color: white;
cursor: pointer;
margin: 0 10px;
padding: 10px;
text-align: center;
text-decoration: none;
font-size: 16px;
}
.pagination button:hover {
background-color: #3e8e41;
}
.pagination button:disabled {
background-color: #aaaaaa;
cursor: default;
}
</style>
</head>
<body>
<h1>Paginación con PHP, MySQL y Fetch API</h1>
<div id="personas"></div>
<div class="pagination">
<button id="anterior" disabled>Anterior</button>
<button id="siguiente">Siguiente</button>
</div>
<script>
// Definir variables globales
var pagina_actual = 1;
var numero_total_paginas = 1;
var registros_por_pagina = 10;
// Obtener la lista de personas de la página actual
function obtenerPersonas() {
fetch(`obtener_personas.php?pagina=${pagina_actual}®istros_por_pagina=${registros_por_pagina}`)
.then(response => response.json())
.then(data => {
// Actualizar la variable global con el número total de páginas
numero_total_paginas = data.numero_total_paginas;
// Crear el HTML para mostrar la lista de personas
var html = "";
data.personas.forEach(persona => {
html += `
<div class="persona">
<img src="${persona.foto}" alt="${persona.nombre}">
<p>${persona.nombre}</p>
</div>
`;
});
// Insertar el HTML en la página
document.getElementById("personas").innerHTML = html;
// Habilitar o deshabilitar los botones de paginación según corresponda
if (pagina_actual == 1) {
document.getElementById("anterior").disabled = true;
} else {
document.getElementById("anterior").disabled = false;
}
if (pagina_actual == numero_total_paginas) {
document.getElementById("siguiente").disabled = true;
} else {
document.getElementById("siguiente").disabled = false;
}
});
}
// Manejar el clic en el botón "Siguiente"
document.getElementById("siguiente").addEventListener("click", function() {
if (pagina_actual < numero_total_paginas) {
pagina_actual++;
obtenerPersonas();
}
});
// Manejar el clic en el botón "Anterior"
jose fernandez
hazme de nuevo el código HTML pero para pdo sin style css
De acuerdo, aquí te muestro el código HTML para la paginación con PDO sin estilos CSS:
html
Copy code
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Paginación con PHP, MySQL y Fetch API</title>
</head>
<body>
<h1>Paginación con PHP, MySQL y Fetch API</h1>
<div id="personas"></div>
<div class="pagination">
<button id="anterior" disabled>Anterior</button>
<button id="siguiente">Siguiente</button>
</div>
<script>
// Definir variables globales
var pagina_actual = 1;
var numero_total_paginas = 1;
var registros_por_pagina = 10;
// Obtener la lista de personas de la página actual
function obtenerPersonas() {
fetch(`obtener_personas.php?pagina=${pagina_actual}®istros_por_pagina=${registros_por_pagina}`)
.then(response => response.json())
.then(data => {
// Actualizar la variable global con el número total de páginas
numero_total_paginas = data.numero_total_paginas;
// Crear el HTML para mostrar la lista de personas
var html = "";
data.personas.forEach(persona => {
html += `
<div class="persona">
<img src="${persona.foto}" alt="${persona.nombre}">
<p>${persona.nombre}</p>
</div>
`;
});
// Insertar el HTML en la página
document.getElementById("personas").innerHTML = html;
// Habilitar o deshabilitar los botones de paginación según corresponda
if (pagina_actual == 1) {
document.getElementById("anterior").disabled = true;
} else {
document.getElementById("anterior").disabled = false;
}
if (pagina_actual == numero_total_paginas) {
document.getElementById("siguiente").disabled = true;
} else {
document.getElementById("siguiente").disabled = false;
}
});
}
// Manejar el clic en el botón "Siguiente"
document.getElementById("siguiente").addEventListener("click", function() {
if (pagina_actual < numero_total_paginas) {
pagina_actual++;
obtenerPersonas();
}
});
// Manejar el clic en el botón "Anterior"
document.getElementById("anterior").addEventListener("click", function() {
if (pagina_actual > 1) {
pagina_actual--;
obtenerPersonas();
}
});
// Obtener la lista de personas de la página actual al cargar la página
obtenerPersonas();
</script>
</body>
</html>
Ten en cuenta que este código solo muestra la estructura básica de la página, sin incluir estilos CSS. Si deseas agregar estilos a tu página, deberás escribir las reglas CSS correspondientes en una sección <style> dentro del <head> de tu documento HTML o en un archivo externo de CSS.
///////////
HAZLO CON FETCH PERO METODO POST Y PDO
De acuerdo, aquí te muestro cómo sería el código HTML y JavaScript para la paginación con Fetch API, usando el método POST y PDO en el lado del servidor:
HTML:
html
Copy code
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Paginación con PHP, MySQL y Fetch API</title>
</head>
<body>
<h1>Paginación con PHP, MySQL y Fetch API</h1>
<div id="personas"></div>
<div class="pagination">
<button id="anterior" disabled>Anterior</button>
<button id="siguiente">Siguiente</button>
</div>
<script src="paginacion.js"></script>
</body>
</html>
JavaScript (paginacion.js):
javascript
Copy code
// Definir variables globales
var pagina_actual = 1;
var numero_total_paginas = 1;
var registros_por_pagina = 10;
// Obtener la lista de personas de la página actual
function obtenerPersonas() {
fetch('obtener_personas.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
pagina: pagina_actual,
registros_por_pagina: registros_por_pagina
})
})
.then(response => response.json())
.then(data => {
// Actualizar la variable global con el número total de páginas
numero_total_paginas = data.numero_total_paginas;
// Crear el HTML para mostrar la lista de personas
var html = "";
data.personas.forEach(persona => {
html += `
<div class="persona">
<img src="${persona.foto}" alt="${persona.nombre}">
<p>${persona.nombre}</p>
</div>
`;
});
// Insertar el HTML en la página
document.getElementById("personas").innerHTML = html;
// Habilitar o deshabilitar los botones de paginación según corresponda
if (pagina_actual == 1) {
document.getElementById("anterior").disabled = true;
} else {
document.getElementById("anterior").disabled = false;
}
if (pagina_actual == numero_total_paginas) {
document.getElementById("siguiente").disabled = true;
} else {
document.getElementById("siguiente").disabled = false;
}
});
}
// Manejar el clic en el botón "Siguiente"
document.getElementById("siguiente").addEventListener("click", function() {
if (pagina_actual < numero_total_paginas) {
pagina_actual++;
obtenerPersonas();
}
});
// Manejar el clic en el botón "Anterior"
document.getElementById("anterior").addEventListener("click", function() {
if (pagina_actual > 1) {
pagina_actual--;
obtenerPersonas();
}
});
// Obtener la lista de personas de la página actual al cargar la página
obtenerPersonas();
PHP (obtener_personas.php):
php
Copy code
<?php
// Conectarse a la base de datos con PDO
$dsn = "mysql:host=localhost;dbname=nombre_de_la_base_de_datos;charset=utf8mb4";
$usuario = "nombre_de_usuario";
$contrasena = "contraseña_de_usuario";
try {
$conexion = new PDO($dsn, $usuario, $contrasena);
$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Error al conectar con
jose fernandez
HAZME SOLO EL obtener_personas.php
Claro, aquí te muestro cómo sería el código PHP para obtener la lista de personas usando el método POST y PDO:
php
Copy code
<?php
// Conectarse a la base de datos con PDO
$dsn = "mysql:host=localhost;dbname=nombre_de_la_base_de_datos;charset=utf8mb4";
$usuario = "nombre_de_usuario";
$contrasena = "contraseña_de_usuario";
try {
$conexion = new PDO($dsn, $usuario, $contrasena);
$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Error al conectar con la base de datos: " . $e->getMessage());
}
// Obtener el número de página y el número de registros por página enviados por POST
$pagina = $_POST["pagina"] ?? 1;
$registros_por_pagina = $_POST["registros_por_pagina"] ?? 10;
// Calcular el número de registros que se deben saltar para obtener los registros de la página actual
$registros_a_saltar = ($pagina - 1) * $registros_por_pagina;
// Obtener el número total de registros en la tabla "personas"
$stmt = $conexion->prepare("SELECT COUNT(*) FROM personas");
$stmt->execute();
$numero_total_registros = $stmt->fetchColumn();
// Calcular el número total de páginas
$numero_total_paginas = ceil($numero_total_registros / $registros_por_pagina);
// Obtener la lista de personas de la página actual
$stmt = $conexion->prepare("SELECT nombre, foto FROM personas LIMIT :registros_por_pagina OFFSET :registros_a_saltar");
$stmt->bindValue(":registros_por_pagina", (int)$registros_por_pagina, PDO::PARAM_INT);
$stmt->bindValue(":registros_a_saltar", (int)$registros_a_saltar, PDO::PARAM_INT);
$stmt->execute();
$personas = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Crear un arreglo con los datos de respuesta
$respuesta = array(
"personas" => $personas,
"numero_total_paginas" => $numero_total_paginas
);
// Devolver los datos como JSON
header("Content-Type: application/json");
echo json_encode($respuesta);
jose fernandez
EN obtener_personas.php FALTA EL DECODE JSON PARA $_POST["pagina"] Y $_POST["registros_por_pagina"]
Tienes razón, me disculpo por mi error. Antes de utilizar los valores de $_POST["pagina"] y $_POST["registros_por_pagina"], es necesario decodificar el JSON que se envió en la petición.
Aquí te muestro cómo se vería el código corregido:
php
Copy code
<?php
// Conectarse a la base de datos con PDO
$dsn = "mysql:host=localhost;dbname=nombre_de_la_base_de_datos;charset=utf8mb4";
$usuario = "nombre_de_usuario";
$contrasena = "contraseña_de_usuario";
try {
$conexion = new PDO($dsn, $usuario, $contrasena);
$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Error al conectar con la base de datos: " . $e->getMessage());
}
// Decodificar el JSON de la petición para obtener el número de página y el número de registros por página
$json = file_get_contents('php://input');
$data = json_decode($json, true);
$pagina = $data["pagina"] ?? 1;
$registros_por_pagina = $data["registros_por_pagina"] ?? 10;
// Calcular el número de registros que se deben saltar para obtener los registros de la página actual
$registros_a_saltar = ($pagina - 1) * $registros_por_pagina;
// Obtener el número total de registros en la tabla "personas"
$stmt = $conexion->prepare("SELECT COUNT(*) FROM personas");
$stmt->execute();
$numero_total_registros = $stmt->fetchColumn();
// Calcular el número total de páginas
$numero_total_paginas = ceil($numero_total_registros / $registros_por_pagina);
// Obtener la lista de personas de la página actual
$stmt = $conexion->prepare("SELECT nombre, foto FROM personas LIMIT :registros_por_pagina OFFSET :registros_a_saltar");
$stmt->bindValue(":registros_por_pagina", (int)$registros_por_pagina, PDO::PARAM_INT);
$stmt->bindValue(":registros_a_saltar", (int)$registros_a_saltar, PDO::PARAM_INT);
$stmt->execute();
$personas = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Crear un arreglo con los datos de respuesta
$respuesta = array(
"personas" => $personas,
"numero_total_paginas" => $numero_total_paginas
);
// Devolver los datos como JSON
header("Content-Type: application/json");
echo json_encode($respuesta);
//////////////////////
HAZ EL FETCH POST PERO METODO JSON.PARSE Y CON PDO Y JUNTO AL obtener_personas.php
Por supuesto, aquí te muestro cómo sería el código del archivo HTML utilizando fetch() con el método POST, el objeto FormData() y JSON.parse(). Además, el archivo obtener_personas.php se encuentra integrado en el mismo archivo:
html
Copy code
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Lista de Personas</title>
</head>
<body>
<div id="lista-personas"></div>
<script>
// Función para crear y mostrar la lista de personas
function mostrarPersonas(pagina = 1, registrosPorPagina = 10) {
// Crear el objeto FormData() para enviar los datos de la petición POST
const formData = new FormData();
formData.append('pagina', pagina);
formData.append('registros_por_pagina', registrosPorPagina);
// Crear la petición POST con fetch()
fetch('obtener_personas.php', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
// Crear la lista de personas en el HTML
let listaPersonas = '';
data.personas.forEach(persona => {
listaPersonas += `<div>
<img src="${persona.foto}" alt="Foto de ${persona.nombre}">
<p>${persona.nombre}</p>
</div>`;
});
document.getElementById('lista-personas').innerHTML = listaPersonas;
// Crear la paginación en el HTML
let paginacion = '';
for (let i = 1; i <= data.numero_total_paginas; i++) {
paginacion += `<button onclick="mostrarPersonas(${i}, ${registrosPorPagina})">${i}</button>`;
}
document.getElementById('paginacion').innerHTML = paginacion;
})
.catch(error => {
console.error('Error al obtener la lista de personas:', error);
});
}
// Mostrar la lista de personas al cargar la página
mostrarPersonas();
</script>
<div id="paginacion"></div>
</body>
</html>
Y aquí te muestro cómo sería el código del archivo obtener_personas.php utilizando PDO y recibiendo los datos en formato JSON:
php
Copy code
<?php
// Conectarse a la base de datos con PDO
$dsn = "mysql:host=localhost;dbname=nombre_de_la_base_de_datos;charset=utf8mb4";
$usuario = "nombre_de_usuario";
$contrasena = "contraseña_de_usuario";
try {
$conexion = new PDO($dsn, $usuario, $contrasena);
$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Error al conectar con la base de datos: " . $e->getMessage());
}
// Decodificar el JSON de la petición para obtener el número de página y el número de registros por página
$json = file_get_contents('php://input');
$data = json_decode($json, true);
$pagina = $data["pagina"] ?? 1;
$registros_por_pagina = $data["registros_por_pagina"] ?? 10;
// Calcular el número de registros que se deben saltar para obtener los registros de la página actual
$registros_a_saltar = ($pagina - 1) * $registros_por_pagina;
// Obtener el número total de registros en la tabla "personas"
$stmt = $conexion->prepare("SELECT COUNT
jose fernandez
haz json parse en el body de fetch
Claro, aquí te muestro cómo sería el código en el archivo HTML utilizando fetch() con el método POST, el objeto FormData() y JSON.parse() en el body:
html
Copy code
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Lista de Personas</title>
</head>
<body>
<div id="lista-personas"></div>
<script>
// Función para crear y mostrar la lista de personas
function mostrarPersonas(pagina = 1, registrosPorPagina = 10) {
// Crear el objeto FormData() para enviar los datos de la petición POST
const formData = new FormData();
formData.append('pagina', pagina);
formData.append('registros_por_pagina', registrosPorPagina);
// Crear la petición POST con fetch()
fetch('obtener_personas.php', {
method: 'POST',
body: JSON.stringify(Object.fromEntries(formData)),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => {
// Crear la lista de personas en el HTML
let listaPersonas = '';
data.personas.forEach(persona => {
listaPersonas += `<div>
<img src="${persona.foto}" alt="Foto de ${persona.nombre}">
<p>${persona.nombre}</p>
</div>`;
});
document.getElementById('lista-personas').innerHTML = listaPersonas;
// Crear la paginación en el HTML
let paginacion = '';
for (let i = 1; i <= data.numero_total_paginas; i++) {
paginacion += `<button onclick="mostrarPersonas(${i}, ${registrosPorPagina})">${i}</button>`;
}
document.getElementById('paginacion').innerHTML = paginacion;
})
.catch(error => {
console.error('Error al obtener la lista de personas:', error);
});
}
// Mostrar la lista de personas al cargar la página
mostrarPersonas();
</script>
<div id="paginacion"></div>
</body>
</html>
En el archivo PHP no hay cambios respecto al código que proporcioné en la última respuesta, ya que en el archivo PHP no es necesario hacer ningún cambio para recibir los datos en formato JSON.
jose fernandez
body: JSON.parse(), hazlo con ese
Lo siento, cometí un error en mi respuesta anterior. La función JSON.parse() debe ser utilizada en el lado del servidor para interpretar los datos recibidos en formato JSON, pero en el lado del cliente (en el archivo HTML) debemos enviar los datos en formato JSON utilizando el método JSON.stringify() en el objeto FormData().
Entonces, para utilizar fetch() con el método POST y enviar los datos en formato JSON utilizando JSON.stringify() en el objeto FormData(), el código en el archivo HTML sería el siguiente:
html
Copy code
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Lista de Personas</title>
</head>
<body>
<div id="lista-personas"></div>
<script>
// Función para crear y mostrar la lista de personas
function mostrarPersonas(pagina = 1, registrosPorPagina = 10) {
// Crear el objeto FormData() para enviar los datos de la petición POST
const formData = new FormData();
formData.append('pagina', pagina);
formData.append('registros_por_pagina', registrosPorPagina);
// Crear la petición POST con fetch()
fetch('obtener_personas.php', {
method: 'POST',
body: JSON.stringify(Object.fromEntries(formData)),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => {
// Crear la lista de personas en el HTML
let listaPersonas = '';
data.personas.forEach(persona => {
listaPersonas += `<div>
<img src="${persona.foto}" alt="Foto de ${persona.nombre}">
<p>${persona.nombre}</p>
</div>`;
});
document.getElementById('lista-personas').innerHTML = listaPersonas;
// Crear la paginación en el HTML
let paginacion = '';
for (let i = 1; i <= data.numero_total_paginas; i++) {
paginacion += `<button onclick="mostrarPersonas(${i}, ${registrosPorPagina})">${i}</button>`;
}
document.getElementById('paginacion').innerHTML = paginacion;
})
.catch(error => {
console.error('Error al obtener la lista de personas:', error);
});
}
// Mostrar la lista de personas al cargar la página
mostrarPersonas();
</script>
<div id="paginacion"></div>
</body>
</html>
Y el archivo PHP sería el mismo que proporcioné en la respuesta anterior, sin la necesidad de utilizar JSON.parse():
php
Copy code
<?php
// Conectar a la base de datos con PDO
$dsn = 'mysql:host=localhost;dbname=nombre_de_la_base_de_datos;charset=utf8mb4';
$usuario = 'nombre_de_usuario';
$contrasena = 'contraseña';
$pdo = new PDO($dsn, $usuario, $contrasena);
// Obtener los datos de la petición POST en formato JSON
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
// Obtener el número de página y registros por página
$pagina = isset($request->pagina) ? intval($request->pagina) : 1;
$registrosPorPagina = isset($request->registros_por_pagina) ? intval($request->registros_por_pagina) : 10;
// Calcular el índice del primer registro de la página actual
$indicePrimerRegistro
jose fernandez
entonces cuando uso el json parse ?
El uso de JSON.parse() en el lado del servidor (en el archivo PHP) es para interpretar los datos enviados desde el cliente en formato JSON.
En la implementación que te mostré anteriormente, no es necesario utilizar JSON.parse() en el lado del cliente (en el archivo HTML) porque estamos enviando los datos en formato JSON utilizando JSON.stringify() en el objeto FormData() que se envía en el cuerpo de la petición.
Entonces, en resumen, se utiliza JSON.parse() en el lado del servidor para interpretar los datos enviados desde el cliente en formato JSON, y JSON.stringify() en el lado del cliente para enviar los datos en formato JSON en la petición.
jose fernandez
dame 1 ejemplo
Claro, aquí te muestro un ejemplo sencillo:
Supongamos que tenemos un objeto JavaScript llamado datos que contiene algunos valores:
arduino
Copy code
const datos = {
nombre: "Juan",
edad: 25,
correo: "juan@example.com"
};
Para enviar este objeto en una petición POST utilizando fetch() y el formato JSON, podemos hacer lo siguiente:
javascript
Copy code
fetch("mi_servidor.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(datos)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
En este ejemplo, utilizamos JSON.stringify(datos) para convertir el objeto datos en una cadena JSON que puede ser enviada en el cuerpo de la petición.
En el lado del servidor (en el archivo PHP), podemos utilizar json_decode() para interpretar los datos recibidos en formato JSON:
php
Copy code
$datos = json_decode(file_get_contents('php://input'), true);
// Acceder a los valores recibidos
$nombre = $datos['nombre'];
$edad = $datos['edad'];
$correo = $datos['correo'];
En este ejemplo, utilizamos json_decode(file_get_contents('php://input'), true) para obtener los datos recibidos en el cuerpo de la petición y convertirlos en un array asociativo de PHP. Luego, podemos acceder a los valores recibidos utilizando las claves del array.
jose fernandez
ejemplo con json parse
Claro, aquí te muestro un ejemplo con JSON.parse() en el lado del servidor:
Supongamos que tenemos un objeto JavaScript llamado datos que contiene algunos valores:
arduino
Copy code
const datos = {
nombre: "Juan",
edad: 25,
correo: "juan@example.com"
};
Para enviar este objeto en una petición POST utilizando fetch() y el formato JSON, podemos hacer lo siguiente:
javascript
Copy code
fetch("mi_servidor.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(datos)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
En este ejemplo, utilizamos JSON.stringify(datos) para convertir el objeto datos en una cadena JSON que puede ser enviada en el cuerpo de la petición.
En el lado del servidor (en el archivo PHP), podemos utilizar json_decode() para interpretar los datos recibidos en formato JSON:
php
Copy code
$data = json_decode($_POST['data'], true);
// Acceder a los valores recibidos
$nombre = $data['nombre'];
$edad = $data['edad'];
$correo = $data['correo'];
En este ejemplo, utilizamos json_decode($_POST['data'], true) para obtener los datos recibidos en el cuerpo de la petición en formato JSON y convertirlos en un array asociativo de PHP. Luego, podemos acceder a los valores recibidos utilizando las claves del array.
Para enviar los datos utilizando JSON.parse() en el lado del servidor, debemos incluir el objeto JSON en el cuerpo de la petición y especificar el tipo de contenido como application/json. En el ejemplo anterior, podemos modificar el cuerpo de la petición de la siguiente manera:
css
Copy code
body: JSON.stringify({
data: JSON.stringify(datos)
})
En este caso, estamos enviando un objeto JSON con una propiedad llamada data que contiene los datos convertidos en una cadena JSON utilizando JSON.stringify(). En el lado del servidor, podemos obtener los datos y convertirlos de nuevo a un objeto JavaScript utilizando JSON.parse() de la siguiente manera:
php
Copy code
$data = json_decode($_POST['data'], true);
$datos = json_decode($data, true);
// Acceder a los valores recibidos
$nombre = $datos['nombre'];
$edad = $datos['edad'];
$correo = $datos['correo'];
En este ejemplo, primero utilizamos json_decode($_POST['data'], true) para obtener la cadena JSON que se envió en la propiedad data y convertirla en un array asociativo de PHP. Luego, utilizamos json_decode($data, true) para convertir la cadena JSON en un objeto JavaScript, y finalmente podemos acceder a los valores recibidos utilizando las claves del objeto.
Comentarios
Publicar un comentario