diff --git a/Practicas/Practicas_PHP/UF1844_alumnos.zip b/Practicas/Practicas_PHP/UF1844_alumnos.zip
new file mode 100644
index 0000000..fd0035d
Binary files /dev/null and b/Practicas/Practicas_PHP/UF1844_alumnos.zip differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/Examen_UF1844_xx.html b/Practicas/Practicas_PHP/ejercicios/examen/Examen_UF1844_xx.html
new file mode 100644
index 0000000..e5f8505
--- /dev/null
+++ b/Practicas/Practicas_PHP/ejercicios/examen/Examen_UF1844_xx.html
@@ -0,0 +1,123 @@
+
+
+
+
+ Examen_UF1844
+
+
+
+
+
+
+
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/Examen_practico_UF1844_24.pdf b/Practicas/Practicas_PHP/ejercicios/examen/Examen_practico_UF1844_24.pdf
new file mode 100644
index 0000000..4f7354c
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/Examen_practico_UF1844_24.pdf differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_deLucas.jpg b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_deLucas.jpg
new file mode 100644
index 0000000..ba2fe40
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_deLucas.jpg differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_deMaria.jpg b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_deMaria.jpg
new file mode 100644
index 0000000..ba2fe40
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_deMaria.jpg differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_deMario.jpg b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_deMario.jpg
new file mode 100644
index 0000000..ba2fe40
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_deMario.jpg differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco.jpg b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco.jpg
new file mode 100644
index 0000000..aa049e4
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco.jpg differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco.pdf b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco.pdf
new file mode 100644
index 0000000..fc513d1
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco.pdf differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_gif.gif b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_gif.gif
new file mode 100644
index 0000000..0054c4b
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_gif.gif differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_grande.jpg b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_grande.jpg
new file mode 100644
index 0000000..0c1c9d3
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_grande.jpg differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_grande.pdf b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_grande.pdf
new file mode 100644
index 0000000..86d5847
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_grande.pdf differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_pequeno.jpg b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_pequeno.jpg
new file mode 100644
index 0000000..a3a35cf
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_pequeno.jpg differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_png.png b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_png.png
new file mode 100644
index 0000000..d2e06cb
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaco_png.png differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaolo.jpg b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaolo.jpg
new file mode 100644
index 0000000..ba2fe40
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/archivos_prueba/dni_dePaolo.jpg differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/buscador_alquileres.php b/Practicas/Practicas_PHP/ejercicios/examen/buscador_alquileres.php
new file mode 100644
index 0000000..b2b8ce9
--- /dev/null
+++ b/Practicas/Practicas_PHP/ejercicios/examen/buscador_alquileres.php
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Busqueda y eliminacion de registros
+
+
+
+
+ *Término a buscar:
+
+
+
+
+
+
+ 0) {
+ echo "
+
+
+ Id Alquiler
+ Nombre
+ Correo
+ Telefono
+ Fecha de Inicio
+ Fecha de Alquiler
+ Duracion
+ Tipo Vehiculo
+ Acciones
+ ";
+ foreach ($registros as $registro) {
+ $campos = explode("/_/", $registro);
+ echo "";
+ foreach ($campos as $campo) {
+ echo " $campo ";
+ }
+ echo "" . genButtonDel($campos[0]) . " ";
+ echo " ";
+ }
+ echo " ";
+ echo "
";
+ } else {
+ echo "
No se han encontrado registros con los terminos indicados ";
+ }
+ }
+
+ function genButtonDel($idReserva)
+ {
+ return "
+
+
+ ";
+ }
+ ?>
+
+
+
+
+
+ *ID de reserva para borrar:
+
+
+
+
+
+ ";
+ echo "Actuaciones sobre el registro: $idReserva ";
+ echo eliminaDeLista($idReserva) ?
+ "Se ha encontrado el registro en el archivo y se ha eliminado
" :
+ "No se encontro el registro especificado en el archivo
";
+ echo eliminaRegistro($idReserva) ?
+ "Se ha eliminado correctamente el registro de reserva
" :
+ "No se ha encontrado el registro de reserva especificado";
+ echo eliminaUpload($idReserva) ?
+ "Se ha eliminado el documento almacenado con el registro
" :
+ "No se ha encontrado documentos asociados al registro
";
+ echo "";
+ }
+ unset($_POST);
+ }
+
+ function eliminaDeLista($idReserva)
+ {
+ $nombre_archivo = "listado_reservas.txt";
+ $flagEncontrado = false;
+ $registros = [];
+ $archivo = fopen($nombre_archivo, 'r');
+ while (($linea = fgets($archivo)) !== false) {
+ if (strpos($linea, $idReserva) === false) {
+ $registros[] = $linea;
+ } else {
+ $flagEncontrado = true;
+ }
+ }
+ fclose($archivo);
+ $res=file_put_contents($nombre_archivo, $registros);
+ return ($flagEncontrado && ($res!==false));
+ }
+
+ function eliminaRegistro($idReserva)
+ {
+ $dir_reservas = "alquileres/";
+ $nombre_archivo = "alquiler_" . "$idReserva.txt";
+ return file_exists($dir_reservas . $nombre_archivo) ?
+ unlink($dir_reservas . $nombre_archivo) :
+ false;
+ }
+
+ function eliminaUpload($idReserva)
+ {
+ $dir_uploads = "dni_clientes/";
+ $file = glob($dir_uploads . "*" . $idReserva . "*");
+ return (count($file) > 0) ? unlink($file[0]) : false;
+ }
+
+ ?>
+
+
+
+
\ No newline at end of file
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/buscador_alquileres.php.pdf b/Practicas/Practicas_PHP/ejercicios/examen/buscador_alquileres.php.pdf
new file mode 100644
index 0000000..c5e8dca
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/buscador_alquileres.php.pdf differ
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/caracteres.php b/Practicas/Practicas_PHP/ejercicios/examen/caracteres.php
new file mode 100644
index 0000000..8031d70
--- /dev/null
+++ b/Practicas/Practicas_PHP/ejercicios/examen/caracteres.php
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Reserva alquiler!!!
+
+
+
+
+ No se han recibido datos del formulario";
+ }
+
+
+ // Función para recopilar datos del formulario y sanitizarlos
+ function recopilarDatosReserva($formulario, $campos)
+ {
+ $datos = [];
+ foreach ($campos as $campo) {
+ if (isset($_POST[$campo])) {
+ $datos[$campo] = $formulario[$campo];
+ } else {
+ $datos[$campo] = "";
+ }
+ }
+ return $datos;
+ }
+
+
+ // Función para procesar la reserva
+ function procesarReserva($datosReserva)
+ {
+ // Variables para el resultado del procesamiento
+ $exito = true;
+ $msgExito = [];
+ $msgError = [];
+
+ $dias = $datosReserva['dias'];
+ $fecha_inicio = $datosReserva['fecha_inicio'];
+ $tipo = $datosReserva['tipo'];
+ $silla = $datosReserva['silla'] ? "Seleccionado" : "No seleccionado";
+ $gps = $datosReserva['gps'] ? "Seleccionado" : "No seleccionado";
+ $riesgo = $datosReserva['riesgo'] ? "Seleccionado" : "No seleccionado";
+ $menor = $datosReserva['menor'] ? "Seleccionado" : "No seleccionado";
+ $total = $datosReserva['total'];
+ $nombre = $datosReserva['nombre'];
+ $email = $datosReserva['email'];
+ $telefono = $datosReserva['telefono'];
+ $dni = $datosReserva['dni'];
+ $info = $datosReserva['info'];
+ $entrega = $datosReserva['entrega'];
+ $recargo = $datosReserva['recargo'];
+
+ // Generar identificador de reserva
+ $idReserva = time() . '_' . mt_rand(1000, 9999);
+ // Fecha de reserva
+ $fechaReserva = date("d-m-Y H:i:s");
+
+ $fichaReserva = "Id alquiler: $idReserva \r\n";
+ $fichaReserva .= "Fecha de alquiler: $fechaReserva \r\n";
+ $fichaReserva .= "Fecha de inicio: $fecha_inicio \r\n";
+ $fichaReserva .= "Tipo de coche: $tipo \r\n";
+ $fichaReserva .= "Gps: $gps \r\n";
+ $fichaReserva .= "Silla: $silla \r\n";
+ $fichaReserva .= "Todo riesgo: $riesgo \r\n";
+ $fichaReserva .= "Menor de 30: $menor \r\n";
+ $fichaReserva .= "Duración del alquiler: $dias \r\n";
+ $fichaReserva .= "Coste Total: $total \r\n";
+ $fichaReserva .= "Nombre: $nombre \r\n";
+ $fichaReserva .= "Correo electrónico: $email \r\n";
+ $fichaReserva .= "Teléfono: $telefono \r\n";
+ $fichaReserva .= "DNI: $dni \r\n";
+
+
+ // Enviar correo electrónico con los detalles de la reserva
+ $destinatario = "appasin04@gmail.com";
+ $asunto = "Informacion de reserva - $idReserva";
+ $headers = 'Reply-To: appasin04@gmail.com' . "\r\n";
+ $headers .= 'Bcc: ' . $email . "\r\n";
+ if (!mail($destinatario, $asunto, $fichaReserva, $headers)) {
+ $exito = false;
+ $msgError[] = "Error al enviar el correo electrónico.";
+ }
+
+
+ // Guardar la ficha de reserva en un archivo
+ $dir_reservas = "alquileres/";
+ !is_dir($dir_reservas) ? !mkdir($dir_reservas, 0777, true) : null;
+ $nombre_archivo = $dir_reservas . "alquiler_" . $idReserva . ".txt";
+ if (file_put_contents($nombre_archivo, $fichaReserva) === false) {
+ $exito = false;
+ $msgError[] = "Error al guardar la ficha de reserva.";
+ } else {
+ $msgExito[] = "Reserva de alquiler confirmada!!!! " .
+ "". nl2br($info) . "
" .
+ " Esta es la informacion detallada de tu reserva ! " . "" . nl2br($fichaReserva) . "
";
+ }
+
+ // Añadir al listado_reservas.txt una línea de reserva
+ $registroReserva = implode('/_/', [$idReserva, $nombre, $email, $telefono, $fecha_inicio, $fechaReserva, $dias, $tipo]) . "\r\n";
+ $nombre_archivo = "listado_reservas.txt";
+ if (file_put_contents($nombre_archivo, $registroReserva, FILE_APPEND | LOCK_EX) === false) {
+ $exito = false;
+ $msgError[] = "Error al guardar la lista de reservas.";
+ }
+
+ if (isset($_FILES['dni_archivo']) && $_FILES['dni_archivo']['error'] === UPLOAD_ERR_OK) {
+ $exitoUpload = true;
+ $dir_uploads = "dni_clientes/";
+ !is_dir($dir_uploads) ? !mkdir($dir_uploads, 0777, true) : null;
+ $nombreArchivo = implode("_", [$dni, $idReserva, $_FILES['dni_archivo']['name']]);
+ $extension_archivo = strtolower(pathinfo($_FILES["dni_archivo"]["name"], PATHINFO_EXTENSION));
+ $tamano_maximo = 1 * 1024 * 1024;
+ $extensiones_permitidas = array("jpg", "jpeg", "pdf");
+
+ if (!in_array($extension_archivo, $extensiones_permitidas)) {
+ $exitoUpload = false;
+ $exito = false;
+ $msgError[] = "El fichero no tiene una extension valida.";
+ }
+
+ if ($_FILES["dni_archivo"]["size"] > $tamano_maximo) {
+ $exitoUpload = false;
+ $exito = false;
+ $msgError[] = "El fichero excede el tamaño maximo (1Mb).";
+ }
+
+ if ($exitoUpload) {
+ if (move_uploaded_file($_FILES["dni_archivo"]["tmp_name"], $dir_uploads . $nombreArchivo)) {
+ $msgExito[] = "El fichero adjunto se almaceno correctamente ";
+ } else {
+ $exito = false;
+ $msgError[] = "Ocurrio un error al almacenar el fichero adjunto";
+ }
+ }
+ }
+
+ $resultado = [
+ 'exito' => $exito,
+ 'msgExito' => $msgExito,
+ 'msgError' => $msgError
+ ];
+ return $resultado;
+ }
+
+ function mostrarResultado($resultado)
+ {
+ echo "";
+ foreach ($resultado['msgExito'] as $key => $value) {
+ echo "
$value
";
+ }
+ if (!$resultado['exito']) {
+ echo "
Se han encontrado los siguientes problemas al procesar su solicitud: ";
+ echo "
";
+ foreach ($resultado['msgError'] as $key => $value) {
+ echo " $value ";
+ }
+ echo " ";
+ }
+ echo "
";
+ }
+
+ ?>
+
+
+
+
\ No newline at end of file
diff --git a/Practicas/Practicas_PHP/ejercicios/examen/recibeformulario_coches.php.pdf b/Practicas/Practicas_PHP/ejercicios/examen/recibeformulario_coches.php.pdf
new file mode 100644
index 0000000..ab5d872
Binary files /dev/null and b/Practicas/Practicas_PHP/ejercicios/examen/recibeformulario_coches.php.pdf differ