Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- config
- |_____config.php
- controllers
- |_____NotaController.php
- libs
- |_____app.php
- |_____Database.php
- models
- |_____Nota.php
- public
- |_____css
- |_____styles.css
- sql
- |_____crearBBDD.sql
- views
- |_____layout
- |_____footer.php
- |_____header.php
- Nota
- |_____crearNota.php
- |_____editarNota.php
- |_____todas.php
- .htaccess
- index.php
- // constantes globales
- define('URL', 'http://localhost/mvcnotes/');
- define('DEFAULT_CONTROLLER', 'Nota');
- define('DEFAULT_ACTION', 'index');
- <?php
- require_once 'models/Nota.php';
- class NotaController {
- private $nota;
- public function __construct() {
- //echo 'Nota Controller Creado.';
- $this->nota = new Nota();
- }
- public function index() { // En este caso index va a mostrar todas mis notas
- //echo 'Hola, soy index()';
- $notas = $this->nota->getAll();
- require_once 'views/Nota/todas.php';
- }
- public function crearNota() {
- require_once 'views/Nota/crearNota.php';
- }
- public function guardarNota() {
- $id = 'null';
- $fecha = 'SYSDATE()';
- if (isset($_POST)) {
- $titulo = $_POST['titulo'];
- $color = $_POST['color'];
- $contenido = $_POST['contenido'];
- $this->nota->setId($id);
- $this->nota->setTitulo($titulo);
- $this->nota->setContenido($contenido);
- $this->nota->setColor($color);
- $this->nota->setFecha($fecha);
- if ($this->nota->save($this->nota)) {
- echo 'Nota guardada correctamente';
- } else {
- echo 'No se pudo guardar la nota';
- }
- }
- }
- public function eliminar() {
- if (isset($_GET)) {
- $parametros = explode('/', $_GET['url']);
- $id = $parametros[2];
- if($this->nota->delete($id)) {
- echo 'La nota se eliminó correctamente.';
- } else {
- echo 'La nota no se pudo eliminar';
- }
- }
- }
- public function editar() {
- if (isset($_GET)) {
- $parametros = explode('/', $_GET['url']);
- $id = $parametros[2];
- if($nota = $this->nota->getById($id)) {
- require_once 'views/Nota/editarNota.php';
- }
- }
- }
- public function actualizar() {
- $fecha = 'SYSDATE()';
- if (isset($_POST)) {
- $id = $_POST['id'];
- $titulo = $_POST['titulo'];
- $color = $_POST['color'];
- $contenido = $_POST['contenido'];
- $this->nota->setId($id);
- $this->nota->setTitulo($titulo);
- $this->nota->setContenido($contenido);
- $this->nota->setColor($color);
- $this->nota->setFecha($fecha);
- if ($this->nota->update($this->nota)) {
- echo 'Nota editada correctamente';
- } else {
- echo 'No se pudo editar la nota';
- }
- }
- }
- }
- <?php
- require_once 'config/config.php';
- class App {
- public $controller;
- public $controllerObj;
- public $action;
- public function __construct(){
- // Cargo el header para el HTML
- require_once 'views/layout/header.php';
- // Compruebo la URL
- $this->checkURL();
- //echo '<p>El controlador actual es: <b>' . $this->controller . '</b>, y la acción: <b>' . $this->action . '</b></p>';
- // Compruebo el Controlador
- $this->comprobarControlador();
- // Compruebo la accion
- if (!empty($this->action)) {
- $this->comprobarAccion();
- } else {
- $this->action = 'index';
- $this->comprobarAccion();
- }
- // Cargo el footer para el HTML
- require_once 'views/layout/footer.php';
- }
- public function checkURL() {
- // Si recibo parámetros
- if (isset($_GET) && count($_GET) >= 1) {
- // Particiono la URL en parámetros
- $camposURL = explode('/', $_GET['url']);
- // Cuento los parámetros recibidos
- if (count($camposURL) == 3 && $camposURL[0] == 'nota' && is_numeric($camposURL[2])) {
- // Caso especial para editar/elimar nota, que me envian el id por GET como 3er parametro
- $this->controller = $camposURL[0];
- $this->action = $camposURL[1];
- } else if (count($camposURL) == 2) {
- $this->controller = $camposURL[0];
- $this->action = $camposURL[1];
- } else if (count($camposURL) == 1) {
- $this->controller = $camposURL[0];
- $this->action = DEFAULT_ACTION;
- } else {
- echo '<h4 style="color: red;">La url contenía más de 2 parámetros</h4>';
- die();
- }
- // Si no recibo parámetros
- } else {
- $this->controller = DEFAULT_CONTROLLER;
- $this->action = DEFAULT_ACTION;
- }
- // Le añado la terminacion Controller al controlador -> Nota -> NotaController
- $this->controller = $this->controller . 'Controller';
- }
- public function comprobarControlador() {
- // Si el controlador es correcto.
- if (file_exists('controllers/' . $this->controller . '.php')) {
- //echo '<p>El controlador ' . $this->controller . ' existe.</p>';
- // Cargo el controlador
- require_once 'controllers/' . $this->controller . '.php';
- // Creo el Objeto controller
- $this->controllerObj = new $this->controller;
- } else {
- echo '<h4 style="color: red;">El controlador ' . $this->controller . ' no se reconoció.</h4>';
- die();
- }
- }
- public function comprobarAccion() {
- // Si la accion existe como método en la clase del controller
- if (method_exists($this->controllerObj, $this->action)) {
- $accion = $this->action;
- // Ejecuto esa accion
- $this->controllerObj->$accion();
- } else {
- echo '<h4 style="color: red;">La accion ' . $this->action . ' no se reconoció.</h4>';
- die();
- }
- }
- }
- <?php
- class Database {
- private $host;
- private $user;
- private $password;
- private $dbname;
- public function __construct() {
- $this->host = 'localhost';
- $this->user = 'root';
- $this->password = '';
- $this->dbname = 'mvcnotes';
- }
- public function connect() {
- try {
- $conexion = new mysqli($this->host, $this->user, $this->password, $this->dbname);
- $conexion->query("SET NAMES 'utf8'");
- return $conexion;
- } catch (Exception $e) {
- echo 'Error en Database.php -> El erro fue: ' . $e->getMessage();
- die();
- }
- }
- }
- <?php
- require_once 'libs/Database.php';
- class Nota {
- private $db;
- private $id;
- private $titulo;
- private $contenido;
- private $color;
- private $fecha;
- public function __construct() {
- $database = new Database();
- $this->db = $database->connect();
- }
- // METODOS PARA BBDD
- public function getAll() {
- $notas = false;
- $resultado = $this->db->query("SELECT * FROM notas ORDER BY id DESC");
- while ($row = $resultado->fetch_object('Nota')) {
- $notas[] = $row;
- }
- return $notas;
- }
- public function getById($id) {
- $nota = false;
- $resultado = $this->db->query("SELECT * FROM notas WHERE id = $id");
- if ($row = $resultado->fetch_object('Nota')) {
- $nota = $row;
- }
- return $nota;
- }
- public function save($nota) {
- $resultado = $this->db->query("INSERT INTO notas(id, titulo, contenido, color, fecha) VALUES($nota->id, '$nota->titulo', '$nota->contenido', '$nota->color', $nota->fecha)");
- return $resultado;
- }
- public function update($nota) {
- $resultado = $this->db->query("UPDATE notas SET titulo = '$nota->titulo', contenido = '$nota->contenido', color = '$nota->color', fecha = $nota->fecha WHERE id = $nota->id");
- return $resultado;
- }
- public function delete($id) {
- $resultado = $this->db->query("DELETE FROM notas WHERE id = $id");
- return $resultado;
- }
- // GETTERS
- public function getId() {
- return $this->id;
- }
- public function getTitulo() {
- return $this->titulo;
- }
- public function getContenido() {
- return $this->contenido;
- }
- public function getColor() {
- return $this->color;
- }
- public function getFecha() {
- return $this->fecha;
- }
- // SETTERS
- public function setId($id) {
- $this->id = $id;
- }
- public function setTitulo($titulo) {
- $this->titulo = $titulo;
- }
- public function setContenido($contenido) {
- $this->contenido = $contenido;
- }
- public function setColor($color) {
- $this->color = $color;
- }
- public function setFecha($fecha) {
- $this->fecha = $fecha;
- }
- }
- * {
- margin: 0;
- padding: 0;
- }
- body {
- width: 80%;
- background-color: blanchedalmond;
- margin: 0 auto;
- }
- body, header, nav, main, section, article, aside, footer {
- box-sizing: border-box;
- }
- /* CABECERA */
- header {
- width: 100%;
- height: 100px;
- background-color: cadetblue;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- /* MENU */
- nav {
- width: 100%;
- height: 50px;
- background: linear-gradient(lightseagreen, darkslategray);
- border-bottom: 2px solid black;
- display: flex;
- justify-content: space-around;
- align-items: center;
- overflow: hidden;
- }
- nav a {
- box-sizing: border-box;
- text-decoration: none;
- color: black;
- width: 50%;
- height: 50px;
- text-align: center;
- line-height: 50px;
- border: 1px solid black;
- }
- nav a:hover {
- background-color:darkslategray;
- color: cadetblue;
- }
- /* PRINCIPAL / MAIN */
- main {
- width: 100%;
- min-height: 300px;
- background-color: white;
- display: flex;
- flex-direction: column;
- justify-content: space-around;
- align-items: center;
- }
- main > section {
- margin: 10px;
- width: 90%;
- min-height: 150px;
- padding: 20px;
- }
- main > section span {
- color: darkslategrey;
- font-family: Consolas;
- }
- main > section a:nth-child(2) {
- padding-left: 20px;
- }
- .green {
- background-color: yellowgreen;
- }
- .yellow {
- background-color: goldenrod;
- }
- .blue {
- background-color: dodgerblue;
- }
- form > p {
- padding: 20px;
- }
- form textarea {
- width: 100%;
- height: 400px;
- }
- /* PIE */
- footer {
- width: 100%;
- height: 100px;
- background-color: cadetblue;
- display: flex;
- justify-content: center;
- align-items: center;
- border-top: 2px solid darkslategray;
- }
- footer span {
- font-weight: bolder;
- }
- CREATE DATABASE mvcnotes;
- USE mvcnotes;
- CREATE TABLE notas (
- id int not null auto_increment,
- titulo varchar(250) not null,
- contenido text not null,
- color varchar(50) not null,
- fecha datetime not null,
- CONSTRAINT pk_notas PRIMARY KEY (id)
- );
- </main>
- <!-- FOOTER / PIE -->
- <footer>
- <p>Web, aplicación y modelo MVC creado por <span>Perico los Palotes xD</span> © <?php echo date('Y');?></p>
- </footer>
- </body>
- </html>
- <!DOCTYPE html>
- <html lang="es">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>MVC Notes</title>
- <link rel="stylesheet" type="text/css" href="<?=URL?>public/css/styles.css">
- </head>
- <body>
- <!-- HEADER / CABECERA -->
- <header>
- <h1> MVC Notes - Aplicación Web</h1>
- </header>
- <!-- NAV / MENU -->
- <nav>
- <a href="<?=URL?>nota/index">Inicio</a>
- <a href="<?=URL?>nota/crearNota">Crear Nota</a>
- </nav>
- <!-- MAIN / PRINCIPAL -->
- <main>
- <section>
- <h3>Crear Nota</h3>
- <form action="<?=URL?>nota/guardarNota" method="POST">
- <p>
- <label for="titulo">Titulo: </label>
- <input type="text" name="titulo" required>
- </p>
- <p>
- <label for="color">Color: </label>
- <select name="color">
- <option value="yellow" selected>Amarillo</option>
- <option value="blue">Azul</option>
- <option value="green">Verde</option>
- </select>
- </p>
- <p>
- <label for="contenido">Contenido: </label>
- <textarea name="contenido" required></textarea>
- </p>
- <p>
- <input type="submit" name="submit" value="Crear Nota">
- <input type="reset" value="Reiniciar Datos">
- </p>
- </form>
- </section>
- <section>
- <h3>Editar Nota</h3>
- <form action="<?=URL?>nota/actualizar" method="POST">
- <p>
- <label for="titulo">Titulo: </label>
- <input type="text" name="titulo" required value="<?= $nota->getTitulo() ?>">
- </p>
- <p>
- <label for="color">Color: </label>
- <select name="color">
- <option value="yellow" <?php if ($nota->getColor() == 'yellow') { echo 'selected'; } ?>>Amarillo</option>
- <option value="blue" <?php if ($nota->getColor() == 'blue') { echo 'selected'; } ?>>Azul</option>
- <option value="green" <?php if ($nota->getColor() == 'green') { echo 'selected'; } ?>>Verde</option>
- </select>
- </p>
- <p>
- <label for="contenido">Contenido: </label>
- <textarea name="contenido" required><?= $nota->getContenido() ?></textarea>
- </p>
- <p>
- <input type="submit" name="submit" value="Editar Nota">
- <input type="reset" value="Reiniciar Datos">
- </p>
- <input type="hidden" name="id" value="<?= $nota->getId() ?>">
- </form>
- </section>
- <?php if ($notas) : ?>
- <?php foreach($notas as $nota): ?>
- <section class="seccion <?= $nota->getColor() ?>">
- <article>
- <h3><?= $nota->getTitulo(); ?></h3>
- <span><?= $nota->getFecha() ?></span>
- <p><?= $nota->getContenido(); ?></p>
- </article>
- <div id="botones" class="botones">
- <a href="<?=URL?>nota/editar/<?= $nota->getId() ?>">Editar</a>
- <a href="<?=URL?>nota/eliminar/<?= $nota->getId() ?>">Eliminar</a>
- </div>
- </section>
- <?php endforeach; ?>
- <?php else: ?>
- <h3>Wops! No se encontraron notas en la BBDD. Está vacia.</h3>
- <?php endif; ?>
- <IfModule mod_rewrite.c>
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-l
- RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
- </IfModule>
- <?php
- require_once 'libs/app.php';
- $app = new App();
Add Comment
Please, Sign In to add comment