/** * Método de inserción que recoge las variables de $_POST * @return [type] [description] */ public static function insert() { // Primero tenemos que preparar un bloque try catch $errores = []; if ($_POST) { // Validamos todas las variables de $_POST $_POST = Validaciones::sanearEntrada($_POST); // empezamos la transacción $conn = Database::getInstance()->getDatabase(); $conn->beginTransaction(); if (($error = PersonaModel::insert()) && !is_array($error)) { // Comprobaos los campos requeridos en la tabla if (isset($_POST["nick"]) && isset($_POST["pass1"]) && isset($_POST["pass2"]) && isset($_POST["categoria"])) { // Si cualquiera de los campos requeridos // Diese un error deberemos lanzar un rollback // validar Nick if (isset($_POST["nick"])) { if (($err = Validaciones::validarNick($_POST["nick"])) === true) { // comprobamos que dicho nick exista en la base de datos // Sino lanzamos un error try { $conn = Database::getInstance()->getDatabase(); $ssql = "SELECT * FROM usuario WHERE nick = :nick"; $prepare = $conn->prepare($ssql); $prepare->bindParam(":nick", $_POST["nick"], PDO::PARAM_STR); $prepare->execute(); if ($prepare->rowCount() === 1) { // si existe la preparo $errores["nick"][] = "El nick ya existe"; } else { $campos[":nick"] = $_POST["nick"]; // creamos la carpeta personal del usuario $ruta = shell_exec('pwd'); $ruta = trim($ruta); $ruta .= "/" . $_POST['nick']; if (Validaciones::crearDir($carpeta = $ruta)) { $campos[":carpeta"] = $carpeta; } } } catch (PDOException $e) { return $errores['generic'][] = "Error en la base de datos"; } } else { $errores["nick"][] = $err; } } // Validar contraseña if (isset($_POST["pass1"]) && isset($_POST["pass1"])) { if (($err = Validaciones::validarPassAlta($_POST["pass1"], $_POST["pass2"])) !== true) { $errores["pass"] = $err; } else { $campos[":pass"] = HelperFunctions::encriptarPasswd($_POST["pass1"]); } } else { $errores["pass"][] = "Una de las contraseñas o ambas no han sido introducidas"; } if (isset($_POST["categoria"])) { // Validar la categoría // En el formulario es un campo select // el cual tiene como value el valor de la BD // de forma que aqui solo hay que validar el id de la categria if (($err = CategoriaModel::getCategoriaByNombre($_POST["categoria"])) !== true) { $errores["categoria"][] = "La categoría no existe"; } else { $aux = CategoriaModel::getCategoriaId($_POST["categoria"]); $campos[":categoria"] = $aux[0]['id']; } // fin de las comprobaciones de categoria } else { $errores["categoria"][] = "La categoría no existe"; } // Si hay errores los retornamos if ($errores) { $conn->rollback(); return Validaciones::resultado($errores); } else { // Insertamos todos los valores // Montamos las consultas $fields = ""; $values = ""; // $values = " :campo1 :campo2 ..." // $fields = "campo1, campo2," foreach ($campos as $indice => $valor) { $values .= " " . $indice . ","; $aux = mb_substr($indice, 1); $fields .= $aux . ","; } // le añado el id $fields .= " id"; $values .= " :id"; $campos[":id"] = $error; // Si ha entrado aqui, $error es el id. $ssql = "INSERT INTO usuario({$fields}) VALUES ({$values})"; $query = $conn->prepare($ssql); /*foreach ($campos as $indice => $valor) { if ($indice == ":categoria") { $query->bindParam($indice, $valor,PDO::PARAM_INT); } else { $query->bindParam($indice, $valor,PDO::PARAM_STR); } }*/ $query->execute($campos); $conn->commit(); return true; } } else { // puesto que no tratamos de insertar // solamente personas sino que tenemos que insertar usuarios // que puedan logearse, si los campos del usuario no existen // directamente se hace un rollback $conn->rollback(); $errores['generic'][] = "No se han recivido los datos minimos requeridos"; } } elseif ($error === false) { $errores['generic'][] = "El usuario no se a insertado correctamente"; // Si no se puede insertar el usuario hacemos un rollback $conn->rollback(); } else { // Almacenamos los errores los errores $errores[] = $error; $conn->rollback(); return Validaciones::resultado($errores); } } else { $errores['generic'][] = "No se han recivido datos"; return Validaciones::resultado($errores); } }
public static function insert() { // Primero tenemos que preparar un bloque try catch $errores = []; if ($_POST) { // Validamos todas las variables de $_POST $_POST = Validaciones::sanearEntrada($_POST); // empezamos la transacción $conn = Database::getInstance()->getDatabase(); $conn->beginTransaction(); if (is_array($ErrorOId = PersonaModel::insert())) { $errores[] = $ErrorOId; $conn->rollback(); return Validaciones::resultado($errores); } elseif ($ErrorOId === false) { $conn->rollback(); return $errores['generic'][] = "El cliente no se a insertado correctamente"; } else { // Comprobaos los campos requeridos en la tabla if (isset($_POST["nombreCorp"])) { $_POST["nombreCorp"] = Validaciones::saneamiento($_POST["nombreCorp"]); if (($err = Validaciones::validarNombreCorporativo($_POST["nombreCorp"])) === true) { try { $conn = Database::getInstance()->getDatabase(); $ssql = "SELECT * FROM cliente WHERE nombre_corporativo = :nombreCorp"; $prepare = $conn->prepare($ssql); $prepare->bindParam(":nombreCorp", $_POST["nombreCorp"], PDO::PARAM_STR); $prepare->execute(); if ($prepare->rowCount() === 1) { return $errores["nombreCorp"][] = "El nombre corporativo ya existe"; } } catch (PDOException $e) { return $errores['generic'][] = "Error en la base de datos"; } try { $conn = Database::getInstance()->getDatabase(); $ssql = "insert into cliente (id, nombre_corporativo) values (:id, :nombreCorp)"; $prepare = $conn->prepare($ssql); $prepare->bindParam(":id", $ErrorOId, PDO::PARAM_INT); $prepare->bindParam(":nombreCorp", $_POST["nombreCorp"], PDO::PARAM_STR); $prepare->execute(); if ($prepare->rowCount() === 1) { $conn->commit(); return true; } return false; } catch (PDOException $e) { return $errores['generic'][] = "Error en la base de datos"; } } else { $conn->rollback(); return $err; } } else { $conn->rollback(); return $errores["nombreCorp"][] = "El nombre corporativo no se ha recibido"; } } } else { $errores['generic'][] = "No se han recivido datos"; return Validaciones::resultado($errores); } }