Evitar contenido duplicado usando PHP y MySQL
Evitar contenido duplicado usando PHP y MySQL. La problemática de los usuarios que después de enviar la información a través de un formulario en algunos casos se pone lenta y el usuario actualiza el navegador generando contenido duplicado en nuestra base de datos. Por lo tanto, en este tutorial le enseñaremos cómo evitar el envío duplicado usando PHP y MySQL.
Evitar contenido duplicado usando PHP y MySQL
Uno de los problemas más latentes en el tema de almacenar la información en la bases de datos es el contenido duplicado. Sin embargo, quizá los registros duplicados no le den tanta importancia, pero a largo plazo generara problemas porque nuestra base de datos contendrá datos basura.
Por lo tanto, este problema de duplicidad de registros se puede solucionar de varias formas. Una de las más comunes está en el propio MySQL, aplicando la cláusula UNIQUE a la columna que no deseamos registros duplicados. Sin embargo, esto generara un error por parte de MySQL y el usuario no podrá identificarla intentando acceder su información sin resultados.
En este artículo le proponemos usar una estructura condicional para validar la existencia del registro en la base de datos.
- Si la respuesta de la consulta es mayor a cero, mostrara un mensaje con la leyenda «El registro ya existe».
- Por el contrario si la respuesta es lo opuesto, nos permitirá almacenar el registro y mostrara un mensaje «Registro guardado exitosamente».
Recursos y librería a utilizar
- Lenguaje HTML5
- PHP para hacer la conexión con el servidor de datos
- Framework Bootstrap 3.3
- Una Base de datos MySQL
1. Crear un archivo PHP y definir el formulario de envío de la información
Creamos un archivo PHP utilizando Sublime Text 3 y lo guardamos con un nombre Index.php
<html> <body> <div id="wrapper"> <div id="form_div"> <form action="main.php" method="post"> <input type="text" name="name" placeholder="Ingrese Nombre"/> <input type="text" name="email" placeholder="Ingrese Email"/> <input type="password" name="password" placeholder="********"/> <input type="submit" name="submit_registro" value="REGISTRARME"/> </form> </div> </div> </body> </html>
En este archivo creamos un formulario utilizando el Framework Bootstrap para que nuestro trabajo sea responsiva y estéticamente bien presentable.
2. Crear Base de datos con sus respectivas tablas
CREATE TABLE `usuarios` ( `id` int(11) NOT NULL, `name` varchar(150) DEFAULT NULL, `email` varchar(150) DEFAULT NULL, `password` varchar(150) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; ALTER TABLE `usuarios` ADD PRIMARY KEY (`id`); ALTER TABLE `usuarios` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
3. Crear un archivo php para comprobar y almacenar los datos en la base de datos
- Creamos un archivo php y lo guardamos con un nombre main. Php, el cual será encargado de recibir la información del formulario vía POST y lo procesara.
- Realizara la consulta si existe contenido duplicado en MySQL.
<?php // Validamos si hay resultados if(mysqli_num_rows($result)>0) { // Si es mayor a cero imprimimos que ya existe el usuario echo "Ya existe el registro que intenta registrar"; } else { // Si no hay resultados, ingresamos el registro a la base de datos $sql2 = "INSERT INTO usuarios(name, email, password)VALUES ('$name', '$email', '$pass')"; if (mysqli_query($conn, $sql2)) { // Imprimimos que se ingreso correctamente echo "Nuevo Registro Creado Exitosamente."; } else { // Mostramos si hay algun error al insertar registro echo "Error: " . $sql2 . "" . mysqli_error($conn); } } // Cerramos la conexión $conn->close(); } ?>
Conclusión
De una manera sencilla podemos realizar esta validación y así evitar contenido duplicado en PHP y MySQL. Sin embargo, puede modificar este código para adaptarlo según sus necesidades en el desarrollo de su proyecto web.
No se olvide de suscribirse a nuestro boletín diario, donde llegaran informaciones similares referidas al mundo de la programación, siéntase libre de comentar.
Una consulta Tengo una columna llamada marca y otra llamada numerodeserie. No quiero que se duplique el numero de serie en la misma marca. Ejemplo Marca Philips Nº Serie 2154, Pero si es otra marca pueda ingresar el mismo Nº de serie. Ejemplo Marca Toshiba Nº de Serie 2154. La validacion tendria que ser al momento de escribir en el input y antes de enviar a la BD
Hola Alcides
Podrias incorporar una validación via jquery y JavaScript, esta validación se realizaría en el formulario.
Aquí te dejo un articulo que hablo sobre el tema
https://www.baulphp.com/validar-usuario-existente-con-ajax-jquery-php/
O tambien puedes validar via base de datos usando la condicion UNIQUE en la columna donde deseas que no existan duplicados.
Saludos cordiales
en el caso de que solamente es un solo dato que no se repita por ejemplo feha de ingreso
Como podemos hacer para que se guarden los datos del formulario en caso de datos duplicados y así no tener que volver a escribirlos?
Gracias
me pasa lo mismo.
Hola Mauricio,
Tienes que agregar una condicional if la condición de que $result no este vacío:
Además, revisa la consulta para que no devuelva vacío. Con esto ya no te saldría el error.
Buenos dias, en la parte del codigo if(mysqli_num_rows($result)>0) me sale
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\DU\main.php on line 63
Nuevo Registro Creado Exitosamente.
Que podridia ser, si actualizo en internet automaticamente se ingresa otro registro, que puedo hacer para evitar eso, gracias
Hola,
Agrega una condicional if la condición de que $result no este vacío:
Además, deberías revisar la consulta para que no devuelva vacío.
CLIENTE PUNTOS FECHA
123 100 2019-06-29
123 100 2019-06-29
En mi situación, este caso mostrado, sería valido, ya que un cliente podría comprar el mismo día, 100 puntos en productos, y luego venir más tarde y comprar 100 más, creando dos compras seguidas, sin que otra persona haya comprado. Lo que se querría evitar, es que el usuario refresque la página, y se duplique el registro, generando una compra falsa, cuando en realidad, no ocurrió. Por lo cuál, la solución propuesta aquí, no me sirve. Alguna idea para prever esto?
No se si estoy mal pero me gustaría saber si las funciones mysql están obsoletas? Igual muchas gracias por la información y me sirvió para solucionar mi problema.
EXTREMADAMENTE UTIL! muchísimas gracias de verdad por compartir esta valiosa información
Hola Mauricio
Qué bueno que te haya servido, su comentario nos motiva a seguir compartiendo información, gracias y que tengas un buen día.