Ver Mensaje Individual
  #8 (permalink)  
Antiguo 09/01/2016, 15:18
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Evitar eliminar registros con php

Hola x_atrix ¿cómo estás? mira, hice lo que me dijiste y anduvo, te muestro a ver cómo lo ves:

RolesController.php

Código PHP:
Ver original
  1. public function add(){
  2.         if($this->checkUser()){
  3.             if (isset($_POST['btnaceptar'])) {
  4.                 if($this->checkDates()) {                
  5.                     $rol = new Rol(0, $_POST['txtnom']);
  6.                     $id= $this->modelo->guardame($rol);
  7.                     Session::set("msg",(isset($id)) ? "Rol Creado" : Session::get('msg'));
  8.                     header("Location:index.php?c=roles&a=index");
  9.                     exit();
  10.                 }
  11.             }
  12.             $this->redirect(array('add.php'));
  13.         }
  14.     }  
  15.     public function edit(){        
  16.         if($this->checkUser()){
  17.             Session::set("id",$_GET['p']);
  18.             if (Session::get('id')!=null && isset($_POST['btnaceptar'])){                            
  19.                 if($this->checkDates()) {                
  20.                     $rol= new Rol($_POST['hid'],$_POST['txtnom']);
  21.                     $id= $this->modelo->modificame($rol);
  22.                     Session::set("msg",(isset($id)) ? "Rol Editado" : Session::get('msg'));
  23.                     header("Location:index.php?c=roles&a=index");
  24.                     exit();
  25.                 }
  26.             }
  27.             $this->redirect(array('edit.php'),array(
  28.                 "rol" => $this->modelo->obtenerPorId(Session::get('id'))
  29.             ));
  30.         }        
  31.     }

RolModel.php

Código PHP:
Ver original
  1. public function guardame($rol){
  2.         if($this->checkRol($rol->getNombre())){
  3.             Session::set('msg', 'El rol ya existe');
  4.             return null;
  5.         }
  6.         $sql="insert into roles(rolNombre) values(?)";
  7.         $consulta = $this->getBD()->prepare($sql);
  8.         $consulta->execute(array($rol->getNombre()));
  9.         return ($consulta->rowCount() > 0) ? $this->getBD()->lastInsertId() : null;
  10.     }
  11.     public function modificame($rol){
  12.         $aux = $this->obtenerPorId($rol->getId());
  13.         if(!$rol->equals($aux)){
  14.             if($this->checkRol($rol->getNombre())){
  15.                 Session::set('msg', 'El rol ya existe');
  16.                 return null;
  17.             }        
  18.         }
  19.         $sql="update roles set rolNombre=? where rolId=?";
  20.         $consulta = $this->getBD()->prepare($sql);
  21.         $consulta->execute(array($rol->getNombre(),$rol->getId()));
  22.         return ($consulta->rowCount() > 0) ? $rol->getId() : null;
  23.     }
  24.     private function checkRol($nombre) {
  25.         $query = 'SELECT rolId FROM roles WHERE rolNombre = ?';
  26.         $consulta = $this->getBD()->prepare($query);
  27.         $consulta->execute([$nombre]);
  28.         // Indicar si hay algo en la base de datos con este nombre
  29.         return $consulta->rowCount() > 0;
  30.     }

y lo único que agregue fue el equals a la clase Rol:

Código PHP:
Ver original
  1. <?php
  2. namespace Clases;
  3. class Rol {
  4.     private $id;
  5.     private $nombre;
  6.     function getId() {
  7.         return $this->id;
  8.     }
  9.     function getNombre() {
  10.         return $this->nombre;
  11.     }    
  12.     function setNombre($nombre) {
  13.         $this->nombre = $nombre;
  14.     }
  15.     function __construct($xid, $xnombre) {
  16.         $this->id = $xid;
  17.         $this->nombre = $xnombre;
  18.     }
  19.     public function equals(Rol $obj){
  20.         return $this->nombre == $obj->nombre;                
  21.     }
  22. }

Con respecto a la mejora que me dijiste lo tengo muy presente además eso me serviría muy bien para el guardame, modificame y eliminame, pero te pregunto: ¿cómo haría para el obtenerPorId o los obtenerDatos? lo único que se me ocurre es poner un constructor vacío, a las clases conozcan a sus modelos, pero quiero una opinión tuya con respecto a eso, por otro lado Mil gracias, luego adaptare lo que me dijiste.

PD: lástima que php no tenga para sobreescribir el equals como java