Lenguaje PHPMYSQL La base de datos

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.

Formulario para evitar contenido duplicado
Formulario para evitar contenido duplicado

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.
Evita contenido duplicado
Evita contenido duplicado
Registro guardado exitosamente
Registro guardado exitosamente
<?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.

Evitar contenido duplicado usando PHP y MySQL
Evitar contenido duplicado usando PHP y MySQL

Descarga

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

12 comentarios

  1. 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

  2. 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

    1. Hola Mauricio,

      Tienes que agregar una condicional if la condición de que $result no este vacío:

      
      if(!empty($result) AND mysqli_num_rows($result) > 0)
      

      Además, revisa la consulta para que no devuelva vacío. Con esto ya no te saldría el error.

  3. 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

    1. Hola,

      Agrega una condicional if la condición de que $result no este vacío:

      
      if(!empty($result) AND mysqli_num_rows($result) > 0)
      

      Además, deberías revisar la consulta para que no devuelva vacío.

  4. 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?

  5. 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad