Created
February 3, 2026 17:24
-
-
Save JCervantesB/be4b030d9fc9e3e4b7b34279fde05c4a to your computer and use it in GitHub Desktop.
Archivo crear.php Graciela.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| require '../../includes/app.php'; | |
| use App\Propiedad; | |
| $auth = estaAutenticado(); | |
| if (!$auth) { | |
| header('Location: /'); | |
| } | |
| //base de datos | |
| $db = conectarDB(); | |
| //consultar la bd para obtener los vendedores: | |
| $consulta = "SELECT * FROM vendedores"; | |
| $resultado = mysqli_query($db, $consulta); //responde la bd | |
| //arreglo con mensajes de errores: | |
| $errores = []; | |
| //a estas variables las iniciamos como un string vacío: | |
| //para que cuando se ejecute el request se envíen los | |
| //valores que estan en el post | |
| $titulo = ''; | |
| $precio = ''; | |
| $descripcion = ''; | |
| $habitaciones = ''; | |
| $wc = ''; | |
| $estacionamiento = ''; | |
| $vendedorId = ''; | |
| //para hacer todo eso en solo 1 y se accede a los valores: | |
| //ejecuta el codigo despues de que el usu envia el form | |
| if ($_SERVER['REQUEST_METHOD'] === 'POST') { | |
| $propiedad = new Propiedad($_POST); | |
| //debuguear($propiedad); | |
| debuguear($_FILES); | |
| //para no hacer todo lo anterior aplicamos mysqli al post | |
| //a estas variables le asignamos el contenido del post del form: | |
| $titulo = mysqli_real_escape_string($db, $_POST['titulo']); | |
| $precio = mysqli_real_escape_string($db, $_POST['precio']); | |
| $descripcion = mysqli_real_escape_string($db, $_POST['descripcion']); | |
| $habitaciones = mysqli_real_escape_string($db, $_POST['habitaciones']); | |
| $wc = mysqli_real_escape_string($db, $_POST['wc']); | |
| $estacionamiento = mysqli_real_escape_string($db, $_POST['estacionamiento']); | |
| $vendedorId = mysqli_real_escape_string($db, $_POST['vendedorId']); | |
| $creado = date('Y/m/d'); | |
| //asignar FILES hacia una variable: | |
| $imagen = $_FILES['imagen']; | |
| if (!$titulo) { //si el titulo no está completado en el form | |
| $errores[] = "Debes añadir un titulo"; | |
| } | |
| //esto hay que hacerlo para todos los campos: | |
| if (!$precio) { //si el titulo no está completado en el form | |
| $errores[] = "El precio es obligatorio"; | |
| } | |
| if (strlen($descripcion) < 50) { //si el titulo no está completado en el form | |
| $errores[] = "La descripción es obligatoria y debe contener al menos 50 caracteres"; | |
| } | |
| if (!$habitaciones) { //si el titulo no está completado en el form | |
| $errores[] = "El número de habitaciones es obligatorio"; | |
| } | |
| if (!$wc) { //si el titulo no está completado en el form | |
| $errores[] = "El número de baños es obligatorio"; | |
| } | |
| if (!$estacionamiento) { //si el titulo no está completado en el form | |
| $errores[] = "El número de lugares para estacionar es obligatorio"; | |
| } | |
| if (!$vendedorId) { //si el titulo no está completado en el form | |
| $errores[] = "Elige un vendedor"; | |
| } | |
| if (!$imagen['name'] || $imagen['error']) { | |
| $errores[] = 'La imagen es obligatoria'; | |
| } | |
| //validar por tamaño para que el usu no suba i muy grandes: | |
| //(1mb máximo) | |
| $medida = 1000 * 1000; //convierte de byte a bites | |
| if ($imagen['size'] > $medida) { | |
| $errores[] = 'La imagen es muy pesada'; | |
| } | |
| if (empty($errores)) { | |
| //subida de archivos: | |
| //crear una carpeta desde php: | |
| //hay que crearla en la raiz, hay que salir de prop y de adm | |
| $carpetaImagenes = '../../imagenes/'; | |
| if (!is_dir($carpetaImagenes)) { | |
| mkdir($carpetaImagenes); //cuando no haya errores y | |
| //no esté esa carpeta ya creada la crea a esa carpeta | |
| } | |
| //generar un nombre único para la i | |
| $nombreImagen = md5(uniqid(rand(), true)) . ".jpg"; | |
| //var_dump($nombreImagen); | |
| //subir la i | |
| move_uploaded_file($imagen['tmp_name'], $carpetaImagenes . $nombreImagen); | |
| //esto almacena una i temporalmente, según la que el usu cargue en | |
| //el formulario- aparece el A a la izq con la extensión jpg | |
| $propiedad->guardar(); | |
| exit; | |
| //insetar en la bd | |
| $query = " INSERT INTO propiedades (titulo, precio, imagen, descripcion, habitaciones, wc, estacionamiento, creado, vendedor) VALUES ('$titulo', '$precio', '$nombreImagen', '$descripcion', '$habitaciones', '$wc', '$estacionamiento', '$creado', '$vendedorId') "; | |
| //echo $query; esto es para probar si carga | |
| //para almacenarlo en la bd: | |
| $resultado = mysqli_query($db, $query); | |
| if ($resultado) { | |
| //echo "Insertado correctamente"; | |
| //en vez de imprimir hay que rediccionar al usu | |
| //para que no estén enviando varias entradas: | |
| header('Location: /admin?resultado=1'); | |
| //esto evita que el usu envie datos duplicados | |
| } | |
| } | |
| } | |
| //si recargamos arriba aparece toda la instancia de la conexión | |
| //$inicio = true; | |
| incluirTemplate('header'); | |
| ?> | |
| <main class="contenedor seccion"> | |
| <h1>Crear</h1> | |
| <a href="/admin" class="boton boton-verde">Volver</a> | |
| <!--para mostrar los errores:--> | |
| <?php foreach ($errores as $error): ?> | |
| <div class="alerta error"> | |
| <?php echo $error; ?> | |
| </div> | |
| <?php endforeach; ?> | |
| <form class="formulario" method="POST" action="/admin/propiedades/crear.php" enctype="multipart/form-data"> | |
| <fieldset> | |
| <legend>Información General</legend> | |
| <label for="titulo">Título:</label> | |
| <input type="text" id="titulo" name="titulo" placeholder="Título Propiedad" value="<?php echo $titulo ?>"> | |
| <label for="precio">Precio:</label> | |
| <input type="number" id="precio" name="precio" placeholder="Precio Propiedad" value="<?php echo $precio ?>"> | |
| <label for="imagen">Imagen:</label> | |
| <input type="file" id="imagen" accept="image/jpeg,image/png" name="imagen"> | |
| <label for="descripcion">Descripción:</label> | |
| <textarea id="descripcion" name="descripcion"><?php echo $descripcion ?></textarea> | |
| </fieldset> | |
| <fieldset> | |
| <legend>Información Propiedad</legend> | |
| <label for="habitaciones">Habitaciones:</label> | |
| <input type="number" id="habitaciones" name="habitaciones" placeholder="Ej.: 3" min="1" Max="9" value="<?php echo $habitaciones ?>"> | |
| <label for="wc">Baños:</label> | |
| <input type="number" id="wc" name="wc" placeholder="Ej.: 3" min="1" Max="9" value="<?php echo $wc ?>"> | |
| <label for="estacionamiento">Estacionamiento:</label> | |
| <input type="number" id="estacionamiento" name="estacionamiento" placeholder="Ej.: 3" min="1" Max="9" value="<?php echo $estacionamiento ?>"> | |
| <!--podemos seleccionar una cantidad del 1 al 9--> | |
| </fieldset> | |
| <fieldset> | |
| <legend>Vendedor</legend> | |
| <select name="vendedorId"> | |
| <option value="">--Seleccione--</option> | |
| <?php while ($row = mysqli_fetch_assoc($resultado)): ?> | |
| <!--este while nos va dando resultados mientras estén en la bd | |
| por éso agregamos los option--> | |
| <option <?php echo $vendedorId == $row['id'] ? 'selected' : ''; ?> value="<?php echo $row['id']; ?>"><?php echo $row['nombre'] . ' ' . $row['apellido']; ?></option> | |
| <?php endwhile; ?> | |
| </select> | |
| </fieldset> | |
| <input type="submit" value="Crear Propiedad" class="boton boton-verde"> | |
| </form> | |
| </main> | |
| <?php | |
| // include 'includes/templates/footer.php'; | |
| incluirTemplate('footer'); | |
| ?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment