Foros del Web » Programando para Internet » PHP »

Evitar Duplicados (en registro) - php - mysql

Estas en el tema de Evitar Duplicados (en registro) - php - mysql en el foro de PHP en Foros del Web. Saludos Amigos estoy haciendo un formulario que graba datos en una tabla y luego te envia un mail, este formulario posee tres campos, nombre, apellido, ...
  #1 (permalink)  
Antiguo 20/11/2004, 07:43
 
Fecha de Ingreso: noviembre-2004
Mensajes: 50
Antigüedad: 13 años, 1 mes
Puntos: 0
Exclamación Evitar Duplicados (en registro) - php - mysql

Saludos Amigos estoy haciendo un formulario que graba datos en una tabla
y luego te envia un mail, este formulario posee tres campos, nombre, apellido, email. Luego de grabarlos, envia un email a los administradores haciendoles presente de un usuario registrado nuevo. Pero mi duda es la siguiente ya que se registran no hay control sobre los emails registrados, es decir quisiera controlar que no hayga duplicados en ese campo.

Este es mi codigo php que recibe la info del formulario

Código PHP:
 mysql_connect("localhost","usuario","1245");
//Ejecucion de la sentencia SQL
mysql_db_query("newsletter","insert into cliente (nombre,apellido,email) values ('$nombre','$apellido','$email')"); 

después de eso le manda un email los admins con la funcion mail que aqui detallo


Código PHP:

<?

if(isset($_POST['Submit'])){ 
          
$nombre=$_POST['nombre']; 
          
$apellido=$_POST['apellido']; 
          
$mail=$_POST['email']; 
         
/* recipientes */ 
$para  "[email protected]", "
$para .= "[email protected]"

/* asunto */ 
$asunto "Registro de Nuevo Cliente"

/* mensaje */ 
$mensaje 
<html> 
<head> 
<title>Registro de Nuevo Cliente</title> 
</head> 
<body> 
<p><h5>Estos Son los datos del Nuevo cliente Que se ha suscrito en Pomacocha Tours</h5></p> 

 <b>Nombre </b> '
.$nombre.'
 <br>
 <br>
 <b>Apellido</b> '
.$apellido.
 <br>
 <br>
  <b>Email</b>    '
.$mail.
  
   
</body> 
</html> 
'


$cabeceras  "MIME-Version: 1.0\r\n"
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n"
$cabecera .= "Content-Transfer-encoding: 8bit\r\n"
$cabecera .= "X-Priority: 1\r\n"
$cabecera .= "X-MSmail-Priority: High\r\n"
$cabecera .= "Content-type: text/html; charset=WINDOWS-1255\\r\\n"
$cabecera .= "X-Mailer: Microsoft Office Outlook, Build 11.0.5510\r\n"//hotmail and others dont like PHP mailer. 
$cabecera .= "X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441\r\n"
$cabeceras .= "From: Sistemita de Registros <[email protected]>\r\n"

/* y ahora, enviarlo */ 
mail($para$asunto$mensaje$cabeceras); 
echo 
"<script>alert('Gracias por Registrarse en nuestro Newsletter')</script>"
}
Pero mi duda es esta como hago para que antes de que guarde datos en la tabla se verifique primero la existencia del campo email en la misma y luego recien si no existe se proceda a grabar y enviar el correo. Es decir validar primero.

Utilizaria una consulta, claro es lo primero que se me viene a la mente.. pero alguién me puede orientar? gracias...

M. Alvarez
  #2 (permalink)  
