El ejemplo a continuación es muy simples y se pueden complementar con el ejemplo de como hacer login para tener usuarios con perfiles con funciones determinadas. Mas adelante mostraré un ejemplo de un panel de administración para subir nuevas publicaciones, responder comentarios, etc.
Como siempre la idea principal es aprender algo nuevo y entender que estamos haciendo pensando en un crecimiento o mejora de nuestro código.
Comenzamos con la base de datos, en ella vamos a utilizar la codificación utf8_spanish_ci y como nota importante verifica el prefijo que vamos a utilizar en las tablas de nuestra base porque lo vamos a declarar en nuestro archivo de configuración, en este ejemplo estoy utilizando «blog_«, pero tu puedes usar el que quieras.
CREATE TABLE `blog_post` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `author` int(11) NOT NULL, `title` varchar(200) COLLATE utf8_spanish_ci NOT NULL, `mediaurl` varchar(300) COLLATE utf8_spanish_ci NOT NULL, `content` varchar(800) COLLATE utf8_spanish_ci NOT NULL, `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- -- Volcado de datos para la tabla `blog_post` -- INSERT INTO `blog_post` (`id`, `author`, `title`, `mediaurl`, `content`, `date`) VALUES (1, '1', 'Titulo 1', 'imagenes/2024/06/imagen1.jpg', 'Contenido del post 1', '2024-06-02 03:26:07'), (2, '2', 'Titulo 2', 'imagenes/2024/06/imagen2.jpg', 'Contenido del post 2', '2024-06-03 03:26:07'), (3, '1', 'Titulo 3', 'imagenes/2024/06/imagen3.jpg', 'Contenido del post 3', '2024-06-04 03:26:07'), (4, '2', 'Titulo 4', 'imagenes/2024/06/imagen4.jpg', 'Contenido del post 4', '2024-06-05 03:26:07');
Ahora vamos a crear el archivo config.php en el cual vamos a declarar los datos sensibles para la conexión a tu base de datos, aquí es donde vamos a colocar en la constante PRETABLE el prefijo de las tablas con las cuales fueron creadas.
En la constante SITIO estoy utilizando el directorio donde yo subiré el ejemplo, debes personalizarlo según tu dominio.
<?php define('DBUSER','usuario'); define('DBPWD','password'); define('DBHOST','localhost'); define('DBNAME','basdedatos'); define('PRETABLE','blog_'); define('SITIO','https://doroteocatalan.com/ejemplo/miniblog/'); ?>
Seguimos con el archivo funciones.php en el cual contiene las instrucciones para la conexión a la base de datos, el despliegue de nuestras publicaciones y una función mas para mostrar una publicación especifica
<?php require_once 'config.php'; function conectar(){ $conn = mysqli_connect(DBHOST,DBUSER,DBPWD,DBNAME)or die ('<div style="clear:both;">Ha fallado la conexión 1: <center>Powered by <a href="https://www.DoroteoCatalan.com" target="_blank">DCL</a></center> </div>'); mysqli_query($conn,"SET NAMES 'utf8'"); return $conn; } function getPosts($limit=5){ global $conn; $nameTabla = PRETABLE.'post'; $sSql = 'SELECT id, title, mediaurl FROM '.$nameTabla.' ORDER BY id desc LIMIT '.$limit ; $result = mysqli_query($conn,$sSql); $datos = array(); while($row = mysqli_fetch_assoc($result)){ $datos[] = $row; } return $datos; } function getPostById($id){ global $conn; $nameTabla = PRETABLE.'post'; $sSql = 'SELECT date, title, mediaurl, content, author FROM '.$nameTabla.' WHERE id ='.$id; $result = mysqli_query($conn,$sSql); $row = mysqli_fetch_assoc($result); return $row; } ?>
Continuamos con la creación del archivo index.php en el cual encontramos dos condiciones:
Si estamos consultando una publicación especifica vamos a necesitar un valor otorgado por $_GET y si no existe esa consulta desplegaremos el listado de nuestras publicaciones.
Recordemos que es un ejemplo muy básico y podemos hacerlo crecer utilizando una paginación con limite de publicaciones por pagina. De igual forma necesitamos utilizar mas diseño para que se vea bonito, pero en nuestros primeros pasos necesitamos primero que sea funcional para entender que estamos haciendo.
En este ejemplo puedes ver que estoy utilizando un subdirectorio llamado plantillas para ser mas organizado pero a la hora de desplegar el contenido lo haremos dentro del mismo archivo index.php y como siempre eres libre de modificar el código según tus necesidades.
<?php require_once 'funciones.php'; $conn = conectar(); if(isset($_GET['imagen']) && is_numeric($_GET['imagen'])){ $post = getPostById($_GET['imagen']); require 'plantillas/mostrar.php'; }else{ $posts = getPosts(5); require 'plantillas/listado.php'; } ?>
Vamos con la lista de publicaciones y para eso crearemos el archivo listado.php dentro de nuestro subdirectorio «plantillas«. En el vemos solo el despliegue de las publicaciones que en el archivo index.php obtuvimos mediante la función getPosts.
<html> <body> <h1>List of Posts</h1> <ul> <?php foreach ($posts as $post): ?> <li> <h2><a href="?imagen=<?php echo $post['id'] ?>"> <?php echo $post['title'] ?> </a><h2> </li> <?php endforeach; ?> </ul> </body> </html>
Finalmente creamos el archivo mostrar.php de igual manera dentro del subdirectorio «plantillas«, y su función será muy parecida al archivo anterior, a diferencia que solo mostramos el registro de nuestra base de datos que solicitamos dentro del archivo index.php
<html> <body> <h1><?php echo $post['title'];?></h1> <div style="width: 200px;"><img src="<?php echo SITIO . $post['mediaurl'];?>" width="100%"/> </div> <div><?php echo $post['date']; ?></div> <div><?php echo $post['author']; ?></div> <br> <div> <?php echo $post['content'] ?> </div> <div> <br> <a href="<?php echo SITIO ;?>">Regresar a pagina principal</a> </div> </body> </html>
En el siguiente enlace puedes ver un ejemplo de este código funcionando.