Created
November 7, 2011 21:35
-
-
Save matismasters/1346271 to your computer and use it in GitHub Desktop.
Modelo Libros ejemplo 1 MVC
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 | |
function conectar_con_bd(){ | |
$user = "root"; | |
$pass = ""; | |
$server = "localhost"; | |
$bd = "bdLibros"; | |
$link = mysql_connect($server,$user,$pass); | |
mysql_select_db($bd,$link); | |
return $link; | |
} | |
function ejecutarConsulta($consulta_sql){ | |
// Conectamos y desconectamos en la misma funcion | |
$link = conectar_con_bd(); | |
$resultado = mysql_query($consulta_sql); | |
$resultado_como_arrays = array(); | |
// Pasamos el resultado a Array antes de enviarlo, porque si se cierra | |
// la coneccion con la BD no se puede hacer el llamado a mysql_fetch_array | |
// sobre el resultado de mysql_query; | |
while($row = mysql_fetch_array($resultado)){ | |
array_push($resultado_como_arrays, $row); | |
} | |
desconectar_bd($link); | |
// Devolvemos todo como array. | |
return $resultado_como_arrays; | |
} | |
function desconectar_bd($link){ | |
mysql_close($link); | |
} | |
?> |
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 | |
// Como tiene funciones dependientes de la BD hay que importar el archivo que conecta. | |
require_once("c:/wamp/www/ejercicio/modelos/bd_con.php"); | |
class mLibros{ | |
public static $generos = array("Misterio","Sci-Fi","Estudio"); | |
public static $nombreTabla = "libros"; | |
private $id; | |
private $titulo; | |
private $descripcion; | |
private $genero; | |
// ========= Getters, y Setters de siempre =========== | |
public function getId(){ | |
//Notar que despues del -> no va "$" | |
return $this->id; | |
} | |
public function setId($val){ | |
$this->id = $val; | |
} | |
public function getTitulo(){ | |
return $this->titulo; | |
} | |
public function setTitulo($val){ | |
// TODO: Validar caracteres por charset y SQL Injection | |
$this->titulo = $val; | |
} | |
public function getDescripcion(){ | |
return $this->descripcion; | |
} | |
public function setDescripcion($val){ | |
// TODO: Validar caracteres por charset y SQL Injection | |
$this->descripcion = $val; | |
} | |
public function getGenero(){ | |
return $this->genero; | |
} | |
public function setGenero($val){ | |
//Validamos que sea un genero valido. La funcion in_array, es nativa de PHP | |
if($this->validarGenero($val)){ | |
$this->genero = $val; | |
}else{ | |
return false; | |
} | |
} | |
// ========= Getters, y Setters de siempre =========== | |
// Validaciones | |
public function validar(){ | |
// En esta funcion irian todas las validaciones que corresponden a los datos | |
// que este objeto contiene | |
// En este caso es solo que el genero este dentro de los generos necesarios | |
$valido = true; | |
if(!$this->validarGenero($this->genero)){ | |
$valido = false; | |
} | |
return $valido; | |
} | |
// Como se utiliza validar el genero en 2 o mas lugares del codigo, se crea una funcion | |
// para no hacer copy paste, y poder reutilizar el codigo | |
public function validarGenero($genero){ | |
if(in_array($genero,self::$generos)){ | |
return true; | |
} else { | |
return false; | |
} | |
} | |
// Fin validaciones | |
// Funciones para la base de datos | |
// Para agregar | |
public function toSQLInsert(){ | |
$sql = "INSERT INTO " . self::$nombreTabla . "(titulo,descripcion,genero)"; | |
$sql .= "VALUES('" . $this->titulo . "', '" . $this->descripcion . "', '" . $this->genero . "');"; | |
var_dump($sql); | |
return $sql; | |
} | |
// Para actualizar | |
public function toSQLUpdate(){ | |
$sql = "UPDATE " . self::$nombreTabla . " SET "; | |
$sql .= "titulo = '" . $this->titulo . "',"; | |
$sql .= "descripcion = '" . $this->descripcion . "',"; | |
$sql .= "genero = '" . $this->genero . "' "; | |
$sql .= "WHERE id = " . $this->id; | |
return $sql; | |
} | |
// Para borrar, cambiar dependiendo de borrado logico o real | |
public function toSQLDelete(){ | |
$sql = "DELETE FROM " . self::$nombreTabla . " WHERE id = " . $this->id; | |
return $sql; | |
} | |
// Para traer todos los elementos | |
public static function SQLSelect(){ | |
$sql = "SELECT * FROM " . self::$nombreTabla; | |
return $sql; | |
} | |
// Esta parte es dependiente de hacer un require del archivo de coneccion con la BD | |
// Estas funciones son estaticas porque no tiene sentido tener que instanciar un libro | |
// para traer un grupo, por lo tanto la clase sigue siendo la responsable de traer | |
// todos los libros desde la base de datos y devolverlos como un array de mLibros(modelos) | |
// pero estas funciones las vamos a llamar de la siguiente forma: mLibro::traerTodos(); | |
public static function traerTodos(){ | |
$sql = self::SQLSelect(); | |
$libros = array(); | |
$resultado = ejecutarConsulta($sql); | |
// Por un tema de performance no se pone el count en el for, para que no cuente los elementos | |
// en todas las vueltas. | |
$len = count($resultado); | |
for($x=0;$x<$len;$x++){ | |
$filaLibro = $resultado[$x]; | |
$libro = new mLibros(); | |
$libro->setId($filaLibro['id']); | |
$libro->setTitulo($filaLibro['titulo']); | |
$libro->setDescripcion($filaLibro['descripcion']); | |
$libro->setGenero($filaLibro['genero']); | |
// Validamos, aunque no deberia de ser necesario ya que validamos en el setCampo, | |
// lo hacemos de todas formas porque es muy normal en una aplicacion web, que otras | |
// aplicaciones trabajen con la misma base de datos online, y por esto no se puede | |
// asegurar la integridad de los datos completamente. De esta forma nos cubrimos de que | |
// nuestra aplicacion funcione correctamente con datos correctos. "Nos lavamos las manos" | |
if($libro->validar()){ | |
array_push($libros,$libro); | |
} | |
} | |
// Notar como devolvemos un array de modelos, por lo que la aplicacion en su logica nunca va a | |
// tener que lidiar con resultados de la base de datos | |
return $libros; | |
} | |
// TODO: Traer libros por genero, Traer libros por titulo | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment