Cómo crear un blog en PHP y base de datos MySQL

Estoy emocionado de llevarlos a través de este tutorial tan esperado, finalmente. Le mostraré cómo crear una aplicación de blog completa desde cero utilizando PHP y la base de datos MySQL. Un blog como lo conoce es una aplicación en la que algunos usuarios (usuarios administradores) pueden crear, editar, actualizar y publicar artículos para que estén disponibles al público para leerlos y tal vez comentarlos. Los usuarios y el público pueden navegar a través de un catálogo de estos artículos y hacer clic en cualquiera para leer más sobre el artículo y comentarlo.

Características:

  • Un sistema de registro de usuarios que gestiona dos tipos de usuarios: Administración y Usuarios normales
  • El blog tendrá un área de administración y un área pública separadas entre sí.
  • El área de administración será accesible solo para los usuarios administradores que hayan iniciado sesión y el área pública para los usuarios normales y el público en general
  • En la sección de administración, existen dos tipos de administradores:
    • Administración:
      • Puede crear, ver, actualizar, publicar / anular la publicación y eliminar NINGÚN correo.
      • También puede crear, ver, actualizar y eliminar temas.
      • Un usuario administrador (y solo un usuario administrador) puede crear otro usuario administrador o autor
      • Puede ver, actualizar y eliminar a otros usuarios administradores
    • Autor:
      • Puede crear, ver, actualizar y eliminar solo publicaciones creadas por ellos mismos
      • Ellos no puedo publicar una publicación. Toda la publicación de publicaciones la realiza el usuario administrador.
  • Solo las publicaciones publicadas se muestran en el área pública para su visualización
  • Cada publicación se crea bajo un tema en particular.
  • Existe una relación de varios a varios entre publicaciones y temas.
  • La página pública enumera las publicaciones; cada publicación se muestra con una imagen destacada, autor y fecha de creación.
  • El usuario puede navegar a través de todos los listados de publicaciones bajo un tema en particular haciendo clic en el tema.
  • Cuando un usuario hace clic en una publicación, puede ver la publicación completa y comentar en la parte inferior de las publicaciones.
  • Se implementa un sistema de comentarios Disqus que permite a los usuarios comentar usando cuentas de redes sociales con plataformas como Facebook, GooglePlus, Twitter.

Implementación

Bien, de inmediato comencemos a codificar.

Llamaremos al proyecto complete-blog-php. En el directorio de su servidor (htdocs o www), cree una carpeta llamada complete-blog-php. Abra esta carpeta en un editor de texto de su elección, por ejemplo, Sublime Text. Cree las siguientes subcarpetas dentro de él: admin, includes y static.

Las 3 carpetas contendrán los siguientes contenidos:

  • administración: Retendrá archivos para el área administrativa de backend. Archivos relacionados con la creación, visualización, actualización y eliminación de publicaciones, temas y usuarios.
  • incluye: Contendrá archivos que contengan fragmentos de código que se incluirán en una o más páginas. Por ejemplo, archivos para visualización de errores
  • estático: Mantenga archivos estáticos como imágenes, hojas de estilo CSS, Javascript.

En la carpeta raíz de la aplicación, cree un archivo llamado index.php:

Ábrelo y pega este código en él:

<!DOCTYPE html>
<html>
<head>
	<!-- Google Fonts -->
	<link href="https://fonts.googleapis.com/css?family=Averia+Serif+Libre|Noto+Serif|Tangerine" rel="stylesheet">
	<!-- Styling for public area -->
	<link rel="stylesheet" href="static/css/public_styling.css">
	<meta charset="UTF-8">
	<title>LifeBlog | Home </title>
</head>
<body>
	<!-- container - wraps whole page -->
	<div class="container">
		<!-- navbar -->
		<div class="navbar">
			<div class="logo_div">
				<a href="index.php"><h1>LifeBlog</h1></a>
			</div>
			<ul>
			  <li><a class="active" href="index.php">Home</a></li>
			  <li><a href="#news">News</a></li>
			  <li><a href="#contact">Contact</a></li>
			  <li><a href="#about">About</a></li>
			</ul>
		</div>
		<!-- // navbar -->

		<!-- Page content -->
		<div class="content">
			<h2 class="content-title">Recent Articles</h2>
			<hr>
			<!-- more content still to come here ... -->
		</div>
		<!-- // Page content -->

		<!-- footer -->
		<div class="footer">
			<p>MyViewers &copy; <?php echo date('Y'); ?></p>
		</div>
		<!-- // footer -->

	</div>
	<!-- // container -->
