Los fo­r­mu­la­rios HTML permiten a los usuarios in­tro­du­cir datos di­re­c­ta­me­n­te en una página web, que luego pueden guardarse en una base de datos. Actúan como la interfaz entre la página web y la base de datos, lo que permite registrar y gestionar entradas como nombres, di­re­c­cio­nes de correo ele­c­tró­ni­co o co­me­n­ta­rios. En esta guía te mostramos cómo guardar la in­fo­r­ma­ción de un fo­r­mu­la­rio HTML en una base de datos MySQL/MariaDB con PHP.

Bases de datos ge­s­tio­na­das
Bases de datos seguras y fáciles de usar
  • Ar­qui­te­c­tu­ra de primera ge­s­tio­na­da por expertos
  • So­lu­cio­nes flexibles adaptadas a tus ne­ce­si­da­des
  • Seguridad máxima en centros de datos con ce­r­ti­fi­ca­ción ISO

Re­qui­si­tos

Para guardar de forma fiable los datos de un fo­r­mu­la­rio HTML para MySQL en una base de datos MySQL o MariaDB, necesitas un entorno técnico que cumpla los si­guie­n­tes re­qui­si­tos:

  • Servidor web con soporte para PHP: un servidor web Apache o NGINX con PHP instalado y activado, de modo que los scripts del lado del servidor puedan procesar los datos enviados desde el fo­r­mu­la­rio.
  • Co­no­ci­mie­n­tos básicos de PHP y SQL: nociones fu­n­da­me­n­ta­les de PHP y SQL para es­ta­ble­cer la conexión con la base de datos e insertar co­rre­c­ta­me­n­te los datos del fo­r­mu­la­rio.
  • Acceso a la co­n­fi­gu­ra­ción del servidor web: permisos para ejecutar scripts PHP, crear tablas en la base de datos y, si es necesario, ajustar la co­n­fi­gu­ra­ción o los permisos del servidor.
Nota

Apache, MySQL/MariaDB y PHP suelen formar parte de una in­s­ta­la­ción estándar. Si tu servidor se ha co­n­fi­gu­ra­do con una in­s­ta­la­ción mínima, deberás instalar y co­n­fi­gu­rar estos co­m­po­ne­n­tes antes de continuar.

Cómo insertar datos de un fo­r­mu­la­rio HTML en MySQL/MariaDB

Para este tutorial, creamos una página web ficticia para un re­s­tau­ra­n­te. El objetivo es ofrecer a los clientes la po­si­bi­li­dad de dejar reseñas di­re­c­ta­me­n­te a través de la página web. Para ello, te mostramos cómo procesar fo­r­mu­la­rios HTML con un script de PHP y cómo guardar los datos in­tro­du­ci­dos en una base de datos MySQL o MariaDB.

Paso 1: crea la base de datos

En el primer paso, creamos una base de datos para almacenar la in­fo­r­ma­ción enviada desde el fo­r­mu­la­rio HTML para MySQL. Para ello, inicia sesión en el cliente de MySQL/MariaDB desde la línea de comandos:

mysql -u root -p
bash

A co­n­ti­nua­ción, crea una base de datos para las reseñas uti­li­za­n­do el comando SQL CREATE DATABASE:

CREATE DATABASE reviews;
bash

Después, se­le­c­cio­na la base de datos recién creada:

USE reviews;
bash

Para este ejemplo y con el fin de si­m­pli­fi­car el proceso, vamos a crear una tabla con los si­guie­n­tes campos:

  • Campo de ID: se configura con AUTO_INCREMENT, lo que hace que el valor aumente au­to­má­ti­ca­me­n­te con cada nuevo registro y garantiza un ide­n­ti­fi­ca­dor único.
  • Nombre de la persona que deja la reseña: campo de texto con una longitud máxima de 100 ca­ra­c­te­res.
  • Va­lo­ra­ción por estrellas: valor numérico del 1 al 5, definido con el tipo de dato TINYINT.
  • Detalles de la reseña: campo de texto para co­me­n­ta­rios adi­cio­na­les, definido como VARCHAR(4000) para que quepan unas 500 palabras.

Crea ahora la tabla con el comando CREATE TABLE:

CREATE TABLE user_review (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
reviewer_name VARCHAR(100),
star_rating TINYINT,
details VARCHAR(4000)
);
bash
IONOS CLOUD Compute Engine
La solución IaaS ideal para tus cargas de trabajo
  • vCPU económico con núcleos dedicados
  • Flexible y sin periodo mínimo co­n­tra­c­tual
  • Soporte experto 24/7