Antiguo 20/11/2004, 08:43
Avatar de macabro  
Fecha de Ingreso: enero-2003
Ubicación: venus >> ((_\
Mensajes: 254
Antigüedad: 14 años, 10 meses
Puntos: 1
Código PHP:
        $email_check "SELECT email FROM cliente  WHERE email = '$email'"// check if username exists in database.

        
if (!($email_check)) print mysql_error();
        
$result mysql_query($email_check);
        
$num_rows mysql_num_rows($result);
    
        if (
$num_rows != 0)
            {
            echo 
"<font color='#FF0000'><b>Error insertando usuario</b></font><br><font color='red'> El email ".$_POST['email']." ya existe, por favor intente con otro</font>";
        exit();
        } 
saludos
  #3 (permalink)  
Antiguo 20/11/2004, 08:46
 
Fecha de Ingreso: febrero-2004
Mensajes: 221
Antigüedad: 13 años, 10 meses
Puntos: 0
Está totalmente incorrecto eso

if (!mysql_query($email_check)) ..
  #4 (permalink)  
Antiguo 20/11/2004, 09:52
 
Fecha de Ingreso: noviembre-2004
Mensajes: 50
Antigüedad: 13 años, 1 mes
Puntos: 0
Hola Amigos, lo intente pero me sale este mensaje de error estoy revisando la consulta el codigo es el que me dio Macabro

---------------------------------------------------

$email_check = "SELECT email FROM cliente WHERE email = '$email'"; // check if username exists in database.

if (!($email_check)) print mysql_error();
$result = mysql_query($email_check);
$num_rows = mysql_num_rows($result);

if ($num_rows != 0)
{
echo "<font color='#FF0000'><b>Error insertando usuario</b></font><br><font color='red'> El email ".$_POST['email']." ya existe, por favor intente con otro</font>";
exit();
}

----------------------------------------------------

me arroja este resultado
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

Me parece que es porque me faltara seleccionar la bd, ya que estoy en un hosting y mi conexion esta ok... pero como ven yo selecciono la bd en mi consulta antes de ejecutarla.

----------------------------------------------------------------------------
mysql_db_query("newsletter","insert into cliente (nombre,apellido,email) values ('$nombre','$apellido','$email')");

---------------------------------------------------------------------------

De antemano mil gracias por su ayuda

M. Alvarez
  #5 (permalink)  
Antiguo 20/11/2004, 11:24
Avatar de macabro  
Fecha de Ingreso: enero-2003
Ubicación: venus >> ((_\
Mensajes: 254
Antigüedad: 14 años, 10 meses
Puntos: 1
Bueno trata de hacerlo asi haber si te funciona,
Código PHP:
<? 

if(isset($_POST['Submit'])){ 
          
$nombre=$_POST['nombre']; 
          
$apellido=$_POST['apellido']; 
          
$mail=$_POST['email']; 
    
//nose si en tu base de datos es, EMAIL o MAIL
    
$chek_email "SELECT * FROM clientes WHERE email='$email'"//mail
    
$result mysql_query($chek_email);
    
$numrows mysql_num_rows($result);
    if (
$numrows!=0) {
        echo 
"<font color='#FF0000'><b>Error</b> </font> el email ".$_POST['email']." ya existe, por favor intente con otro";
        exit();
}
          
/* recipientes */ 
$para  "[email protected]", "
$para .= "[email protected]"

/* asunto */ 
$asunto "Registro de Nuevo Cliente"

/* mensaje */ 
$mensaje 
<html> 
<head> 
<title>Registro de Nuevo Cliente</title> 
</head> 
<body> 
<p><h5>Estos Son los datos del Nuevo cliente Que se ha suscrito en Pomacocha Tours</h5></p> 

<b>Nombre </b> '
.$nombre.
<br> 
<br> 
<b>Apellido</b> '
.$apellido.
<br> 
<br> 
  <b>Email</b>    '
.$mail.
   
    
</body> 
</html> 
'


$cabeceras  "MIME-Version: 1.0\r\n"
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n"
$cabecera .= "Content-Transfer-encoding: 8bit\r\n"
$cabecera .= "X-Priority: 1\r\n"
$cabecera .= "X-MSmail-Priority: High\r\n"
$cabecera .= "Content-type: text/html; charset=WINDOWS-1255\\r\\n"
$cabecera .= "X-Mailer: Microsoft Office Outlook, Build 11.0.5510\r\n"//hotmail and others dont like PHP mailer. 
$cabecera .= "X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441\r\n"
$cabeceras .= "From: Sistemita de Registros <[email protected]>\r\n"

/* y ahora, enviarlo */ 
mail($para$asunto$mensaje$cabeceras); 
echo 
"<script>alert('Gracias por Registrarse en nuestro Newsletter')</script>"
}

Última edición por macabro; 20/11/2004 a las 11:26
  #6 (permalink)  
Antiguo 20/11/2004, 12:49
 
Fecha de Ingreso: noviembre-2004
Mensajes: 50
Antigüedad: 13 años, 1 mes
Puntos: 0
De acuerdo

Correcto Amigo, Funciona y ya le modifique los campos !! quedo excelente

muchas gracias por tu ayuda




M. Alvarez

Última edición por moisesfran; 20/11/2004 a las 13:46 Razón: Quedo
  #7 (permalink)  
Antiguo 22/11/2004, 09:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cuando detectes un error en una respuesta de alguien .. está muy bien que lo menciones . .pero también que indiques cual sería tu solución correcta para el problema.

Yo no veo "error" en esa instrucción .. ahí se dice que si mysql_query() povoca un error .. se muestra el error .. (se está negando con ! y dicha función devuelve un "false" si hay error) .. eso sí .. quedaría mejor con un poco más de control sobre erroes con un @ delante de la función o uso de la función error_reporting() .. y no hacer un print() sino un die() o print()+exit() para terminar la ejecución del script en ese punto o gestionarlo con un "else" para no ejecutar lo que viene a continuación y que va a provocar un error .. lo cual es controlable en ese punto ... pero eso son detalles.

Un saludo,
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:51.