</body>
</html>

Entre las etiquetas , hemos incluido enlaces a algunas fuentes de Google. También hay un enlace a nuestro archivo de estilo public_styling.css, que crearemos en un minuto.

Observe también el elemento

con una clase establecida en envase que envuelven toda nuestra aplicación, incluida la barra de navegación, el contenido de la página y las secciones de pie de página de la página.

Para ver esto en su navegador, vaya a http: //localhost/complete-blog-php/index.php.

No se ve tan genial como te hubiera encantado, ¿verdad?

El estático La carpeta como se indicó anteriormente contendrá, entre otras cosas, el estilo del sitio. Cree 3 subcarpetas dentro de la carpeta estática: css, imagenes, js. En la subcarpeta css que acaba de crear, cree un archivo llamado public_styling.css.

Abierto public_styling.css y agregue este código de estilo:

/****************
*** DEFAULTS
*****************/
* { margin: 0px; padding: 0px; }

html { height: 100%; box-sizing: border-box; }
body {
  position: relative;
  margin: 0;
  padding-bottom: 6rem;
  min-height: 100%;
}
/* HEADINGS DEFAULT */
h1, h2, h3, h4, h5, h6 { color: #444; font-family: 'Averia Serif Libre', cursive; }
a { text-decoration: none; }
ul, ol { margin-left: 40px; }
hr { margin: 10px 0px; opacity: .25; }

/* FORM DEFAULTS */
form h2 {
	margin: 25px auto;
	text-align: center;
	font-family: 'Averia Serif Libre', cursive;
}
form input {
	width: 100%;
	display: block;
	padding: 13px 13px;
	font-size: 1em;
	margin: 5px auto 10px;
	border-radius: 3px;
	box-sizing : border-box;
	background: transparent;
	border: 1px solid #3E606F;
}
form input:focus {
	outline: none;
}
/* BUTTON DEFAULT */
.btn {
	color: white;
	background: #4E6166;
	text-align: center;
	border: none;
	border-radius: 5px;
	display: block;
	letter-spacing: .1em;
	margin: 10px 0px;
	padding: 13px 20px;
	text-decoration: none;
}
.container {
	width: 80%;
	margin: 0px auto;
}
/* NAVBAR */
.navbar {
	margin: 0 auto;
    overflow: hidden;
	background-color: #3E606F;
    border-radius: 0px 0px 6px 6px;
}
.navbar ul {
    list-style-type: none;
    float: right;
}
.navbar ul li {
    float: left;
    font-family: 'Noto Serif', serif;
}
.navbar ul li a {
    display: block;
    color: white;
    text-align: center;
    padding: 20px 28px;
    text-decoration: none;
}
.navbar ul li a:hover {
	color: #B9E6F2;
    background-color: #334F5C;
}

/* LOGO */
.navbar .logo_div {
	float: left; 
	padding-top: 5px;
	padding-left: 40px;
}
.navbar .logo_div h1 {
	color: #B9E6F2;
	font-size: 3em;
	letter-spacing: 5px;
	font-weight: 100;
	font-family: 'Tangerine', cursive;
}

/* FOOTER */
.footer {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  color: white;
  background-color: #73707D;
  text-align: center;
  width: 80%;
  margin: 20px auto 0px;
  padding: 20px 0px;
}

Este código comienza con el estilo predeterminado para el sitio seguido por el estilo de la barra de navegación y el del pie de página.

Nuestra página, sin embargo, tiene algunos segmentos de código que se repetirán en muchas otras páginas del sitio web. Por ejemplo, la mayoría de las páginas necesitarán una barra de navegación y el pie de página, así como los enlaces al estilo y las fuentes que se encuentran en la sección del encabezado. En PHP, podemos escribir un fragmento de código en un archivo e incluirlo en una posición particular en varios otros archivos. Esto es lo mismo que escribir ese mismo código en esas ubicaciones pero con la ventaja de que evita la repetición de código. Hacemos esto usando el incluye o Exigir palabras clave.

Como ya habrás adivinado, es hora de hacer uso de nuestra incluye carpeta que creamos al principio. Las secciones que se repiten son la sección del encabezado, la barra de navegación y el pie de página. Entonces, en su carpeta de inclusiones, cree 3 archivos a saber head_section.php, navbar.php y footer.php.

Ve a la index.php archivo, seleccione la parte del código desde la primera línea hasta e incluyendo el “UTF-8“> etiqueta directamente encima de las etiquetas y córtela. Ahora dirígete al archivo recién creado <span class="marker">complete-blog-php / incluye / head_section.php</span> y pega el código en él. </p> <p>Entonces el<span class="marker"> head_section.php</span> archivo tiene el siguiente código:</p> <pre><code class="language-php"><!DOCTYPE html> <html> <head> <!-- Google Fonts --> <link href="https://fonts.googleapis.com/css?family=Averia+Serif+Libre|Noto+Serif|Tangerine" rel="stylesheet"> <!-- Styling for public area --> <link rel="stylesheet" href="static/css/public_styling.css"> <meta charset="UTF-8"></code></pre> <p>De vuelta en tu <span class="marker">index.php</span> file, reemplace el código que acaba de cortar con la siguiente línea:<span id="ezoic-pub-ad-placeholder-114" class="ezoic-adpicker-ad"/><span class="ezoic-ad large-leaderboard-2 large-leaderboard-2114 adtester-container adtester-container-114" data-ez-name="codewithawa_com-large-leaderboard-2"><span id="div-gpt-ad-codewithawa_com-large-leaderboard-2-0" ezaw="300" ezah="250" style="position:relative;z-index:0;display:inline-block;padding:0;min-height:250px;min-width:300px;" class="ezoic-ad"/></span></p> <pre><code class="language-php"><?php require_once('includes/head_section.php') ?></code></pre> <p>Tenga en cuenta que la línea que sigue inmediatamente a esta línea de inclusión es la etiqueta <title>. No incluimos la etiqueta <title> en el <span class="marker">head_section.php</span> archivo porque el título de cada página puede tener que ser diferente de los demás para fines de optimización de motor de búsqueda.</p> <p>Ahora hagamos lo mismo con la sección de la barra de navegación y el pie de página. </p> <p>En tus <span class="marker">index.php</span> archivo, seleccione y corte el código de la barra de navegación donde se indica con un comentario y péguelo dentro <span class="marker">navbar.php</span> en la carpeta incluye. Aquí está <span class="marker">navbar.php</span> después de pegar:</p> <pre><code class="language-php"><div class="navbar"> <div class="logo_div"> <a href="index.php"><h1>LifeBlog</h1></a> </div> <ul> <li><a class="active" href="index.php">Home</a></li> <li><a href="#news">News</a></li> <li><a href="#contact">Contact</a></li> <li><a href="#about">About</a></li> </ul> </div></code></pre> <p>Luego, en lugar de la barra de navegación en su <span class="marker">index.php</span>, agregue esta línea:</p> <pre><code class="language-php"><!-- navbar --> <?php include('includes/navbar.php') ?></code></pre> <p>En cuanto al pie de página, seleccione y corte el código desde la etiqueta </p> <div> del pie de página de apertura hasta la última línea de la página, y péguelo en el archivo footer.php recién creado. Aquí está <span class="marker">footer.php</span> archivo después de pegar:</p> <pre><code class="language-php"> <div class="footer"> <p>MyViewers &copy; <?php echo date('Y'); ?></p> </div> </div> <!-- // container --> </body> </html></code></pre> <p>Luego reemplace esta sección en la página index.php con el include para footer.php</p> <pre><code class="language-php"><!-- footer --> <?php include('includes/footer.php') ?></code></pre> <p>Después de todo este reordenamiento, nuestro <span class="marker">index.php</span> archivo tiene este aspecto:<span id="ezoic-pub-ad-placeholder-115" class="ezoic-adpicker-ad"/><span class="ezoic-ad leader-1 leader-1115 adtester-container adtester-container-115" data-ez-name="codewithawa_com-leader-1"><span id="div-gpt-ad-codewithawa_com-leader-1-0" ezaw="300" ezah="250" style="position:relative;z-index:0;display:inline-block;padding:0;min-height:250px;min-width:300px;" class="ezoic-ad"/></span></p> <pre><code class="language-php"><?php require_once('includes/head_section.php') ?> <title>LifeBlog | Home </title> </head> <body> <!-- container - wraps whole page --> <div class="container"> <!-- navbar --> <?php include('includes/navbar.php') ?> <!-- Page content --> <div class="content"> <h2 class="content-title">Recent Articles</h2> <hr> <!-- more content still to come here ... --> </div> <!-- // Page content --> <!-- footer --> <?php include('includes/footer.php') ?> </code></pre> <p>Si vuelve a cargar la página, no se observará ningún cambio.</p> <p>Ahora agreguemos un banner en la página de inicio inmediatamente debajo de la barra de navegación. Crea un nuevo archivo llamado <span class="marker">banner.php</span> en tus <span class="marker">blog-completo-</span><span class="marker">php</span><span class="marker">/ incluye</span> carpeta y pegue este código en ella:</p> <pre><code class="language-php"><div class="banner"> <div class="welcome_msg"> <h1>Today's Inspiration</h1> <p> One day your life <br> will flash before your eyes. <br> Make sure it's worth watching. <br> <span>~ Gerard Way</span> </p> <a href="register.php" class="btn">Join us!</a> </div> <div class="login_div"> <form action="index.php" method="post" > <h2>Login</h2> <input type="text" name="username" placeholder="Username"> <input type="password" name="password" placeholder="Password"> <button class="btn" type="submit" name="login_btn">Sign in</button> </form> </div> </div></code></pre> <p>Incluya esto en su <span class="marker">index.php</span> inmediatamente debajo de la barra de navegación incluyen:</p> <pre><code class="language-php"><!-- navbar is up here... --> <!-- banner --> <?php include('includes/banner.php') ?></code></pre> <p>POR FAVOR DESCARGAR<a href="https://unsplash.com/photos/LrPKL7jOldI" target="_blank" rel="noopener"> esta imagen</a>, cámbiale el nombre a <span class="marker">banner.jpg</span> y colócalo en tu <span class="marker">blog-completo-</span><span class="marker">php</span><span class="marker">/ static / images /</span> carpeta. Es la imagen de fondo del banner.</p> <p>Una vez que haya hecho eso, agregue este código CSS en su <span class="marker">public_styling.css</span> filete; es el estilo del banner:</p> <pre><code class="language-css">/* BANNER: Welcome message; */ .banner { margin: 5px auto; min-height: 400px; color: white; border-radius: 5px; background-image: url('../images/banner.jpg'); background-size: 100% 100%; } .banner .welcome_msg { width: 45%; float: left; padding: 20px; } .banner .welcome_msg h1 { color: #B9E6F2; margin: 25px 0px; font-size: 2.4em; font-family: 'Averia Serif Libre', cursive; } .banner .welcome_msg p { color: white; font-size: 1.5em; line-height: 1.8em; font-family: 'Noto Serif', serif; } .banner .welcome_msg p span { font-size: .81em; color: #3E606F; } .banner .welcome_msg a { width: 30%; margin: 20px 0px; padding: 12px 15px; font-size: 1.2em; text-decoration: none; } .banner .welcome_msg a:hover { background: #374447; } /* BANNER: Login Form; */ .banner .login_div { width: 50%; float: left; } .banner .login_div form { margin-top: 40px; } .banner .login_div form h2 { color: white; margin-bottom: 20px; font-family: 'Noto Serif', serif; } .banner .login_div form input { width: 60%; color: white; border: 1px solid white; margin: 10px auto; letter-spacing: 1.3px; font-family: 'Noto Serif', serif; } .banner .login_div form button { display: block; background: #006384; margin-left: 20%; }</code></pre> <p>Vuelve a cargar la página ahora.</p> <p>Si hiciste todo correctamente, tendrás un hermoso banner con la imagen. <span class="marker">banner.jpg</span> en su fondo, un formulario de inicio de sesión a la derecha y una cita inspiradora junto con un botón ‘Únase a nosotros’ a la izquierda. ¡Frio!</p> <p><span id="ezoic-pub-ad-placeholder-116" class="ezoic-adpicker-ad"/><span class="ezoic-ad large-mobile-banner-1 large-mobile-banner-1116 adtester-container adtester-container-116" data-ez-name="codewithawa_com-large-mobile-banner-1"><span id="div-gpt-ad-codewithawa_com-large-mobile-banner-1-0" ezaw="250" ezah="250" style="position:relative;z-index:0;display:inline-block;padding:0;width:100%;max-width:1200px;margin-left:auto !important;margin-right:auto !important;min-height:90px;min-width:728px;" class="ezoic-ad"/></span>Creemos un archivo para inicializar las variables globales de nuestra aplicación. En la carpeta raíz (complete-blog-php) de su aplicación, cree un archivo con nombre <span class="marker">config.php</span> y pega este código en él:</p> <pre><code class="language-php"><?php session_start(); // connect to database // coming soon... define ('ROOT_PATH', realpath(dirname(__FILE__))); define('BASE_URL', 'http://localhost/complete-blog-php/'); ?></code></pre> <p><span class="marker">ROOT_PATH</span> se establece en la dirección física con respecto al sistema operativo, al directorio actual en el que reside este archivo (config.php). En mi máquina, por ejemplo, ROOT_PATH tiene el valor <span class="marker">/ocho/</span><span class="marker">lampp</span><span class="marker">/</span><span class="marker">htdocs</span><span class="marker">/ blog-completo-</span><span class="marker">php /</span>. Se utiliza para incluir archivos físicos como archivos de código fuente PHP (como los que acabamos de incluir), archivos físicos descargables como imágenes, archivos de video, archivos de audio, etc. Pero en este tutorial, lo usaremos solo para incluir archivos fuente PHP.</p> <p><span class="marker">BASE_URL</span> es simplemente una dirección web que establece una URL que apunta a la raíz de nuestro sitio web. En nuestro caso, su valor es <span class="marker">http: // localhost / complete-blog-php.</span> Se utiliza para formar enlaces a CSS, imágenes, javascript. </p> <p>Espero haber explicado bastante bien esas dos variables. Si no lo entendió, quédese, puede averiguarlo mientras usamos las variables.</p> <p>Ahora incluyamos el recién creado <span class="marker">config.php</span> archivar como nuestro <strong>muy primera línea</strong> en index.php. Después de incluirlo, vamos a modificar los cuatro lugares en nuestro código donde incluimos otros segmentos de código para que ahora usen la variable <span class="marker">ROOT_PATH</span> al señalar los archivos incluidos. Después de todos estos cambios, nuestro <span class="marker">index.php</span> se verá así:</p> <pre><code class="language-php"><!-- The first include should be config.php --> <?php require_once('config.php') ?> <?php require_once( ROOT_PATH . '/includes/head_section.php') ?> <title>LifeBlog | Home </title> </head> <body> <!-- container - wraps whole page --> <div class="container"> <!-- navbar --> <?php include( ROOT_PATH . '/includes/navbar.php') ?> <!-- // navbar --> <!-- banner --> <?php include( ROOT_PATH . '/includes/banner.php') ?> <!-- // banner --> <!-- Page content --> <div class="content"> <h2 class="content-title">Recent Articles</h2> <hr> <!-- more content still to come here ... --> </div> <!-- // Page content --> <!-- footer --> <?php include( ROOT_PATH . '/includes/footer.php') ?> <!-- // footer --></code></pre> <p>Esta forma de incluir archivos tiene la ventaja de que, si posteriormente algunos archivos se mueven a otros directorios, es posible que no necesitemos actualizar las inclusiones. Además, si decidimos cambiar la ruta al directorio raíz, solo lo haremos en un lugar, es decir, en el <span class="marker">config.php</span> filete.</p> <p>Hemos terminado con la configuración básica del área pública. Hasta ahora, la aplicación no es dinámica. Aún no hemos creado una base de datos y si hace clic en el botón Únase a nosotros, obtendrá un error que dice “archivo no encontrado”. El inicio de sesión de usuario aún no se ha implementado. Todos estos se tratarán en las siguientes partes de este tutorial.</p> <p>Espero que lo hayan disfrutado. Si te gustó esta publicación y quieres más, no olvides compartirla con tus amigos usando cualquiera de los enlaces de redes sociales a continuación. Gracias</p> <p>Siguiente parte: El diseño de la base de datos.</p> </p></div> <p><script>(function (d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.11&appId=187693445124711"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script></p> <div style="display: none;" class="kk-star-ratings kksr-valign-bottom kksr-align-center kksr-disabled" data-id="1122" data-slug=""> <div class="kksr-stars"> <div class="kksr-stars-inactive"> <div class="kksr-star" data-star="1"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" data-star="2"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" data-star="3"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" data-star="4"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star" data-star="5"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> </div> <div class="kksr-stars-active" style="width: 0px;"> <div class="kksr-star"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> <div class="kksr-star"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </div> </div> </div> <div class="kksr-legend"> <span class="kksr-muted"></span> </div> </div> </div> <footer class="entry-meta"> <span class="cat-links"><span class="gp-icon icon-categories"><svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path d="M0 112c0-26.51 21.49-48 48-48h110.014a48 48 0 0 1 43.592 27.907l12.349 26.791A16 16 0 0 0 228.486 128H464c26.51 0 48 21.49 48 48v224c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112z" fill-rule="nonzero"/> </svg></span><span class="screen-reader-text">Categorías </span><a href="https://2xsoftware.es/category/tutoriales/" rel="category tag">Tutoriales</a></span> <nav id="nav-below" class="post-navigation"> <span class="screen-reader-text">Navegación de entradas</span> <div class="nav-previous"><span class="gp-icon icon-arrow-left"><svg viewBox="0 0 192 512" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"> <path d="M178.425 138.212c0 2.265-1.133 4.813-2.832 6.512L64.276 256.001l111.317 111.277c1.7 1.7 2.832 4.247 2.832 6.513 0 2.265-1.133 4.813-2.832 6.512L161.43 394.46c-1.7 1.7-4.249 2.832-6.514 2.832-2.266 0-4.816-1.133-6.515-2.832L16.407 262.514c-1.699-1.7-2.832-4.248-2.832-6.513 0-2.265 1.133-4.813 2.832-6.512l131.994-131.947c1.7-1.699 4.249-2.831 6.515-2.831 2.265 0 4.815 1.132 6.514 2.831l14.163 14.157c1.7 1.7 2.832 3.965 2.832 6.513z" fill-rule="nonzero"/> </svg></span><span class="prev" title="Anterior"><a href="https://2xsoftware.es/2021/12/15/php-crud-cree-edite-actualice-y-elimine-publicaciones-con-la-base-de-datos-mysql/" rel="prev">PHP CRUD Cree, edite, actualice y elimine publicaciones con la base de datos MySQL</a></span></div><div class="nav-next"><span class="gp-icon icon-arrow-right"><svg viewBox="0 0 192 512" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"> <path d="M178.425 256.001c0 2.266-1.133 4.815-2.832 6.515L43.599 394.509c-1.7 1.7-4.248 2.833-6.514 2.833s-4.816-1.133-6.515-2.833l-14.163-14.162c-1.699-1.7-2.832-3.966-2.832-6.515 0-2.266 1.133-4.815 2.832-6.515l111.317-111.316L16.407 144.685c-1.699-1.7-2.832-4.249-2.832-6.515s1.133-4.815 2.832-6.515l14.163-14.162c1.7-1.7 4.249-2.833 6.515-2.833s4.815 1.133 6.514 2.833l131.994 131.993c1.7 1.7 2.832 4.249 2.832 6.515z" fill-rule="nonzero"/> </svg></span><span class="next" title="Siguiente"><a href="https://2xsoftware.es/2021/12/15/carga-de-imagenes-usando-php-y-base-de-datos-mysql/" rel="next">Carga de imágenes usando php y base de datos MySQL</a></span></div> </nav> </footer> </div> </article> <div class="comments-area"> <div id="comments"> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Deja un comentario <small><a rel="nofollow" id="cancel-comment-reply-link" href="/2021/12/15/como-crear-un-blog-en-php-y-base-de-datos-mysql/#respond" style="display:none;">Cancelar la respuesta</a></small></h3><form action="https://2xsoftware.es/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-form-comment"><label for="comment" class="screen-reader-text">Comentario</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true" required></textarea></p><label for="author" class="screen-reader-text">Nombre</label><input placeholder="Nombre *" id="author" name="author" type="text" value="" size="30" /> <label for="email" class="screen-reader-text">Correo electrónico</label><input placeholder="Correo electrónico *" id="email" name="email" type="email" value="" size="30" /> <label for="url" class="screen-reader-text">Web</label><input placeholder="Web" id="url" name="url" type="url" value="" size="30" /> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Guarda mi nombre, correo electrónico y web en este navegador para la próxima vez que comente.</label></p> <p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Publicar comentario" /> <input type='hidden' name='comment_post_ID' value='1122' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p></form> </div><!-- #respond --> </div><!-- #comments --> </div> </main> </div> <div id="right-sidebar" class="widget-area sidebar is-right-sidebar" itemtype="https://schema.org/WPSideBar" itemscope> <div class="inside-right-sidebar"> <aside id="search-2" class="widget inner-padding widget_search"><form method="get" class="search-form" action="https://2xsoftware.es/"> <label> <span class="screen-reader-text">Buscar:</span> <input type="search" class="search-field" placeholder="Buscar..." value="" name="s" title="Buscar:"> </label> <button class="search-submit" aria-label="Buscar"><span class="gp-icon icon-search"><svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"> <path fill-rule="evenodd" clip-rule="evenodd" d="M208 48c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160S296.366 48 208 48zM0 208C0 93.125 93.125 0 208 0s208 93.125 208 208c0 48.741-16.765 93.566-44.843 129.024l133.826 134.018c9.366 9.379 9.355 24.575-.025 33.941-9.379 9.366-24.575 9.355-33.941-.025L337.238 370.987C301.747 399.167 256.839 416 208 416 93.125 416 0 322.875 0 208z"/> </svg></span></button></form> </aside> <aside id="recent-posts-2" class="widget inner-padding widget_recent_entries"> <h2 class="widget-title">Entradas recientes</h2> <ul> <li> <a href="https://2xsoftware.es/2021/12/16/5-aplicaciones-que-aumentaran-enormemente-su-productividad/">5 aplicaciones que aumentarán enormemente su productividad</a> </li> <li> <a href="https://2xsoftware.es/2021/12/16/me-gusta-y-no-me-gusta-el-sistema-que-usa-php-y-la-base-de-datos-mysql/">Me gusta y no me gusta el sistema que usa PHP y la base de datos MySQL</a> </li> <li> <a href="https://2xsoftware.es/2021/12/16/me-gusta-el-sistema-no-me-gusta-con-php-y-mysql/">Me gusta el sistema No me gusta con PHP y MySQL</a> </li> <li> <a href="https://2xsoftware.es/2021/12/16/validacion-de-formularios-con-javascript-codewithawa/">Validación de formularios con javascript | CodeWithAwa</a> </li> <li> <a href="https://2xsoftware.es/2021/12/16/gestion-de-cuentas-de-usuario-roles-permisos-autenticacion-php-y-mysql/">Gestión de cuentas de usuario, roles, permisos, autenticación PHP y MySQL</a> </li> </ul> </aside><aside id="recent-comments-2" class="widget inner-padding widget_recent_comments"><h2 class="widget-title">Comentarios recientes</h2><ul id="recentcomments"></ul></aside> </div> </div> </div> </div> <div class="site-footer"> <footer class="site-info" itemtype="https://schema.org/WPFooter" itemscope> <div class="inside-site-info grid-container"> <div class="copyright-bar"> ©2xsoftware 2022 </div> </div> </footer> </div> <!--[if lte IE 11]> <script src='https://2xsoftware.es/wp-content/themes/generatepress/assets/js/classList.min.js?ver=3.0.3' id='generate-classlist-js'></script> <![endif]--> <script id='wpacu-combined-js-body-group-2' type='text/javascript' src='https://2xsoftware.es/wp-content/cache/asset-cleanup/js/body-26d376868ec89eb37a4c9cfe2ca55b03a3f1f24e.js'></script> </body> </html>