CRUD - ES6 API fetch foto nombre y apellido mysql pdo php json post
ES6 API fetch enviar
adjunto foto con nombre y apellido delete mysql pdo php json metodo post
Para enviar un
archivo adjunto (en este caso, una foto) con el nombre y apellido del usuario a
través de una solicitud POST utilizando el API Fetch de ES6 en JavaScript, y
eliminar esa foto en el servidor utilizando PHP, MySQL y PDO, puedes seguir los
siguientes pasos:
En tu archivo HTML,
debes tener un formulario que permita al usuario seleccionar una foto y
proporcionar su nombre y apellido. Aquí hay un ejemplo de cómo podría verse el
formulario:
python
Copy code
<form id="form"
enctype="multipart/form-data">
<input
type="text" name="nombre"
placeholder="Nombre">
<input type="text"
name="apellido" placeholder="Apellido">
<input
type="file" name="foto">
<button
type="submit">Enviar</button>
</form>
En tu archivo
JavaScript, debes agregar un event listener al formulario para escuchar el
evento "submit" y enviar una solicitud POST utilizando el API Fetch.
Para enviar una foto adjunta, debes usar un objeto FormData para crear una
solicitud multipart/form-data. Aquí hay un ejemplo de cómo podría verse el
código JavaScript:
javascript
Copy code
const form = document.getElementById('form');
form.addEventListener('submit', (event) => {
event.preventDefault();
const nombre = form.nombre.value;
const apellido = form.apellido.value;
const foto = form.foto.files[0];
const formData
= new FormData();
formData.append('nombre', nombre);
formData.append('apellido', apellido);
formData.append('foto', foto);
fetch('upload_photo.php', {
method:
'POST',
body:
formData
})
.then(response
=> response.json())
.then(data
=> console.log(data))
.catch(error => console.error(error));
});
Este código agrega
un event listener al formulario que escucha el evento "submit".
Cuando se envía el formulario, se obtienen los valores de los campos
"nombre", "apellido" y "foto". Luego, se crea un
objeto FormData y se agregan los valores de los campos al objeto. Finalmente,
se envía una solicitud POST a "upload_photo.php" con el objeto
FormData como cuerpo de la solicitud.
En el archivo
"upload_photo.php", se debe verificar que se recibe el nombre y
apellido del usuario y la foto adjunta. Luego, se debe conectar a la base de
datos y guardar la foto en el directorio "uploads" y también guardar
los detalles de la foto en la base de datos. Aquí hay un ejemplo de cómo podría
verse el archivo "upload_photo.php":
upload_photo.php
mostrar solo
Si solo quieres
mostrar el código del archivo upload_photo.php sin explicaciones, aquí te lo
dejo:
php
Copy code
<?php
if (!isset($_POST['nombre']) ||
!isset($_POST['apellido']) || !isset($_FILES['foto'])) {
die(json_encode(array('success' => false,
'message' => 'Falta información para guardar la foto')));
}
$nombre =
$_POST['nombre'];
$apellido =
$_POST['apellido'];
$foto =
$_FILES['foto'];
$dsn =
"mysql:host=nombre_del_servidor;dbname=nombre_de_la_base_de_datos";
$username =
"nombre_de_usuario";
$password =
"contraseña_del_usuario";
try {
$db = new
PDO($dsn, $username, $password);
} catch
(PDOException $e) {
die(json_encode(array('success' => false,
'message' => 'Error al conectar a la base de datos: ' . $e->getMessage())));
}
if ($foto['error'] == UPLOAD_ERR_OK) {
$ruta =
'uploads/';
$nombre_archivo = uniqid() . '_' .
$foto['name'];
$ruta_archivo = $ruta . $nombre_archivo;
move_uploaded_file($foto['tmp_name'], $ruta_archivo);
$query = "INSERT INTO fotos (nombre,
apellido, ruta) VALUES (?, ?, ?)";
$stmt = $db->prepare($query);
$stmt->execute(array($nombre, $apellido,
$ruta_archivo));
echo json_encode(array('success' => true,
'message' => 'La foto se guardó correctamente'));
} else {
echo json_encode(array('success' => false,
'message' => 'Error al guardar la foto'));
}
hacer con update fotos
Si deseas actualizar
una foto existente en la base de datos y en la carpeta de uploads, puedes
utilizar el siguiente código como base:
php
Copy code
<?php
if (!isset($_POST['id']) || !isset($_POST['nombre'])
|| !isset($_POST['apellido']) || !isset($_FILES['foto'])) {
die(json_encode(array('success' => false,
'message' => 'Falta información para actualizar la foto')));
}
$id = $_POST['id'];
$nombre = $_POST['nombre'];
$apellido =
$_POST['apellido'];
$foto =
$_FILES['foto'];
$dsn =
"mysql:host=nombre_del_servidor;dbname=nombre_de_la_base_de_datos";
$username =
"nombre_de_usuario";
$password =
"contraseña_del_usuario";
try {
$db = new
PDO($dsn, $username, $password);
} catch
(PDOException $e) {
die(json_encode(array('success' => false,
'message' => 'Error al conectar a la base de datos: ' .
$e->getMessage())));
}
// Obtenemos la foto
que queremos actualizar
$stmt =
$db->prepare("SELECT * FROM fotos WHERE id = ?");
$stmt->execute(array($id));
$foto_actual = $stmt->fetch(PDO::FETCH_ASSOC);
// Comprobamos que
la foto exista en la base de datos
if (!$foto_actual) {
die(json_encode(array('success' => false,
'message' => 'La foto que intenta actualizar no existe')));
}
// Si el usuario no
envía una nueva foto, utilizamos la foto actual
if ($foto['error']
== UPLOAD_ERR_NO_FILE) {
$ruta_archivo = $foto_actual['ruta'];
} else {
// Movemos la nueva foto a la carpeta de
uploads
if ($foto['error'] == UPLOAD_ERR_OK) {
$ruta = 'uploads/';
$nombre_archivo = uniqid() . '_' .
$foto['name'];
$ruta_archivo = $ruta . $nombre_archivo;
move_uploaded_file($foto['tmp_name'], $ruta_archivo);
} else {
die(json_encode(array('success' =>
false, 'message' => 'Error al subir la nueva foto')));
}
}
// Actualizamos la
información de la foto en la base de datos
$query =
"UPDATE fotos SET nombre = ?, apellido = ?, ruta = ? WHERE id =
?";
$stmt = $db->prepare($query);
$stmt->execute(array($nombre,
$apellido, $ruta_archivo, $id));
// Borramos la foto
anterior si ha sido actualizada
if ($foto['error']
!= UPLOAD_ERR_NO_FILE && file_exists($foto_actual['ruta'])) {
unlink($foto_actual['ruta']);
}
echo
json_encode(array('success' => true, 'message' => 'La foto se actualizó
correctamente'));
Este código asume
que tienes una columna llamada "id" en tu tabla "fotos", la
cual es única para cada foto. También asume que estás recibiendo el
"id" de la foto que deseas actualizar en la variable POST
"id". Además, cuando actualizas una foto, el código primero verifica
si el usuario ha enviado una nueva foto o no. Si no lo ha hecho, se utiliza la
foto actual en la base de datos. Si el usuario envía una nueva foto, la nueva
foto se carga en la carpeta de "uploads" y se actualiza la ruta en la
base de datos. Finalmente, se elimina la foto anterior si ha sido actualizada.
hacer con delete
fotos
Si deseas eliminar
una foto existente en la base de datos y en la carpeta de uploads, puedes
utilizar el siguiente código como base:
php
Copy code
<?php
if (!isset($_POST['id'])) {
die(json_encode(array('success' => false,
'message' => 'Falta información para eliminar la foto')));
}
$id = $_POST['id'];
$dsn =
"mysql:host=nombre_del_servidor;dbname=nombre_de_la_base_de_datos";
$username =
"nombre_de_usuario";
$password =
"contraseña_del_usuario";
try {
$db = new
PDO($dsn, $username, $password);
} catch
(PDOException $e) {
die(json_encode(array('success' => false,
'message' => 'Error al conectar a la base de datos: ' .
$e->getMessage())));
}
// Obtenemos la foto
que queremos eliminar
$stmt =
$db->prepare("SELECT * FROM fotos WHERE id = ?");
$stmt->execute(array($id));
$foto = $stmt->fetch(PDO::FETCH_ASSOC);
// Comprobamos que
la foto exista en la base de datos
if (!$foto) {
die(json_encode(array('success' => false,
'message' => 'La foto que intenta eliminar no existe')));
}
// Eliminamos la
foto de la carpeta de uploads
if (file_exists($foto['ruta'])) {
unlink($foto['ruta']);
}
// Eliminamos la
foto de la base de datos
$query = "DELETE FROM fotos WHERE id = ?";
$stmt = $db->prepare($query);
$stmt->execute(array($id));
echo
json_encode(array('success' => true, 'message' => 'La foto se eliminó
correctamente'));
Este código asume
que tienes una columna llamada "id" en tu tabla "fotos", la
cual es única para cada foto. También asume que estás recibiendo el
"id" de la foto que deseas eliminar en la variable POST
"id". Además, cuando se elimina una foto, el código primero verifica
si la foto existe en la base de datos y en la carpeta de "uploads".
Si es así, se elimina la foto de la carpeta de "uploads" y luego se
elimina la foto de la base de datos.
Comentarios
Publicar un comentario