PATRON MVC 1-2 CRUD PERSONAS API JSON PHP MYSQL
CREAR TABLA PERSONAS CON NOMBRE DNI Y FOTO INSERTAR SQL CON PHP MYSQL METODO PDO FETCH API JSON PATRON DISEÑO MVC
Para crear la tabla "personas" con las columnas "nombre", "dni" y "foto", se puede utilizar el siguiente código SQL:
sql
Copy code
CREATE TABLE personas (
id INT(11) NOT NULL AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
dni VARCHAR(10) NOT NULL,
foto VARCHAR(100),
PRIMARY KEY (id)
);
Para insertar datos en la tabla utilizando PHP y MySQL con el método PDO, se puede seguir el siguiente ejemplo:
php
Copy code
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "nombre_de_la_base_de_datos";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$nombre = "Juan Pérez";
$dni = "12345678A";
$foto = "ruta/a/la/foto.jpg";
$stmt = $conn->prepare("INSERT INTO personas (nombre, dni, foto) VALUES (:nombre, :dni, :foto)");
$stmt->bindParam(':nombre', $nombre);
$stmt->bindParam(':dni', $dni);
$stmt->bindParam(':foto', $foto);
$stmt->execute();
echo "Datos insertados correctamente";
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
Para obtener los datos de la tabla utilizando el método PDO y devolverlos en formato JSON, se puede utilizar el siguiente ejemplo:
php
Copy code
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "nombre_de_la_base_de_datos";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM personas");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($result);
echo $json;
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
Para seguir el patrón de diseño MVC, se puede organizar el código de la siguiente manera:
Modelo (personas.php): contiene la lógica para acceder a la base de datos y manipular los datos de la tabla "personas".
Vista (personas_view.php): muestra los datos de la tabla "personas" en formato HTML o JSON, según corresponda.
Controlador (personas_controller.php): recibe las solicitudes del usuario y utiliza el modelo y la vista para procesarlas y devolver una respuesta.
Un ejemplo de código para el modelo sería:
php
Copy code
<?php
class PersonasModel {
private $db;
public function __construct($dbname, $username, $password) {
$servername = "localhost";
try {
$this->db = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
}
public function getPersonas() {
$stmt = $this->db->prepare("SELECT * FROM personas");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return
jose fernandez
el patrón de diseño MVC SOLO ESO
El patrón de diseño MVC (Model-View-Controller) se divide en tres partes principales:
Modelo (Model): representa la capa de datos, es decir, la estructura y la lógica para acceder y manipular los datos. Esto puede incluir el acceso a la base de datos, la validación de datos, la lógica de negocios, etc.
Vista (View): representa la capa de presentación, es decir, la forma en que se muestran los datos al usuario. Esto puede incluir HTML, CSS, JavaScript, etc.
Controlador (Controller): representa la capa de control, es decir, la lógica para procesar las solicitudes del usuario y devolver una respuesta. Esto puede incluir la validación de formularios, la selección de datos del modelo, la gestión de sesiones, etc.
El objetivo del patrón MVC es separar la lógica de la aplicación en tres componentes independientes, lo que facilita su mantenimiento, escalabilidad y reutilización. Cada componente tiene una responsabilidad específica y no interactúa directamente con los demás, sino que lo hace a través de interfaces claras y definidas.
En resumen, el patrón de diseño MVC es una forma de estructurar una aplicación web de manera modular y organizada, lo que ayuda a mejorar su calidad y eficiencia.
jose fernandez
el patrón de diseño MVC SOLO ESO CON CODIGO
Por supuesto, aquí hay un ejemplo de cómo implementar el patrón MVC en PHP:
Modelo (models/PersonaModel.php):
php
Copy code
<?php
class PersonaModel {
private $db;
public function __construct($dbname, $username, $password) {
$servername = "localhost";
try {
$this->db = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
}
public function getPersonas() {
$stmt = $this->db->prepare("SELECT * FROM personas");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
public function insertPersona($nombre, $dni, $foto) {
$stmt = $this->db->prepare("INSERT INTO personas (nombre, dni, foto) VALUES (:nombre, :dni, :foto)");
$stmt->bindParam(':nombre', $nombre);
$stmt->bindParam(':dni', $dni);
$stmt->bindParam(':foto', $foto);
$stmt->execute();
}
}
Vista (views/personas.php):
php
Copy code
<!DOCTYPE html>
<html>
<head>
<title>Personas</title>
</head>
<body>
<table>
<tr>
<th>Nombre</th>
<th>DNI</th>
<th>Foto</th>
</tr>
<?php foreach ($personas as $persona): ?>
<tr>
<td><?php echo $persona['nombre'] ?></td>
<td><?php echo $persona['dni'] ?></td>
<td><img src="<?php echo $persona['foto'] ?>"></td>
</tr>
<?php endforeach; ?>
</table>
<form action="index.php" method="post">
<label for="nombre">Nombre:</label>
<input type="text" name="nombre" id="nombre">
<br>
<label for="dni">DNI:</label>
<input type="text" name="dni" id="dni">
<br>
<label for="foto">Foto:</label>
<input type="text" name="foto" id="foto">
<br>
<input type="submit" value="Insertar">
</form>
</body>
</html>
Controlador (index.php):
php
Copy code
<?php
require_once 'models/PersonaModel.php';
$dbname = "nombre_de_la_base_de_datos";
$username = "username";
$password = "password";
$model = new PersonaModel($dbname, $username, $password);
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$nombre = $_POST['nombre'];
$dni = $_POST['dni'];
$foto = $_POST['foto'];
$model->insertPersona($nombre, $dni, $foto);
}
$personas = $model->getPersonas();
include 'views/personas.php';
En este ejemplo, el archivo index.php actúa como el controlador, que recibe las solicitudes del usuario y utiliza el modelo (PersonaModel) y la vista (personas.php) para procesarlas y devolver una respuesta. El modelo representa la capa de datos y contiene la lógica para acceder y manipular los datos de la tabla "personas". La vista representa la capa de presentación y
jose fernandez
HAZME MVC INCLUIDO UPDATE Y DELETE
Claro, aquí hay una versión actualizada del ejemplo anterior con funciones para actualizar y eliminar registros:
Modelo (models/PersonaModel.php):
php
Copy code
<?php
class PersonaModel {
private $db;
public function __construct($dbname, $username, $password) {
$servername = "localhost";
try {
$this->db = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
}
public function getPersonas() {
$stmt = $this->db->prepare("SELECT * FROM personas");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
public function getPersonaById($id) {
$stmt = $this->db->prepare("SELECT * FROM personas WHERE id=:id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result;
}
public function insertPersona($nombre, $dni, $foto) {
$stmt = $this->db->prepare("INSERT INTO personas (nombre, dni, foto) VALUES (:nombre, :dni, :foto)");
$stmt->bindParam(':nombre', $nombre);
$stmt->bindParam(':dni', $dni);
$stmt->bindParam(':foto', $foto);
$stmt->execute();
}
public function updatePersona($id, $nombre, $dni, $foto) {
$stmt = $this->db->prepare("UPDATE personas SET nombre=:nombre, dni=:dni, foto=:foto WHERE id=:id");
$stmt->bindParam(':id', $id);
$stmt->bindParam(':nombre', $nombre);
$stmt->bindParam(':dni', $dni);
$stmt->bindParam(':foto', $foto);
$stmt->execute();
}
public function deletePersona($id) {
$stmt = $this->db->prepare("DELETE FROM personas WHERE id=:id");
$stmt->bindParam(':id', $id);
$stmt->execute();
}
}
Vista (views/personas.php):
php
Copy code
<!DOCTYPE html>
<html>
<head>
<title>Personas</title>
</head>
<body>
<table>
<tr>
<th>Nombre</th>
<th>DNI</th>
<th>Foto</th>
<th>Acciones</th>
</tr>
<?php foreach ($personas as $persona): ?>
<tr>
<td><?php echo $persona['nombre'] ?></td>
<td><?php echo $persona['dni'] ?></td>
<td><img src="<?php echo $persona['foto'] ?>"></td>
<td>
<form action="index.php" method="post">
<input type="hidden" name="id" value="<?php echo $persona['id'] ?>">
<input type="submit" name="action" value="Editar">
</form>
<form action="index.php" method="post">
<input type="hidden" name="id" value="<?php echo $persona['id'] ?>">
<input type="submit" name="action" value="Eliminar">
</form>
</td>
</tr>
<?php endforeach; ?>
</table>
<?php if ($accion === 'insertar'):
jose fernandez
HAZME Vista (views/personas.php):
Aquí te muestro cómo se podría ver la vista de la lista de personas con la opción de agregar una nueva persona y la opción de editar o eliminar cada una de las personas existentes.
php
Copy code
<!DOCTYPE html>
<html>
<head>
<title>Personas</title>
</head>
<body>
<h1>Listado de Personas</h1>
<table>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>DNI</th>
<th>Foto</th>
<th>Acciones</th>
</tr>
<?php foreach ($personas as $persona): ?>
<tr>
<td><?php echo $persona['id'] ?></td>
<td><?php echo $persona['nombre'] ?></td>
<td><?php echo $persona['dni'] ?></td>
<td><img src="<?php echo $persona['foto'] ?>"></td>
<td>
<form action="index.php" method="post">
<input type="hidden" name="id" value="<?php echo $persona['id'] ?>">
<input type="submit" name="action" value="Editar">
</form>
<form action="index.php" method="post">
<input type="hidden" name="id" value="<?php echo $persona['id'] ?>">
<input type="submit" name="action" value="Eliminar">
</form>
</td>
</tr>
<?php endforeach; ?>
</table>
<h2>Agregar Persona</h2>
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" value="<?php echo $personaEditar['id'] ?>">
<label for="nombre">Nombre:</label>
<input type="text" name="nombre" id="nombre" value="<?php echo $personaEditar['nombre'] ?>">
<br>
<label for="dni">DNI:</label>
<input type="text" name="dni" id="dni" value="<?php echo $personaEditar['dni'] ?>">
<br>
<label for="foto">Foto:</label>
<input type="file" name="foto" id="foto">
<br>
<input type="submit" name="action" value="<?php echo $accion === 'editar' ? 'Actualizar' : 'Agregar' ?>">
</form>
</body>
</html>
Esta vista incluye una tabla con el listado de personas, con una fila para cada persona que muestra su ID, nombre, DNI, foto y dos botones, uno para editar y otro para eliminar. También incluye un formulario para agregar o editar personas, que incluye campos para el nombre, DNI y foto, y un botón para agregar o actualizar la información, dependiendo de si se está agregando una nueva persona o editando una existente.
jose fernandez
INCLUIR ACCIONES EN Vista (views/personas.php)
Aquí te muestro cómo podrías incluir las acciones de agregar, editar y eliminar en la vista de personas:
php
Copy code
<!DOCTYPE html>
<html>
<head>
<title>Personas</title>
</head>
<body>
<h1>Listado de Personas</h1>
<table>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>DNI</th>
<th>Foto</th>
<th>Acciones</th>
</tr>
<?php foreach ($personas as $persona): ?>
<tr>
<td><?php echo $persona['id'] ?></td>
<td><?php echo $persona['nombre'] ?></td>
<td><?php echo $persona['dni'] ?></td>
<td><img src="<?php echo $persona['foto'] ?>"></td>
<td>
<form action="index.php" method="post">
<input type="hidden" name="id" value="<?php echo $persona['id'] ?>">
<input type="submit" name="action" value="Editar">
</form>
<form action="index.php" method="post">
<input type="hidden" name="id" value="<?php echo $persona['id'] ?>">
<input type="submit" name="action" value="Eliminar">
</form>
</td>
</tr>
<?php endforeach; ?>
</table>
<h2>Agregar Persona</h2>
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" value="<?php echo $personaEditar['id'] ?>">
<label for="nombre">Nombre:</label>
<input type="text" name="nombre" id="nombre" value="<?php echo $personaEditar['nombre'] ?>">
<br>
<label for="dni">DNI:</label>
<input type="text" name="dni" id="dni" value="<?php echo $personaEditar['dni'] ?>">
<br>
<label for="foto">Foto:</label>
<input type="file" name="foto" id="foto">
<br>
<input type="submit" name="action" value="<?php echo $accion === 'editar' ? 'Actualizar' : 'Agregar' ?>">
</form>
</body>
</html>
En esta vista, se han agregado dos formularios para cada persona, uno para editar y otro para eliminar. Ambos formularios envían el ID de la persona a través de un campo oculto y envían una acción específica (Editar o Eliminar) al script de controlador index.php. También se ha agregado un formulario para agregar una nueva persona, que incluye campos para el nombre, DNI y foto. El botón de envío de este formulario cambia de "Agregar" a "Actualizar" según el valor de la variable $accion.
jose fernandez
INCUIR <?php if ($accion === 'insertar'):
Si quieres incluir la lógica para mostrar el formulario de agregar una nueva persona, podrías hacerlo usando la siguiente estructura de control:
php
Copy code
<?php if ($accion === 'insertar'): ?>
<h2>Agregar Persona</h2>
<form action="index.php" method="post" enctype="multipart/form-data">
<label for="nombre">Nombre:</label>
<input type="text" name="nombre" id="nombre">
<br>
<label for="dni">DNI:</label>
<input type="text" name="dni" id="dni">
<br>
<label for="foto">Foto:</label>
<input type="file" name="foto" id="foto">
<br>
<input type="submit" name="action" value="Agregar">
</form>
<?php endif; ?>
En este caso, se muestra el formulario de agregar una nueva persona si la variable $accion tiene el valor "insertar". La estructura de control <?php if ($accion === 'insertar'): ?> se cierra con <?php endif; ?>. Dentro de la estructura de control se encuentra el formulario HTML para agregar una nueva persona, que envía los datos del formulario a través del método POST al script de controlador index.php.
jose fernandez
<?php if ($accion === 'EDITAR'): ?>
Si quieres incluir la lógica para mostrar el formulario de edición de una persona, podrías hacerlo usando la siguiente estructura de control:
php
Copy code
<?php if ($accion === 'editar'): ?>
<h2>Editar Persona</h2>
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" value="<?php echo $personaEditar['id'] ?>">
<label for="nombre">Nombre:</label>
<input type="text" name="nombre" id="nombre" value="<?php echo $personaEditar['nombre'] ?>">
<br>
<label for="dni">DNI:</label>
<input type="text" name="dni" id="dni" value="<?php echo $personaEditar['dni'] ?>">
<br>
<label for="foto">Foto:</label>
<input type="file" name="foto" id="foto">
<br>
<input type="submit" name="action" value="Actualizar">
</form>
<?php endif; ?>
En este caso, se muestra el formulario de edición de una persona si la variable $accion tiene el valor "editar". La estructura de control <?php if ($accion === 'editar'): ?> se cierra con <?php endif; ?>. Dentro de la estructura de control se encuentra el formulario HTML para editar los datos de una persona, que muestra los valores actuales de la persona a editar en los campos correspondientes y envía los datos del formulario a través del método POST al script de controlador index.php. El ID de la persona a editar se envía como un campo oculto.
jose fernandez
<?php if ($accion === 'ELIMINAR'): ?>
Si quieres incluir la lógica para mostrar el mensaje de confirmación de eliminación de una persona, podrías hacerlo usando la siguiente estructura de control:
php
Copy code
<?php if ($accion === 'eliminar'): ?>
<h2>Eliminar Persona</h2>
<p>¿Está seguro que desea eliminar la persona "<?php echo $personaEliminar['nombre'] ?>"?</p>
<form action="index.php" method="post">
<input type="hidden" name="id" value="<?php echo $personaEliminar['id'] ?>">
<input type="submit" name="action" value="Confirmar">
<a href="index.php">Cancelar</a>
</form>
<?php endif; ?>
En este caso, se muestra el mensaje de confirmación de eliminación de una persona si la variable $accion tiene el valor "eliminar". La estructura de control <?php if ($accion === 'eliminar'): ?> se cierra con <?php endif; ?>. Dentro de la estructura de control se muestra un mensaje de confirmación que incluye el nombre de la persona a eliminar y un formulario HTML que envía el ID de la persona a eliminar y la acción "Confirmar" a través del método POST al script de controlador index.php. Además, se incluye un enlace para cancelar la eliminación y volver a la lista de personas.
PARTE 2
CREAR TABLA PERSONAS
CON NOMBRE DNI Y FOTO crear sentencia
INSERT SQL CON PHP MYSQL METODO PDO FETCH API JSON y con PATRON DISEÑO MVC
Para crear la tabla
"personas" con los campos "nombre", "dni" y
"foto", la sentencia SQL sería la siguiente:
sql
Copy code
CREATE TABLE personas (
id INT(11) NOT
NULL AUTO_INCREMENT PRIMARY KEY,
nombre
VARCHAR(255) NOT NULL,
dni
VARCHAR(10) NOT NULL,
foto VARCHAR(255) DEFAULT NULL
);
Para insertar datos
en la tabla utilizando PHP, MySQL y PDO, se puede utilizar el siguiente código:
php
Copy code
<?php
// Conexión a la
base de datos
$dsn =
'mysql:host=localhost;dbname=nombre_de_la_bd';
$usuario =
'usuario';
$password = 'contraseña';
try {
$conexion =
new PDO($dsn, $usuario, $password);
} catch
(PDOException $e) {
echo 'Error al conectarse a la base de
datos: ' . $e->getMessage();
exit;
}
// Datos a insertar
$nombre = 'Juan
Pérez';
$dni = '12345678A';
$foto =
'ruta/de/la/foto.jpg';
// Sentencia SQL
$sql = 'INSERT INTO
personas (nombre, dni, foto) VALUES (:nombre, :dni, :foto)';
$consulta =
$conexion->prepare($sql);
$consulta->bindParam(':nombre',
$nombre);
$consulta->
jose fernandez
CREAR TABLA PERSONAS
CON NOMBRE DNI Y FOTO crear sentencia
INSERT SQL CON PHP MYSQL METODO PDO FETCH API JSON y con PATRON DISEÑO MVC incluir formularios
Para crear la tabla
"personas" con los campos "nombre", "dni" y
"foto", la sentencia SQL sería la siguiente:
sql
Copy code
CREATE TABLE personas (
id INT(11) NOT
NULL AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255)
NOT NULL,
dni
VARCHAR(10) NOT NULL,
foto VARCHAR(255) DEFAULT NULL
);
Para insertar datos
en la tabla utilizando PHP, MySQL y PDO, se puede utilizar el siguiente código:
php
Copy code
<?php
// Conexión a la
base de datos
$dsn = 'mysql:host=localhost;dbname=nombre_de_la_bd';
$usuario =
'usuario';
$password = 'contraseña';
try {
$conexion =
new PDO($dsn, $usuario, $password);
} catch
(PDOException $e) {
echo 'Error al conectarse a la base de
datos: ' . $e->getMessage();
exit;
}
// Si se ha enviado
el formulario, se procesa
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Datos a insertar
$nombre = $_POST['nombre'];
$dni = $_POST['dni'];
$foto = $_FILES['foto']['name'];
$ruta_foto = $_FILES['foto']['tmp_name'];
// Se mueve la foto al directorio de
imágenes
move_uploaded_file($ruta_foto,
'imagenes/' . $foto);
// Sentencia SQL
$sql = 'INSERT INTO personas (nombre, dni,
foto) VALUES (:nombre, :dni, :foto)';
$consulta = $conexion->prepare($sql);
$consulta->bindParam(':nombre',
$nombre);
$consulta->bindParam(':dni', $dni);
$consulta->bindParam(':foto', $foto);
$consulta->execute();
}
?>
<!-- Formulario HTML -->
<form method="post"
enctype="multipart/form-data">
<label
for="nombre">Nombre:</label>
<input type="text"
name="nombre" id="nombre">
<label
for="dni">DNI:</label>
<input
type="text" name="dni" id="dni">
<label
for="foto">Foto:</label>
<input type="file"
name="foto" id="foto">
<button
type="submit">Guardar</button>
</form>
Para mostrar los
datos de la tabla utilizando PHP, MySQL y PDO, se puede utilizar el siguiente
código:
php
Copy code
<?php
// Conexión a la
base de datos
$dsn =
'mysql:host=localhost;dbname=nombre_de_la_bd';
$usuario =
'usuario';
$password = 'contraseña';
try {
$conexion =
new PDO($dsn, $usuario, $password);
} catch
(PDOException $e) {
echo 'Error al conectarse a la base de
datos: ' . $e->getMessage();
exit;
}
// Sentencia SQL
$sql = 'SELECT * FROM personas';
$consulta =
$conexion->prepare($sql);
$consulta->execute();
$personas =
$consulta->fetchAll(PDO::FETCH_ASSOC);
// Se convierte el
array a formato JSON
$json_personas =
json_encode($personas);
?>
<!-- Se muestra
la tabla con los datos -->
<table>
<thead>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>DNI</th>
<th>Foto</th>
</tr>
</thead>
<tbody>
<?php
foreach ($personas as $persona): ?>
<tr>
<td><?php echo
$persona['id']; ?></td>
<td><?php echo
$persona['nombre'];
jose fernandez
hazme Para mostrar
los datos de la tabla utilizando PHP, MySQL y PDO, se puede utilizar el
siguiente código
Para mostrar los
datos de la tabla "personas" utilizando PHP, MySQL y PDO, se puede
utilizar el siguiente código:
php
Copy code
<?php
// Conexión a la
base de datos
$dsn =
'mysql:host=localhost;dbname=nombre_de_la_bd';
$usuario =
'usuario';
$password = 'contraseña';
try {
$conexion =
new PDO($dsn, $usuario, $password);
} catch
(PDOException $e) {
echo 'Error al conectarse a la base de
datos: ' . $e->getMessage();
exit;
}
// Sentencia SQL
$sql = 'SELECT * FROM personas';
$consulta =
$conexion->prepare($sql);
$consulta->execute();
$personas =
$consulta->fetchAll(PDO::FETCH_ASSOC);
// Se muestran los
datos en una tabla
echo '<table>';
echo '<thead>';
echo '<tr>';
echo '<th>ID</th>';
echo '<th>Nombre</th>';
echo '<th>DNI</th>';
echo '<th>Foto</th>';
echo '</tr>';
echo
'</thead>';
echo
'<tbody>';
foreach ($personas
as $persona) {
echo '<tr>';
echo '<td>' . $persona['id'] .
'</td>';
echo '<td>' . $persona['nombre'] .
'</td>';
echo '<td>' . $persona['dni'] .
'</td>';
echo '<td>' . ($persona['foto'] ?
'<img src="imagenes/' . $persona['foto'] . '">' : '') .
'</td>';
echo '</tr>';
}
echo
'</tbody>';
echo
'</table>';
?>
Este código realiza
una consulta a la tabla "personas" y recupera los datos utilizando el
método fetchAll() con la opción PDO::FETCH_ASSOC, que devuelve un array
asociativo con los datos de la consulta. Luego, se recorre este array con un
bucle foreach y se muestran los datos en una tabla HTML, incluyendo la imagen
si se ha especificado una en la columna "foto".
jose fernandez
haz formulario para editar
mas codigo api json
Aquí te muestro un
ejemplo de cómo podrías implementar un formulario para editar los datos de una
persona utilizando PHP, MySQL, PDO, Fetch API y JSON:
HTML:
html
Copy code
<form id="form-persona">
<input
type="hidden" name="id" id="id">
<div>
<label
for="nombre">Nombre:</label>
<input type="text"
name="nombre" id="nombre">
</div>
<div>
<label
for="dni">DNI:</label>
<input
type="text" name="dni" id="dni">
</div>
<div>
<label
for="foto">Foto:</label>
<input type="file"
name="foto" id="foto">
</div>
<button
type="submit">Guardar cambios</button>
</form>
JavaScript:
javascript
Copy code
const formPersona =
document.getElementById('form-persona');
// Función que carga
los datos de la persona a editar
function
cargarDatosPersona(id) {
fetch(`obtener_persona.php?id=${id}`)
.then(response => response.json())
.then(persona => {
formPersona.id.value = persona.id;
formPersona.nombre.value =
persona.nombre;
formPersona.dni.value = persona.dni;
});
}
// Función que envía
los datos actualizados de la persona al servidor
function
guardarCambiosPersona() {
const formData = new FormData(formPersona);
fetch('guardar_cambios_persona.php', {
method: 'POST',
body: formData
})
.then(response
=> response.json())
.then(response
=> {
if
(response.ok) {
alert('Cambios guardados correctamente');
} else {
alert('Error al guardar cambios');
}
});
}
// Se captura el
evento submit del formulario
formPersona.addEventListener('submit', event => {
event.preventDefault();
guardarCambiosPersona();
});
// Se carga los
datos de la persona a editar
cargarDatosPersona(1);
// Se debe reemplazar 1 por el ID de la persona a editar
PHP (obtener_persona.php):
php
Copy code
<?php
$dsn =
'mysql:host=localhost;dbname=nombre_de_la_bd';
$usuario =
'usuario';
$password =
'contraseña';
// Se recupera el ID
de la persona a editar
$id = $_GET['id'];
try {
$conexion =
new PDO($dsn, $usuario, $password);
} catch
(PDOException $e) {
echo json_encode(['error' => 'Error al
conectarse a la base de datos']);
exit;
}
// Se consulta la
persona a editar
$sql = 'SELECT * FROM personas WHERE id = :id';
$consulta = $conexion->prepare($sql);
$consulta->bindValue(':id', $id, PDO::PARAM_INT);
$consulta->execute();
$persona = $consulta->fetch(PDO::FETCH_ASSOC);
if (!$persona) {
echo json_encode(['error' => 'Persona no
encontrada']);
exit;
}
echo
json_encode($persona);
PHP
(guardar_cambios_persona.php):
php
Copy code
<?php
$dsn =
'mysql:host=localhost;dbname=nombre_de_la_bd';
$usuario =
'usuario';
$password = 'contraseña';
try {
$conexion =
new PDO($dsn, $usuario, $password);
} catch
(PDOException $e) {
echo json_encode(['ok' => false]);
exit;
}
// Se recuperan los
datos actualizados de la persona
$id = $_POST['id'];
$nombre = $_POST['nombre'];
$dni =
$_POST['dni'];
//
jose fernandez
haz solo PHP
(guardar_cambios_persona.php)
Aquí te muestro el
código PHP para guardar los cambios de una persona en la base de datos
utilizando PDO, JSON y el patrón de diseño MVC:
php
Copy code
<?php
// Se importa el
modelo de la persona
require_once 'modelo/persona.php';
// Se comprueba si
se ha enviado el formulario
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Se recuperan los datos del formulario
$id = $_POST['id'];
$nombre =
$_POST['nombre'];
$dni = $_POST['dni'];
// Se crea un objeto persona con los datos
actualizados
$persona = new Persona();
$persona->setId($id);
$persona->setNombre($nombre);
$persona->setDni($dni);
// Se actualiza la persona en la base de
datos
$resultado = $persona->actualizar();
// Se devuelve la respuesta en formato JSON
echo json_encode(['ok' => $resultado]);
} else {
// Si no se ha enviado el formulario, se
redirige a la página principal
header('Location: index.php');
exit;
}
En este código, se
importa el modelo de la persona y se comprueba si se ha enviado el formulario
por el método POST. Si se ha enviado, se recuperan los datos del formulario y
se crea un objeto persona con los datos actualizados. Luego, se llama al método
actualizar del objeto persona, que actualiza los datos en la base de datos y
devuelve un valor booleano que indica si la actualización se realizó correctamente.
Finalmente, se devuelve la respuesta en formato JSON. Si no se ha enviado el
formulario, se redirige a la página principal.
jose fernandez
guardar_cambios_persona.php
sin mvc
Claro, aquí te
muestro el código PHP para guardar los cambios de una persona en la base de
datos utilizando PDO y JSON sin el patrón de diseño MVC:
php
Copy code
<?php
// Se recuperan los
datos del formulario
$id = $_POST['id'];
$nombre = $_POST['nombre'];
$dni =
$_POST['dni'];
// Se establece la
conexión a la base de datos
$dsn =
'mysql:host=localhost;dbname=nombre_de_la_base_de_datos';
$usuario =
'usuario';
$contraseña =
'contraseña';
try {
$conexion = new PDO($dsn, $usuario,
$contraseña);
} catch
(PDOException $e) {
die('Error al conectarse a la base de datos:
' . $e->getMessage());
}
// Se prepara la
consulta para actualizar la persona en la base de datos
$sql = 'UPDATE
personas SET nombre = :nombre, dni = :dni WHERE id = :id';
$consulta =
$conexion->prepare($sql);
// Se ejecuta la
consulta con los datos actualizados
$consulta->execute([
'nombre' => $nombre,
'dni' => $dni,
'id' => $id,
]);
// Se devuelve la
respuesta en formato JSON
echo
json_encode(['ok' => true]);
En este código, se
recuperan los datos del formulario y se establece la conexión a la base de datos
utilizando PDO. Luego, se prepara la consulta para actualizar la persona en la
base de datos utilizando los datos actualizados del formulario. Se ejecuta la
consulta y se devuelve la respuesta en formato JSON.
jose fernandez
haz para eliminar
registro y foto
Claro, aquí te
muestro el código PHP para eliminar un registro de una persona y su foto en la
base de datos utilizando PDO y JSON:
php
Copy code
<?php
// Se comprueba si
se ha enviado el formulario
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Se recuperan los datos del formulario
$id = $_POST['id'];
// Se establece la conexión a la base de
datos
$dsn =
'mysql:host=localhost;dbname=nombre_de_la_base_de_datos';
$usuario = 'usuario';
$contraseña = 'contraseña';
try {
$conexion = new PDO($dsn, $usuario,
$contraseña);
} catch (PDOException $e) {
die('Error al conectarse a la base de
datos: ' . $e->getMessage());
}
// Se obtiene la ruta de la foto de la
persona
$sql = 'SELECT foto FROM personas WHERE
id = :id';
$consulta = $conexion->prepare($sql);
$consulta->execute(['id' => $id]);
$foto = $consulta->fetchColumn();
// Se elimina la persona de la base de datos
$sql = 'DELETE FROM personas WHERE id =
:id';
$consulta = $conexion->prepare($sql);
$consulta->execute(['id' => $id]);
// Se elimina la foto de la persona del
servidor
if ($foto !== null) {
unlink($foto);
}
// Se devuelve la respuesta en formato JSON
echo json_encode(['ok' => true]);
} else {
// Si no se ha enviado el formulario, se
redirige a la página principal
header('Location: index.php');
exit;
}
En este código, se
comprueba si se ha enviado el formulario por el método POST. Si se ha enviado,
se recuperan los datos del formulario y se establece la conexión a la base de
datos utilizando PDO. Luego, se obtiene la ruta de la foto de la persona y se
elimina la persona de la base de datos. Si la persona tiene una foto asociada,
se elimina la foto del servidor utilizando la función unlink(). Finalmente, se
devuelve la respuesta en formato JSON. Si no se ha enviado el formulario, se
redirige a la página principal.
jose fernandez
guardar_cambios_persona.php
sin mvc pero le falto modificar la foto de la carpeta
¡Cierto! Para
modificar la foto de la carpeta, puedes agregar el siguiente código en el
archivo guardar_cambios_persona.php:
php
Copy code
<?php
// Se recuperan los
datos del formulario
$id = $_POST['id'];
$nombre = $_POST['nombre'];
$dni = $_POST['dni'];
$foto =
$_FILES['foto'];
// Se establece la
conexión a la base de datos
$dsn =
'mysql:host=localhost;dbname=nombre_de_la_base_de_datos';
$usuario =
'usuario';
$contraseña =
'contraseña';
try {
$conexion = new PDO($dsn, $usuario,
$contraseña);
} catch
(PDOException $e) {
die('Error al conectarse a la base de datos:
' . $e->getMessage());
}
// Se prepara la
consulta para actualizar la persona en la base de datos
$sql = 'UPDATE
personas SET nombre = :nombre, dni = :dni WHERE id = :id';
$consulta = $conexion->prepare($sql);
// Se ejecuta la
consulta con los datos actualizados
$consulta->execute([
'nombre' => $nombre,
'dni' => $dni,
'id' => $id,
]);
// Se comprueba si
se ha subido una nueva foto
if ($foto['error'] === UPLOAD_ERR_OK) {
// Se obtiene la extensión de la foto
$extension = pathinfo($foto['name'],
PATHINFO_EXTENSION);
// Se genera un nombre único para la foto
$nombre_foto = uniqid('foto_') . '.' .
$extension;
// Se mueve la foto a la carpeta de fotos
move_uploaded_file($foto['tmp_name'],
'fotos/' . $nombre_foto);
// Se actualiza el registro de la persona en
la base de datos con el nombre de la nueva foto
$sql = 'UPDATE personas SET foto = :foto
WHERE id = :id';
$consulta = $conexion->prepare($sql);
$consulta->execute(['foto' => 'fotos/'
. $nombre_foto, 'id' => $id]);
// Se elimina la foto anterior de la carpeta
de fotos, si existe
$sql = 'SELECT foto FROM personas WHERE
id = :id';
$consulta =
$conexion->prepare($sql);
$consulta->execute(['id'
=> $id]);
$fila =
$consulta->fetch(PDO::FETCH_ASSOC);
$foto_anterior = $fila['foto'];
if ($foto_anterior !== null) {
unlink($foto_anterior);
}
}
// Se devuelve la
respuesta en formato JSON
echo
json_encode(['ok' => true]);
En este código, se
agrega el código necesario para actualizar la foto de la persona en la carpeta
de fotos. Primero, se comprueba si se ha subido una nueva foto. Si se ha
subido, se obtiene la extensión de la foto, se genera un nombre único para la
foto y se mueve la foto a la carpeta de fotos. Luego, se actualiza el registro
de la persona en la base de datos con el nombre de la nueva foto. Si la persona
ya tenía una foto anterior, se elimina la foto anterior de la carpeta de fotos
utilizando la función unlink(). Finalmente, se devuelve la respuesta en formato
JSON.
Comentarios
Publicar un comentario