En mi anterior post mostré una forma sencilla de aplicar POO para hacer una conexión a base de datos y una forma para poder organizar nuestro código, en este post mostrare como podemos tomar esta idea para hacer un sistema de comentarios muy muy sencillo. Voy aclarar algunas cosas antes de seguir. Se pretende ver como podemos estructurar nuestro proyecto en base a lo publicado en el post anterior. Ademas esta no es la única forma de hacerlo, esto solo es una guía para aquellos que recién empiezan. Si ya usas framework o eres un profesional seguramente ya debes tener tu forma de organizar tus proyectos, si quieres compártela Organizando carpetas core: Colocaremos los archivos model.php y config.php includes: Nuestros helpers libs: Aqui dentro iran las librerias que utilicemos en el proyecto. models: Aqui pondremos todos los modelos. Las clases que manipularan los datos. public: css y js Diseñando la interfaz de usuario Crearemos un archivo index.php donde diseñaremos nuestro template para el sistema de comentarios: "container" centrara nuestra pagina y "form_container" y "coments_container" contendran al formulario y a los comentarios respectivamente. Nota que estoy usando Google Fonts para estilizar la fuente. A continuación el archivo coment_style.css que debera crearse en public/css/ No hay mucho que decir sobre los estilos creo que hasta aquí todo sencillo. Si todo fue bien debería quedarnos algo así. Implementacion PHP Nuestro diseño de base de datos sera simple, solo una tabla llamada db_comentarios con dos atributos db_id(Interger Autoincrement) y db_comentario(Text). La implementación de Config.php y Model.php ya la analizamos en el post anterior. Resumiendo un poco, config es la configuración del proyecto y model es nuestra plantilla que nos proporcionara la conexión para cada modelo. Model podría hacer mas que solo darnos la conexión también podríamos implementar una capa de abstracción de base de datos, como esta: https://github.com/ajillion/PHP-MySQLi-Database-Class Config.php y Model.php deben ir en core/ Config.php Model.php Ahora si vamos a crear nuestro modelo de comentarios. Aquí pondremos todos los comportamientos típicos de los comentarios, en este caso solo tenemos que agregar un comentario y mostrar todos los comentarios. Si extendiéramos un poco mas el ejemplo podríamos agregar editar, borrar. Como dijimos este modelo debe heredar de Model. Usamos la extensión mysqli no mysql pues esta ultima ya esta obsoleta. Noten que mysqli ya trae un consigo método para evitar inyecciones SQL. Si aun no manejas mysqli te recomiendo estas lecturas: http://www.pontikis.net/blog/how-to-use-php-improved-mysqli-extension-and-why-you-should http://codular.com/php-mysqli http://php.net/manual/es/book.mysqli.php Esto es lo que logramos con Model y comentariosModel representado en UML Ok ya casi terminamos, abramos el archivo index.php comentariosModel tiene todos los métodos que necesitamos. Podríamos separar esta vista en dos partes, por un lado mostramos los comentario y por el otro registramos un comentario. Para mostrar los comentario hacemos uso de get_coments() de la clase comentariosModel, el cual nos devuelve un array asociativo, esto es un array cuya clave es el atributo de la tabla de base de datos. Si la longitud del array es menor que 0 no tiene nada, sino es asi significa que nos trajo comentarios y por ende debemos mostrarlos. htmlspecialchars() nos ayudara a evitar ataques XSS es decir codigo HTML y Javascript malicioso. nl2br() Devuelve el parámetro string con un '
' o '
' insertado antes de cada nueva línea. (rn, nr, n y r). O sea respetara los saltos de linea. Por otro lado tenemos que ingresar comentarios para ellos tenemos un formulario donde el usuario ingresara su comentario y cuando lo envie (click en enviar) lo recibiremos en la misma index.php if( count($_POST) AND trim($_POST['user_coment']) != '' ) { $comentariosM->add_coment($_POST['user_coment']); } Cuando el usuario haga click en "comentar", $_POST contendrá su comentario por lo que count($_POST) sera true y si ademas no esta vació ( $_POST != '' ) entonces agregaremos su comentario. trim() nos evita que el usuario nos ingrese un comentario lleno de espacios sin contenido alguno. Verán que en form estamos haciendo echo BASE_URL esta constante esta definida en Config.php y debe contener su dirección base, en mi caso era http://localhost/Estructura_1. Con esto nos evitamos problemas al direccionar URLs, no confundir con direcciones de directorios que son los que usamos en require e include. Noten que hicimos una serie de require que terminan permitiendo a index.php acceder a BASE_URL que viene de Config.php. Demo http://seminariocu.96.lt/TP/ Espero que les sirva saludos!
' o '
' insertado antes de cada nueva línea. (rn, nr, n y r). O sea respetara los saltos de linea. Por otro lado tenemos que ingresar comentarios para ellos tenemos un formulario donde el usuario ingresara su comentario y cuando lo envie (click en enviar) lo recibiremos en la misma index.php if( count($_POST) AND trim($_POST['user_coment']) != '' ) { $comentariosM->add_coment($_POST['user_coment']); } Cuando el usuario haga click en "comentar", $_POST contendrá su comentario por lo que count($_POST) sera true y si ademas no esta vació ( $_POST != '' ) entonces agregaremos su comentario. trim() nos evita que el usuario nos ingrese un comentario lleno de espacios sin contenido alguno. Verán que en form estamos haciendo echo BASE_URL esta constante esta definida en Config.php y debe contener su dirección base, en mi caso era http://localhost/Estructura_1. Con esto nos evitamos problemas al direccionar URLs, no confundir con direcciones de directorios que son los que usamos en require e include. Noten que hicimos una serie de require que terminan permitiendo a index.php acceder a BASE_URL que viene de Config.php. Demo http://seminariocu.96.lt/TP/ Espero que les sirva saludos!