Paso 2: crea un usuario

Por motivos de seguridad, es re­co­me­n­da­ble crear un usuario es­pe­cí­fi­co para cada base de datos, es­pe­cia­l­me­n­te cuando se accede a ella desde una página web. De este modo, limitas los permisos y reduces posibles riesgos en caso de in­ci­de­n­cias de seguridad.

El siguiente comando de MariaDB crea un usuario llamado review_site con la co­n­tra­se­ña JxSLRkdutW y le concede acceso a la base de datos con las reseñas:

GRANT ALL ON reviews.* TO review_site@localhost IDENTIFIED BY 'JxSLRkdutW';
bash

Si utilizas MySQL, el uso de GRANT ... IDENTIFIED BY ... ya no se re­co­mie­n­da en las versiones actuales. En su lugar, primero debes crear el usuario con CREATE USER y, a co­n­ti­nua­ción, asignarle los permisos con GRANT:

CREATE USER 'review_site'@'localhost' IDENTIFIED BY 'JxSLRkdutW';
GRANT ALL PRIVILEGES ON reviews.* TO 'review_site'@'localhost';
FLUSH PRIVILEGES;
bash

Paso 3: crea el fo­r­mu­la­rio HTML para MySQL en la página web

En el siguiente paso, creamos el fo­r­mu­la­rio de va­lo­ra­ción para las reseñas de clientes. Para ello, crea un archivo llamado reviews.html en tu espacio web y ábrelo para editarlo. Por ejemplo, si deseas crear el archivo en /var/www/html uti­li­za­n­do el editor de texto nano, ejecuta el siguiente comando:

sudo nano /var/www/html/reviews.html
bash

A co­n­ti­nua­ción, añade el siguiente contenido al archivo:

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Valoración del restaurante</title>
</head>
<body>
<p>¿Cómo ha sido tu experiencia con nosotros?</p>
<form action="addreview.php" method="POST">
Tu nombre: <input type="text" name="reviewer_name"><br><br>
¿Cuántas estrellas nos darías?
<select name="star_rating">
<option value="1">1 estrella</option>
<option value="2">2 estrellas</option>
<option value="3">3 estrellas</option>
<option value="4">4 estrellas</option>
<option value="5">5 estrellas</option>
</select><br><br>
Tu reseña:<br>
<textarea name="details" rows="10" cols="30"></textarea><br><br>
<input type="submit" value="Enviar" name="submit">
</form>
</body>
</html>
html

A co­n­ti­nua­ción, ten en cuenta los si­guie­n­tes aspectos sobre este fo­r­mu­la­rio HTML para MySQL básico:

  • Este fo­r­mu­la­rio usa el método POST para enviar datos al script PHP addreview.php.
  • El atributo name de cada campo de entrada se utiliza en el siguiente paso como nombre de variable en PHP. Por lo general, resulta práctico usar los mismos nombres que los campos de la tabla de la base de datos.
  • Nunca confíes en las entradas de los usuarios. En este ejemplo, la va­lo­ra­ción por estrellas debe ser un número del 1 al 5. Si se pe­r­mi­tie­ra in­tro­du­cir el valor ma­nua­l­me­n­te, podrían enviarse datos no válidos. Por ello, es pre­fe­ri­ble ofrecer valores pre­de­fi­ni­dos mediante un menú de­s­ple­ga­ble.

Paso 4: crea un script PHP

En el último paso, creamos el script PHP que inserta los datos del fo­r­mu­la­rio HTML para MySQL en la base de datos. Para ello, es­ta­ble­ce­mos una conexión con MySQL o MariaDB, recogemos las entradas del fo­r­mu­la­rio y las guardamos en la tabla creada an­te­rio­r­me­n­te. Primero, crea un archivo addreview.php en tu espacio web y ábrelo para editarlo. Ahí colocarás el código PHP. Por ejemplo, para crear el archivo en /var/www/html con nano, utiliza este comando:

sudo nano /var/www/html/addreview.php
bash

Todo script PHP debe comenzar con la etiqueta de apertura:

<?php
php

A co­n­ti­nua­ción, añade un bloque con los datos de conexión a MySQL/MariaDB: ubicación del servidor (localhost), nombre de la base de datos, usuario y co­n­tra­se­ña.

$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db = "reviews";
php

El siguiente fragmento establece la conexión mediante mysqli_connect y muestra un error si falla:

$dbconnect = mysqli_connect($hostname, $username, $password, $db);
if (mysqli_connect_errno()) {
die("Database connection failed: " . mysqli_connect_error());
}
php

En el siguiente paso, recogemos los datos que el usuario ha in­tro­du­ci­do a través del fo­r­mu­la­rio HTML para MySQL y los guardamos en variables PHP para poder pro­ce­sar­los e in­se­r­tar­los en la base de datos:

if (isset($_POST['submit'])) {
$reviewer_name = $_POST['reviewer_name'];
$star_rating = $_POST['star_rating'];
$details = $_POST['details'];
php

Ahora debemos escribir en la base de datos los datos in­tro­du­ci­dos. Para ello, creamos una consulta SQL INSERT que toma los valores de las variables y los inserta en los campos co­rre­s­po­n­die­n­tes de la tabla user_review. Para evitar in­ye­c­cio­nes SQL, uti­li­za­mos Prepared Sta­te­me­nts:

$stmt = $dbconnect->prepare("INSERT INTO user_review (reviewer_name, star_rating, details) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $reviewer_name, $star_rating, $details);
$stmt->execute();
php

Añade una in­s­tru­c­ción if-else en PHP que muestre un mensaje de error si el proceso falla. Si se completa co­rre­c­ta­me­n­te, muestra un mensaje de agra­de­ci­mie­n­to:

if ($stmt->execute()) {
echo "Gracias por tu reseña.";
} else {
die("Se ha producido un error.");
}
$stmt->close();
}
php

Por último, cierra la in­s­tru­c­ción if de apertura y añade la etiqueta de cierre de PHP:

}
?>
php
Nota

Si recibes el mensaje de error “Access denied for user ‘review_site’@‘localhost’ (using password: YES)”, puedes comprobar las cre­de­n­cia­les iniciando sesión ma­nua­l­me­n­te en MySQL/MariaDB desde la línea de comandos.

Paso 5: prueba el script

Para probar el script, abre reviews.html en el navegador y envía una va­lo­ra­ción de ejemplo. Después, inicia sesión en la base de datos de reseñas desde la línea de comandos con el cliente MySQL/MariaDB:

mysql -u root -p reviews
bash

Usa SELECT * FROM user_review para mostrar todo el contenido de la tabla:

MariaDB [reviews]> SELECT * FROM user_review;
+----+---------------+-------------+----------------------------------------------------+
| id | reviewer_name | star_rating | details                                            |
+----+---------------+-------------+----------------------------------------------------+
|  1 | Pedro         |         5   | ¡El calzone está delicioso!                        |
|  2 | Laura         |         1   | No recomiendo el calzone.                          |
+----+---------------+-------------+----------------------------------------------------+
2 rows in set (0.00 sec)
bash

El script PHP completo es:

<?php
// Datos de conexión a la base de datos
$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db       = "reviews";
// Establecer conexión con la base de datos
$dbconnect = new mysqli($hostname, $username, $password, $db);
// Comprobar la conexión
if ($dbconnect->connect_error) {
    die("Database connection failed: " . $dbconnect->connect_error);
}
// Ejecutar solo si se ha enviado el formulario
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) {
    // Validar entradas (comprobación mínima)
    $reviewer_name = trim($_POST['reviewer_name'] ?? '');
    $star_rating   = intval($_POST['star_rating'] ?? 0);
    $details       = trim($_POST['details'] ?? '');
    // Validación sencilla
    if ($reviewer_name === '' || $star_rating < 1 || $star_rating > 5 || $details === '') {
        die("Por favor, rellena todos los campos correctamente.");
    }
    // Crear una sentencia preparada
    $stmt = $dbconnect->prepare("INSERT INTO user_review (reviewer_name, star_rating, details) VALUES (?, ?, ?)");
    if ($stmt === false) {
        die("Database error: " . $dbconnect->error);
    }
    $stmt->bind_param("sis", $reviewer_name, $star_rating, $details);
    // Ejecutar la sentencia
    if ($stmt->execute()) {
        echo "Gracias por tu reseña.";
    } else {
        die("Se ha producido un error: " . $stmt->error);
    }
    $stmt->close();
}
// Cerrar la conexión
$dbconnect->close();
?>
php
Ir al menú principal