Foros del Web » Programando para Internet » PHP »

Evitar registros duplicados formulario

Estas en el tema de Evitar registros duplicados formulario en el foro de PHP en Foros del Web. Hola de nuevo amigos, bueno, hace poco abrí un post para preguntar una dudita que tenía y fue resuelta facilmente. Pues bien, esta vez tengo ...
  #1 (permalink)  
Antiguo 13/07/2012, 03:45
Avatar de ermuni  
Fecha de Ingreso: noviembre-2010
Mensajes: 33
Antigüedad: 13 años, 5 meses
Puntos: 1
Evitar registros duplicados formulario

Hola de nuevo amigos, bueno, hace poco abrí un post para preguntar una dudita que tenía y fue resuelta facilmente. Pues bien, esta vez tengo otra duda, he intentado solventarla a partir de la información que he encontrado en otros post con dudas similares, pero me ha sido imposible.

La duda es la siguiente, tengo un formulario conectado a una base de datos, donde los usuarios ingresan tres simples datos (nombre, apellidos y email). Mi problema es que no quiero que haya duplicados de e-mail en el registro, es decir que una persona se registre mas de una vez con el mismo e-mail.

He intentado con diferentes códigos que he visto por el foro y sigo con el mismo problema, se puede seguir registrando con el mismo e-mail como veces se quiera.

Pongo el código del formulario (por si acaso) y del php a ver si podeis ayudarme, se que solo será añadir un par de lineas de forma adecuada, pero no se cual, seguro que para vosotros no es nada. Muchas gracias.

Gracias

Formulario
Código HTML:
<form id="f" name="f" method="post" action="registrar_c.php" onsubmit="return envioR();">
                         <table width="200" border="0">
                              <tbody><tr>
                                <td>
                                  <input name="txtnombre" type="text" id="txtnombre" value="Nombre" onclick="javascript:limpiar('txtnombre')">
                                </td>
                              </tr>
                              <tr>
                                <td><input name="txtapellidos" type="text" id="txtapellidos" value="Apellidos" onclick="javascript:limpiar('txtapellidos')"></td>
                              </tr>
                              <tr>
                                <td><input name="txtemail" type="text" id="txtemail" value="Email" onclick="javascript:limpiar('txtemail')"></td>
                              </tr>
                              <tr>
                                <td><input type="submit" name="Submit" value="Apuntarme"></td>
                              </tr>
                            </tbody></table>
                
                        </form>
                        
                        <script language="JavaScript" type="text/javascript">
	
	function limpiar(campo){ 
		var f = document.getElementById("f");
		if(campo == "txtnombre")
			f.txtnombre.value = "";
		if(campo == "txtapellidos")
			f.txtapellidos.value = "";
		if(campo == "txtemail")
			f.txtemail.value = "";
	
	}


	function envioR(){
		try{
			var ERG_email = /^(.+\@.+\..+)$/;

			var f = document.getElementById("f");
			
			
			if (f.txtnombre.value == "" || f.txtnombre.value == "Nombre"){
				f.txtnombre.value="Escribe tu nombre";
				return false;
			}

			if (f.txtapellidos.value == "" || f.txtapellidos.value == "Apellidos"){
				f.txtapellidos.value="Escribe tus apellidos";
				return false;
			}

			if (f.txtemail.value == "" || f.txtemail.value == "Email"){
				f.txtemail.value="Escribe tu E-mail";
				return false;
			}

			if(!ERG_email.test(f.txtemail.value)) {
				f.txtemail.value="Formato de email incorrecto";
				return false;
			}


		}catch(unerror){
			alert(unerror);
			return false;
		}

	}
	
	
</script> 
php
Código PHP:
<?php
include("conexion.php");
if(isset(
$_POST['txtnombre']) && !empty($_POST['txtnombre']) &&
isset(
$_POST['txtapellidos']) && !empty($_POST['txtapellidos']) &&
isset(
$_POST['txtemail']) && !empty($_POST['txtemail']))

{
    
$con=mysql_connect($host,$user,$pw)
    or die (
"problemas al conectar server");
    
    
mysql_select_db($db,$con)
    or die (
"problemas al conectar db");



    
mysql_query("INSERT INTO registro (NOMBRE,APELLIDOS,EMAIL)
VALUES ('$_POST[txtnombre]','$_POST[txtapellidos]','$_POST[txtemail]')"
,$con);
      echo
"Acabas de apuntarte correctamente al sorteo. Buena suerte!";
    
}
    
?>
  #2 (permalink)  
Antiguo 13/07/2012, 04:17
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Evitar registros duplicados formulario

Para que no haya duplicados en la tabla, lo puedes solucionar desde mysql, creando el campo email como UNIQUE.

