Skip to content

Instantly share code, notes, and snippets.

@JCervantesB
Last active October 6, 2022 16:06
Show Gist options
  • Save JCervantesB/2502b54c4478bdb140f77756543aa311 to your computer and use it in GitHub Desktop.
Save JCervantesB/2502b54c4478bdb140f77756543aa311 to your computer and use it in GitHub Desktop.
Bienes Raíces Carmen Bazán
<?php
require '../../includes/app.php';
//Importamos la clase
use App\Propiedad;
//Autenticamos usuario
estaAutenticado();
//Conectar
$db = conectarDB();
//Consultar para obtener los vendedores
$consulta = "SELECT * FROM vendedores";
$resultado = mysqli_query($db, $consulta);
//Arreglo de errores
$errores = [];
$titulo = '';
$precio = '';
$descripcion = '';
$habitaciones = '';
$wc = '';
$estacionamiento ='';
$vendedorId= '';
//Estamos diciendo que si el metodo es igual a post solo mostrara los datos cuando los introduzcamos
//Ejecuta el codigo despues de que usuario envia los datos
if($_SERVER['REQUEST_METHOD'] === 'POST'){
/*echo "<pre>";
var_dump($_POST);
echo "</pre>"; */
//Creamos una nueva propiedad
$propiedad = new Propiedad($_POST);
//Esta instancia que hemos creado vamoss a llamar al metodo guardar
$propiedad->guardar();
/* echo "<pre>";
var_dump($_FILES);
echo "</pre>"; */
//mysqli_real_escape_string esta nos ayudara a que los usuario si introducen un formato mal pueda recitificarlo
$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'];
//var_dump($imagen);
//Validamos los campos y si no tiene nada muestre el error
if(!$titulo){
$errores[] = "Debes añadir un titulo";
}
if(!$precio){
$errores[] = "El precio es obligatorio";
}
if(strlen ($descripcion) < 50 ){
$errores[] = "La descripcion es obligatoria y debe tener al menos 50 caracteres";
}
if(!$habitaciones){
$errores[] = "El número de habitaciones es obligatorio";
}
if(!$habitaciones){
$errores[] = "El número de habitaciones es obligatorio";
}
if(!$wc){
$errores[] = "El número de baños es obligatorio";
}
if(!$estacionamiento){
$errores[] = "El número de estacionamiento es obligatorio";
}
if(!$vendedorId){
$errores[] = "Elige un vendedor";
}
if(!$imagen['name'] || $imagen['error']) {
$errores[] = 'La imagen es obligatoria';
}
//Validamos por tamaño (1 MB maximo)
$media = 1000 * 1000;
if($imagen['size'] > $media){
$errores[] = 'La imagen es muy pesada';
}
/* echo "<pre>";
var_dump($errores);
echo "</pre>"; */
//Revisar que el array de errores este vacio
if(empty($errores)){
/*SUBIDAS DE ARCHIVOS*/
//Crear una carpeta
$carpetaImagenes = '../../imagenes/';
if(!is_dir($carpetaImagenes)){
mkdir($carpetaImagenes);
}
//Generar in nombre unico
/*MD5 un metodo para crear nombres aleatorio pero estatico y con uniqid se crearan de forma dinamica*/
$nombreImagen = md5( uniqid ( rand(), true) ) . ".jpg";
//Subir la imagen
move_uploaded_file($imagen['tmp_name'], $carpetaImagenes . $nombreImagen);
//echo $query;
//$resultado = mysqli_query($db, $query);
if($resultado){
//Redireccionar al usuario
header('Location: /bienesraicesPHP/admin/index.php?resultado=1');
}
}
}
//Incluimos los template con funciones
incluirTemplate('header');
?>
<main class="contenedor seccion">
<h2>Crear</h2>
<?php foreach($errores as $error): ?>
<div class="alerta error">
<?php echo $error; ?>
</div>
<?php endforeach; ?>
<form action="crear.php" class="formulario" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>Información General</legend>
<label for="titulo">Titulo:</label>
<input type="text" id="titulo" name="titulo" placeholder="Titulo 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="descripción">Descripción:</label>
<textarea id="descripcion" name="descripcion" cols="30" rows="10"><?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;?>">
</fieldset>
<fieldset>
<legend>Vendedor</legend>
<select name="vendedorId">
<option value="">--Seleccione--</option>
<?php while ($vendedor = mysqli_fetch_assoc($resultado)) : ?>
<option <?php echo $vendedorId === $vendedor['id'] ? 'selected' : ''; ?> value="<?php echo $vendedor['id']; ?>"> <?php echo $vendedor['nombre'] . " " . $vendedor['apellido']; ?> </option>
<?php endwhile; ?>
</select>
</fieldset>
<input type="submit" value="Crear Propiedad" class="boton boton-verde">
<a href="/bienesraicesPHP/admin/" class="boton boton-verde">Volver</a>
</form>
</main>
<?php
incluirTemplate('footer');
?>
<?php
namespace App;
class Propiedad
{
//Base de datos
protected static $db;
/* protected static $columnasDB = [
'id', 'titulo', 'precio', 'imagen', 'descripcion', 'habitaciones', 'wc', 'estacionamiento', 'creado',
'vendedorId'
];
*/
//Forma anterior php8 (Si usa php8 se definiria en el contructor)
public $id;
public $titulo;
public $precio;
public $imagen;
public $descripcion;
public $habitaciones;
public $wc;
public $estacionamiento;
public $creado;
public $vendedorId;
//Definir la conexion a la BD. self solo lo usamos cuando es una funcion en estatico
public static function setDB($database)
{
self::$db = $database;
}
//Le pasamos un arrglo llamado args
public function __construct($args = [])
{
//Asignamos a titulo un arreglo titulo y en caso que no este titulo va ser string vacío
$this->id = $args['id'] ?? null;
$this->titulo = $args['titulo'] ?? '';
$this->precio = $args['precio'] ?? 0;
$this->imagen = $args['imagen'] ?? 'imagen.jpg';
$this->descripcion = $args['descripcion'] ?? '';
$this->habitaciones = $args['habitaciones'] ?? 0 ;
$this->wc = $args['wc'] ?? 0;
$this->estacionamiento = $args['estacionamiento'] ?? 0 ;
$this->creado = date('Y/m/d');
$this->vendedorId = $args['vendedorId'] ?? null;
}
public function guardar()
{
//Validar las entrada de los datos
//$atributos = $this->sanitizarAtributo();
//debuguear($atributos);
//Insertamos en la base de datos
$query = " INSERT INTO propiedades (titulo, precio, imagen, descripcion, habitaciones, wc, estacionamiento, creado, vendedorId ) VALUES ( '$this->titulo','$this->precio','$this->imagen','$this->descripcion','$this->habitaciones','$this->wc','$this->estacionamiento','$this->creado','$this->vendedorId' ) ";
//mostraremos el resultado de la consulta
$resultado = self::$db->query($query);
debuguear($resultado);
}
//Se va encargar de interar sobre los atributos de la columna. Identificar y unir los atributos de la BD.
/* public function atributos(){
//vas un objeto
$atributos = [];
foreach(self::$columnasDB as $columna){
if($columna ==='id') continue;
$atributos[$columna] =$this->$columna;
}
return $atributos;
}
//Este se va encagar de sanitazar cada unos de los atributos
public function sanitizarAtributo(){
$atributos = $this->atributos();
$sanitizando = [];
foreach ($atributos as $key =>$value){
$sanitizando[$key] = self::$db->escape_string($value);
}
return($sanitizando);
} */
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment