Un sistema de reseñas con php es una funcionalidad que permite a los usuarios expresar su opinión sobre productos, servicios o cualquier tipo de contenido en un sitio web. Los usuarios suelen calificar algo mediante un sistema de puntuación (por ejemplo, estrellas de 1 a 5) y añadir comentarios escritos.
El objetivo principal de incluir un sistema de reseñas con php en un sitio web es mejorar la interacción de los usuarios con la plataforma, construir confianza y recopilar datos útiles para mejorar productos o servicios. Además, las reseñas son un factor clave para la toma de decisiones de otros usuarios.
Un sistema de reseñas se basa en:
1. Interfaz de usuario: Para que los usuarios puedan calificar y escribir su opinión.
2. Base de Datos: Para almacenar las reseñas.
3. Lógica de Servidor: Para procesar, guardar y mostrar las reseñas.
4. Seguridad: Para evitar abusos como spam.
La arquitectura básica:
-Frontend: La interfaz con HTML, CSS (en este caso, Bootstrap para diseño profesional) y JavaScript.
-Backend: Lógica de PHP para manejar las solicitudes.
-Base de Datos: MySQL para almacenar las reseñas.
Código Completo del Sistema de Reseñas
A continuación, te proporciono un sistema de reseñas básico y funcional.
1. Estructura de Base de Datos
Primero, crea la base de datos y la tabla:
CREATE DATABASE sistema_resenas;
USE sistema_resenas;
CREATE TABLE resenas (
id INT AUTO_INCREMENT PRIMARY KEY,
usuario VARCHAR(255) NOT NULL,
calificacion INT NOT NULL,
comentario TEXT NOT NULL,
fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. Formulario HTML y Estilo con Bootstrap
Archivo: index.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sistema de Reseñas</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h1 class="text-center">Sistema de Reseñas</h1>
<!-- Formulario para agregar reseñas -->
<form action="procesar_resena.php" method="POST" class="mt-4">
<div class="mb-3">
<label for="usuario" class="form-label">Nombre:</label>
<input type="text" id="usuario" name="usuario" class="form-control" required>
</div>
<div class="mb-3">
<label for="calificacion" class="form-label">Calificación (1 a 5):</label>
<input type="number" id="calificacion" name="calificacion" class="form-control" min="1" max="5" required>
</div>
<div class="mb-3">
<label for="comentario" class="form-label">Comentario:</label>
<textarea id="comentario" name="comentario" class="form-control" rows="4" required></textarea>
</div>
<button type="submit" class="btn btn-primary">Enviar Reseña</button>
</form>
<!-- Mostrar las reseñas -->
<div class="mt-5">
<h2>Reseñas:</h2>
<?php
$conn = new mysqli('localhost', 'root', '', 'sistema_resenas');
if ($conn->connect_error) {
die("Error de conexión: " . $conn->connect_error);
}
$sql = "SELECT * FROM resenas ORDER BY fecha DESC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "<div class='card mb-3'>
<div class='card-body'>
<h5 class='card-title'>Usuario: " . htmlspecialchars($row['usuario']) . "</h5>
<p class='card-text'>Calificación: " . $row['calificacion'] . " / 5</p>
<p class='card-text'>" . htmlspecialchars($row['comentario']) . "</p>
<p class='text-muted'>Fecha: " . $row['fecha'] . "</p>
</div>
</div>";
}
} else {
echo "<p>No hay reseñas aún.</p>";
}
$conn->close();
?>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
3. Lógica para Procesar y Guardar las Reseñas
Archivo: procesar_resena.php
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$usuario = $_POST['usuario'];
$calificacion = $_POST['calificacion'];
$comentario = $_POST['comentario'];
$conn = new mysqli('localhost', 'root', '', 'sistema_resenas');
if ($conn->connect_error) {
die("Error de conexión: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT INTO resenas (usuario, calificacion, comentario) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $usuario, $calificacion, $comentario);
if ($stmt->execute()) {
header("Location: index.php?success=1");
} else {
echo "Error: " . $stmt->error;
}
$stmt->close();
$conn->close();
} else {
header("Location: index.php");
}
?>
Explicación Línea a Línea
1. Base de Datos
CREATE TABLE resenas
: Define una tabla para almacenar las reseñas.id
: Clave primaria para identificar cada reseña.usuario
: Almacena el nombre del usuario.calificacion
: Puntuación dada por el usuario.comentario
: Texto de la reseña.fecha
: Marca temporal automática.
2. HTML y Bootstrap
form action="procesar_resena.php"
: Envia los datos del formulario al script PHP.name="..."
: Atributo usado para acceder a los datos en PHP.class="form-control"
: Estilo de Bootstrap para formularios.
3. PHP para Guardar Reseñas
$_POST
: Recoge los datos enviados por el formulario.mysqli
: Conecta con la base de datos.prepare()
: Protege contra ataques SQL Injection.bind_param()
: Asocia los valores a la consulta SQL.
4. Mostrar Reseñas
SELECT * FROM resenas
: Recupera todas las reseñas.htmlspecialchars()
: Escapa caracteres especiales para evitar ataques XSS.
Este sistema está listo para integrarse y ser utilizado en tu sitio web. Solo asegúrate de ajustar los valores de conexión a la base de datos según tu configuración.
Si estás interesado en tener tu propio sistema de reseñas personalizado, no dudes en contactar conmigo a través de mi sitio web: antoniogarciaprats.es.