Saludos.
  #3 (permalink)  
Antiguo 13/07/2012, 05:10
Avatar de ermuni  
Fecha de Ingreso: noviembre-2010
Mensajes: 33
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Evitar registros duplicados formulario

Cita:
Iniciado por oscartt67 Ver Mensaje
Para que no haya duplicados en la tabla, lo puedes solucionar desde mysql, creando el campo email como UNIQUE.

Saludos.
Eso mismo he pensado, probaré! Muchas gracias :)
  #4 (permalink)  
Antiguo 13/07/2012, 06:08
Avatar de ermuni  
Fecha de Ingreso: noviembre-2010
Mensajes: 33
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Evitar registros duplicados formulario

Bueno he probado y cumple su función, pero necesitaría algo de código para que avisara a la gente que ese e-mail ha sido ya introducido y no puede repetirse :S Es lo que estuve probando con código que vi por otros post y no funcionaban bien. Lo mismo no lo inserté correctamente en mi código.
  #5 (permalink)  
Antiguo 13/07/2012, 12:09
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Evitar registros duplicados formulario

Podrias hacer un select email from registro where email=$_POST[txtemail] antes del insert para comprobar si existe ya en la tabla, pero creo más óptimo que lo hagas de una sola tacada con el insert y capturar el error.


Código PHP:
    $result=mysql_query("INSERT INTO registro (NOMBRE,APELLIDOS,EMAIL) 
VALUES ('$_POST[txtnombre]','$_POST[txtapellidos]','$_POST[txtemail]')"
,$con);

if (!
$result) {
    
//aquí puedes hacer un analisis de  mysql_error() y montar tu echo de error.
    
echo $el_error;
} else {
    echo
"Acabas de apuntarte correctamente al sorteo. Buena suerte!";



saludos.
  #6 (permalink)  
Antiguo 15/07/2012, 15:45
Avatar de ermuni  
Fecha de Ingreso: noviembre-2010
Mensajes: 33
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Evitar registros duplicados formulario

Creo que soy un poco torpe, pongo esto:

Código PHP:
$result=mysql_query("INSERT INTO registro (NOMBRE,APELLIDOS,EMAIL)
VALUES ('$_POST[txtnombre]','$_POST[txtapellidos]','$_POST[txtemail]')"
,$con);
      
}
if (
mysql_num_rows($result)) {
   
    echo 
'el registro ya existe';
} else {
    echo
"Acabas de apuntarte correctamente al sorteo. Buena suerte!";

Lo estoy haciendo mal ya que no consigo nada :S
  #7 (permalink)  
Antiguo 15/07/2012, 16:02
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Evitar registros duplicados formulario

Lo que tenes que hacer antes del insert es un select de $_POST[txtemail] de la tabla, luego usa mysql_num_rows para ver si te devuelve 1 o 0, o sea si devuelve 1 es porque existe ese email en tu tabla, sino devuelve 0, y ahi cuando devuelve 0 es cuando haces el insert
  #8 (permalink)  
Antiguo 19/07/2012, 09:47
Avatar de ermuni  
Fecha de Ingreso: noviembre-2010
Mensajes: 33
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Evitar registros duplicados formulario

Amigos, estoy aburrido, no consigo solventar mi problema y me urge un poco :(

Código PHP:
<?php
include("conexion.php");
if(isset(
$_POST['txtnombre']) && !empty($_POST['txtnombre']) &&
isset(
$_POST['txtapellidos']) && !empty($_POST['txtapellidos']) &&
isset(
$_POST['txtemail']) && !empty($_POST['txtemail']))

{
    
$con=mysql_connect($host,$user,$pw)
    or die (
"problemas al conectar server");
    
    
mysql_select_db($db,$con)
    or die (
"problemas al conectar db");


$busquedamysql_query("SELECT EMAIL FROM registro WHERE txtemail='$_POST[txtemail]'"); 
 
 
// Paso 3: vemos si hubo coincidencias 
if(mysql_num_rows($busqueda)>0) { // ó " !=0 " como se quiera ver 
      // Inciso a:  
      
echo "El email elegido ha sido ya usado. Por favor intente con otro.<br>";  
} else 

    
$result=mysql_query("INSERT INTO registro (NOMBRE,APELLIDOS,EMAIL)
VALUES ('$_POST[txtnombre]','$_POST[txtapellidos]','$_POST[txtemail]')"
,$con);
      
      
      
      echo
"Acabas de apuntarte correctamente al sorteo. Buena suerte!";
    }
    
?>
Alguna ayuda? Gracias

Última edición por ermuni; 19/07/2012 a las 10:05

Etiquetas: duplicados, formulario, mysql, registro, registros, sql, usuarios
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 05:30.