Foros del Web » Programando para Internet » PHP »

Como evitar que se inserten duplicados mediante formulario

Estas en el tema de Como evitar que se inserten duplicados mediante formulario en el foro de PHP en Foros del Web. Hola buenas, estoy creando un sistema de recogida de firmas lo tengo todo funcionando lo unico que una cosa que tengo implementada ya que no ...
  #1 (permalink)  
Antiguo 31/05/2011, 19:03
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Como evitar que se inserten duplicados mediante formulario

Hola buenas, estoy creando un sistema de recogida de firmas lo tengo todo funcionando lo unico que una cosa que tengo implementada ya que no se como hacerla y es que no se permita introducir duplicados, es decir, que no se pueda poner un dni dos veces por ejemplo, ni un nombre, para evitar dobles firmas.

Os dejo el codigo que utilice y a ver si alguien que sepa hacerlo me hecha un cable, gracias.

Y de paso si alguien quiere hacer algo similar que me aviso y le paso la sql ;)

Código PHP:
 <?php

        
// datos para la db
    
$dbhost='';
    
$dbusername='';
    
$dbuserpass='';
    
$dbname='';
    
// Conexin a la base de datos
    
mysql_connect ($dbhost$dbusername$dbuserpass);
    
mysql_select_db($dbname) or die("No se puede seleccionar la base de datos");

    
//Ip cliente: 
    
@$pfw_ip$_SERVER['REMOTE_ADDR'];    


    
//SI SE HA PULSADO ENVIAR, SE COMPRUEBAN LOS DATOS INSERTADOS
    
if(isset($_POST['enviarCorreo'])){
        
//se muestra el formulario de nuevo
        
            
        
if(!$nombre=filter_input(INPUT_POST,"nombre",FILTER_SANITIZE_STRING))
            
$errores[]="El campo nombre no puede estar vacio.";            
            
        
$dni=filter_input(INPUT_POST,"dni",FILTER_SANITIZE_STRING);
        if(
$dni=="")
            
$errores[]="El campo DNI no puede estar vacio";
            
    
        
        if(isset(
$errores)){
            
?>
            <br /><span class="rojo"><b>No puede firmar</b></span><b><span class='rojo'> 
debido a los siguientes errores:  </span></b>
                
            <?php    
            
echo "<ul class='errores'>";
            foreach(
$errores as $error)
                echo 
'<li>'.$error.'</li>';
            echo 
'</ul>';
            
            
            
?>
            </p>
            <form name="formularioContacto" action="index.php" method="post">
                <p>&nbsp;</p>
                <table class="formulario">                
                    <tr><td class="izquierda">Nombre Completo:</td><td><input type="text"  name="nombre" value="<?php echo $nombre;?>" size="50"/></td></tr>
                    <tr><td class="izquierda">DNI:</td><td><input type="text" value="<?php echo $dni;?>"  name="dni"  size="9"/></td></tr>
                    <tr><td class="izquierda"></td><td><input type="submit" name="enviarCorreo" value="Firmar" /><input name='limpiar' type='reset' value='Limpiar' /></td></tr>

            
                </table>
            </form>
        <?php

        
    
        
}
        
//SI NO HAY ERRORES Y SE HA PULSADO EN ENVIAR, SE GUARDA EN LA DB Y SE IMPRIME MENSAJE DE EXITO
        
else{        
            
//Todo parece correcto procedemos con la inserccion
            
$query "INSERT INTO firmas (nombre, dni) VALUES('$nombre','$dni')";
            
mysql_query($query) or die(mysql_error());

            echo 
"<br /><b><span class='blanco'>GRACIAS POR FIRMAR </span></b>";
                
        }
    }



    
    
//SI NO SE HA PULSADO ENVIAR SE MUESTRA EL FORMULARIO 
    
else{?>
        <form name="formularioContacto" action="index.php" method="post">
        <p>&nbsp;</p>
        <table class="formulario" bgcolor="#64A3CF" style="border: 1px dashed #FFFFFF">                    
              <tr><td class="izquierda"><font size="2">Nombre Completo:</font></td><td><input type="text"  name="nombre" value="<?php echo $nombre;?>" size="50"/></td></tr>
                    <tr><td class="izquierda"><font size="2">DNI:</font></td><td>
          <input type="text" value="<?php echo $dni;?>"  name="dni"  size="9"/></td></tr>
              <tr><td class="izquierda"></td><td><input type="submit" name="enviarCorreo" value="Firmar" /></td></tr>            
                </table>
        </form>
        <?php
    
}


    
?>

Os pegue el codigo entero aunque creo que con esta parte ya os valdria (no estoy seguro)

Código PHP:
        if(!$nombre=filter_input(INPUT_POST,"nombre",FILTER_SANITIZE_STRING)) 
            $errores[]="El campo nombre no puede estar vacio.";             
             
        $dni=filter_input(INPUT_POST,"dni",FILTER_SANITIZE_STRING); 
        if($dni=="") 
            $errores[]="El campo DNI no puede estar vacio"; 
             
     
         
        if(isset($errores)){ 
            ?> 
            <br /><span class="rojo"><b>No puede firmar</b></span><b><span class='rojo'>  
debido a los siguientes errores:  </span></b> 
                 
            <?php     
            
echo "<ul class='errores'>"
            foreach(
$errores as $error
                echo 
'<li>'.$error.'</li>'
            echo 
'</ul>'
             
             
            
?>
  #2 (permalink)  
Antiguo 31/05/2011, 19:29
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Como evitar que se inserten duplicados mediante formulario

Con algo así debería valer.
Código PHP:
$checkdupli mysql_query("SELECT nombre, dni FROM firmas WHERE nombre='$nombre' AND firma='$firma'"); 
$dupli mysql_num_rows($checkdupli);
if (
$dupli 0) {
    echo 
'Hay registros duplicados';
} else {
    
// Esta es la parte que se ejecuta si no hay registros duplicados
    
$query "INSERT INTO firmas (nombre, dni) VALUES('$nombre','$dni')";
    
mysql_query($query) or die(mysql_error());

Espero que sirva, saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 31/05/2011, 19:43
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Como evitar que se inserten duplicados mediante formulario

Cita:
Iniciado por Uncontroled_Duck Ver Mensaje
Con algo así debería valer.
Código PHP:
$checkdupli mysql_query("SELECT nombre, dni FROM firmas WHERE nombre='$nombre' AND firma='$firma'"); 
$dupli mysql_num_rows($checkdupli);
if (
$dupli 0) {
    echo 
'Hay registros duplicados';
} else {
    
// Esta es la parte que se ejecuta si no hay registros duplicados
    
$query "INSERT INTO firmas (nombre, dni) VALUES('$nombre','$dni')";
    
mysql_query($query) or die(mysql_error());

Espero que sirva, saludos,
Pero colocando esto en el resto del codigo, daria un mensaje de error al realizar la firma avisando que ya se ha firmado? Es lo que quiero, osea no quiero poder comprobar yo si los hay o no, quiero evitar que los haya
  #4 (permalink)  
Antiguo 31/05/2011, 19:47
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Como evitar que se inserten duplicados mediante formulario

Da el mensaje si intentan introducir datos duplicados y bloquea el INSERT.

En el caso de ser datos no duplicados, los registra y sigue el curso normal que tienes en el code.

Tienes que ponerlo dentro del else que tienes, quedaría así:
Código PHP:
//....
        //SI NO HAY ERRORES Y SE HA PULSADO EN ENVIAR, SE GUARDA EN LA DB Y SE IMPRIME MENSAJE DE EXITO
        
else {
            
$checkdupli mysql_query("SELECT nombre, dni FROM firmas WHERE nombre='$nombre' AND firma='$firma'");  
            
$dupli mysql_num_rows($checkdupli); 
            if (
$dupli 0) { 
                echo 
'Hay registros duplicados'
            } else {     
            
//Todo parece correcto procedemos con la inserccion
            
$query "INSERT INTO firmas (nombre, dni) VALUES('$nombre','$dni')";
            
mysql_query($query) or die(mysql_error());

            echo 
"<br /><b><span class='blanco'>GRACIAS POR FIRMAR </span></b>";
           }
        }
//..... 
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Última edición por Uncontroled_Duck; 31/05/2011 a las 19:57 Razón: Añadir code
  #5 (permalink)  
Antiguo 31/05/2011, 20:23
Avatar de ricardo_tu  
Fecha de Ingreso: noviembre-2010
Ubicación: Mas aca del mas alla
Mensajes: 222
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Como evitar que se inserten duplicados mediante formulario

Hola, una idea que puedes considerar puede ser asignar UNIQUE a la columna DNI en tu base de datos. De ese modo la grabación en la tabla fallará. Cambié las lineas finales del código para adaptarlas a la sugerencia.
Código PHP:
       //Todo parece correcto procedemos con la inserccion
            
$query "INSERT INTO firmas (nombre, dni) VALUES('$nombre','$dni')";
            if (
mysql_query($query)) 
{
echo 
"<br /><b><span class='blanco'>GRACIAS POR FIRMAR </span></b>";
}else{ 
echo 
"<br /><b><span class='blanco'>El DNI ya fue registrado</span></b>";

Es una "solución" extremadamente simple, pero da buen resultado. Saludos.
__________________
La ciencia al poder. Pazciencia ya viene
  #6 (permalink)  
Antiguo 01/06/2011, 16:44
Avatar de DCienfuegos  
Fecha de Ingreso: febrero-2009
Ubicación: Asturias
Mensajes: 195
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Como evitar que se inserten duplicados mediante formulario

Cita:
Iniciado por ricardo_tu Ver Mensaje
Hola, una idea que puedes considerar puede ser asignar UNIQUE a la columna DNI en tu base de datos. De ese modo la grabación en la tabla fallará. Cambié las lineas finales del código para adaptarlas a la sugerencia.
Código PHP:
       //Todo parece correcto procedemos con la inserccion
            
$query "INSERT INTO firmas (nombre, dni) VALUES('$nombre','$dni')";
            if (
mysql_query($query)) 
{
echo 
"<br /><b><span class='blanco'>GRACIAS POR FIRMAR </span></b>";
}else{ 
echo 
"<br /><b><span class='blanco'>El DNI ya fue registrado</span></b>";

Es una "solución" extremadamente simple, pero da buen resultado. Saludos.
como puedo asignar unique a la columna dni desde phpmyadmin ?

Etiquetas: duplicados, mediante, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:30.