# Día 9, proyecto Bienes Raíces: actualización Tenemos un listado de productos/propiedades y es posible que necesitemos actualizar la información, modificar las fotos, etc. ## Primeros pasos con la actualización La diferencia con crear es que tenemos que recoger los valores ya establecidos para permitir una modificación cómoda al usuario. Por lo que vamos a enlazar el botón actualizar de nuestro listado con el script admin/propiedades/actualizar.php. En admin/index.php modificamos esta línea: ` <a class="boton-amarillo-block" href="./propiedades/actualizar.php">Actualizar</a>` Y en actualizar.php por lo pronto, copiamos todo el código del crear.php, va a ser casi igual salvo que comenzaremos cargando los datos ya presentes en la bd. Cambia el h1 de Crear a Actualizar, y el botón del formulario para que en lugar de decir "Crear propiedad" diga "Actualizar propiedad". Tenemos que rellenar los valores con los de la propiedad seleccionada para la actualización. Para ello basta con tomar el id de la propiedad seleccionada en el indes.php y pasar el dato a actualizar.php, ya sabes cómo hacerlo así que...hazlo! Una vez realizada la modificación tendremos una url como la que sigue: http://localhost:3000/admin/propiedades/actualizar.php?id=1 Por lo que podemos recuperar el registro con id=1 (o el que sea), mostrar los datos y dejarlos listos para una fácil modificación. Pero primero nos faltaría validar que dicha url tenga un entero y en caso de que no sea un valor válido por ahora simplemente lo redirijimos al index del admin. Añadimos lo siguiente en actualizar.php ``` //comprobamos id válido $id=$_GET['id']; $id= filter_var($id, FILTER_VALIDATE_INT); if (!$id){ header('Location: /admin'); } ``` ## Prerrellenar los datos de la propidedad seleccionada Vamos a traer los datos de la propiedad seleccionada, de nuevo en actualizar.php, te doy los pasos, escribe el código: ``` //crear la consulta para obtener los datos de la propiedad con el id indicado //guardar el resultado de la consulta //guardar la propiedad concreta con el id en un array asociativo ``` Una vez recuparada la propiedad con el id seleccionado podemos inicializar todos los campos del formulario con estos valores, ahora mismo en "Crear" se inicializaban a vacío, cómo debes modificar esto para que se muestren los datos concretos de la propiedad? ``` //inicializando variables para guardar en el formulario $titulo= ''; $precio= ''; $descripcion= ''; $habitaciones= ''; $wc= ''; $estacionamiento=''; $vendedores_id= ''; ``` Ahora al entrar en actualizar deberían mostrarse los datos de la propiedad seleccionada. No es buena idea que rellenes el campo imagen (no se debe dar información sobre la ubicación real de las imágenes) pero sí podemos mostrar la imagen y dejar actualizarla. Escribe el código necesario para hacer esta modificación. ## Actualizando la propiedad Como ya vas cogiendo las dinámicas de cómo se trabaja en php estoy segura de que podrás modificar el query que teníamos para la creación de tal manera de que inserte los campos modificados en la bd. ``` $query="INSERT INTO propiedades (titulo, precio, imagen, descripcion, habitaciones,wc,estacionamiento, creado, vendedores_id) VALUES ('$titulo', '$precio', '$nombreImagen','$descripcion', '$habitaciones','$wc','$estacionamiento','$creado', '$vendedores_id')"; ``` Modifica y comprueba que se actualiza correctamente todo(menos las imágenes que ya veremos cómo se realiza) También nos ha faltado una modificación importante en el submit del formulario...momento de arreglarlo. Las validaciones siguen siendo las mismas salvo...hace falta tener un campo imagen? ## Eliminar la imagen anterior en caso de subir una nueva Añadimos el campo imagen al query del update y vemos que funciona todo correctamente, el único problema es que se van quedando en el servidor imágenes que ya no estamos usando, así que vamos a hacer algo para borrar las imágenes que ya no se usan. Lo que hacemos es que en caso de que en el formulario se haya incluido una nueva imagen borramos la que ya existía, se hace como sigue: ``` // sustituir la imagen si se incluye una nueva y si es vacío dejar el valor tal y como estaba $nombreImagen=""; if ($imagen['name']) { unlink($carpetaImagenes.$propiedad['imagen']); //Generar nombre único $nombreImagen=md5(uniqid(rand(),true)).".jpg"; //subir archivo move_uploaded_file($imagen['tmp_name'], $carpetaImagenes . $nombreImagen); } else { $nombreImagen=$propiedad['imagen']; } ``` Decide dónde es conveniente insertar este código.