Skip to content

Instantly share code, notes, and snippets.

@matismasters
Created November 7, 2011 21:35
Show Gist options
  • Save matismasters/1346271 to your computer and use it in GitHub Desktop.
Save matismasters/1346271 to your computer and use it in GitHub Desktop.
Modelo Libros ejemplo 1 MVC
<?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);
}
?>
<?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