Foros del Web » Programando para Internet » PHP »

PHP OO Confirmación registro por mail

Estas en el tema de Confirmación registro por mail en el foro de PHP en Foros del Web. Hola forosdelwebmaniacos. Necesito vuestra ayuda, quiero hacer que cuando un usuario se registre, automaticamente le envie un correo con una confirmación del registro. De momento, ...
  #1 (permalink)  
Antiguo 20/03/2014, 15:29
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 8 meses
Puntos: 2
Pregunta Confirmación registro por mail

Hola forosdelwebmaniacos. Necesito vuestra ayuda, quiero hacer que cuando un usuario se registre, automaticamente le envie un correo con una confirmación del registro.

De momento, tengo este código de mail.php:

Código PHP:
<?php
require_once('./config/funciones.php');
conectar('localhost''root''123456''ofserker');

$usuario $_POST['usernamesignup']; 
$correo $_POST['emailsignup']; 
//... 

//<-- Tus rutinas para validar los datos, si están completos etc... 

if(empty($usuario)){ 
    echo 
"Debes poner algo como usuario"
    exit; 


//--> 

$aleatorio uniqid(); //Genera un id único para identificar la cuenta a traves del correo. 
$contrasena rand(19999999); //Devuelve un número aleatorio entre los dos rangos. Lo usuaremos como 
                                //Contraseña temporal. 
                                 
$sql "Insert Into users (user, pass, mail, code, active) Values ('$usuario', '$contrasena', '$correo', '$aleatorio', 0)"

//Tus rutinas para insertar en la base de datos. 

$mensaje "Registro en tuweb.com\n\n"
$mensaje .= "Estos son tus datos de registro:\n"
$mensaje .= "Usuario: $usuario.\n"
$mensaje .= "Contraseña: $contrasena.\n\n"
$mensaje .= "Debes activar tu cuenta pulsando este enlace: http://www.ofserker.netai.net/activacion.php?id=$aleatorio"

$asunto "Activación de tu cuenta en ofserker.netai.net"

if(
mail($correo,$asunto,$mensaje)){ 
   
echo 
" Se ha enviado un mensaje a tu correo electronico con el código de activación"
}else{ 
    echo 
"Ha ocurrido un error y no se puede enviar el correo"


?>
Lo malo, es que en el localhost, cuando registro a alguien, no sale un código al azar. Yo creo que es culpa de la db. Bueno no me enrollo más y aqui va la foto:



Espero atentamente vuestras respuestas:
-OfSerker
  #2 (permalink)  
Antiguo 21/03/2014, 18:33
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Confirmación registro por mail

Qué te hace pensar que "es culpa de la db"?

De entrada, estás armando la consulta, pero no veo que la ejecutes.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 21/03/2014, 20:54
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: Confirmación registro por mail

Y se supone que deberías verificarlo XD Pero no estas ejecutando la consulta $sql
No se que usas si MYSQL o PDO o no se, pero te faltaría
Código PHP:
Ver original 


si el usuario va a presionar ese link debería existir el archivo activacion.php

Y como esta enviando una variable llamada id deberias recibirla en dicha página...

ya despues te toca un trabajo de verificacion por ejemplo:
Código PHP:
<?php
$key 
$_GET['id'];

$query=mysql_query("SELECT * FROM users WHERE id='$key'");
if(
$check=mysql_fetch_array($query)) //con este if verificamos que el codigo existe en la BD 
            

            
                if(
$check['active']=="1"//Si el mail ya esta verificado 
                

                    echo 
"Tu mail ya esta verificado";
                } 
                elseif(
$check['active']=="0"//Si no esta verificado 
                

                
//Actualizamos la BD, y cambiamos el valor de dafault "NO" en verificado por "SI" 
                    
$sql "UPDATE users SET active='1' WHERE id='$key'"
                    
mysql_query($sql) or die("Error query ".mysql_error());  
                     echo 
"<p>Gracias. Hemos verificado su email. Ahora puede acceder con su usuario y clave</p>";
                     echo 
"<a href='../index.php'>Loguearse</a>";
                     
//habilitamos el formulario de login luego de la bienvenida
                    
                
                

            } 
            else 
//Si el codigo de verificacion no existe 
            

            echo 
"<p>Tu c&oacute;digo es incorrecto</p>"
            echo 
"<a href='../index.php'>Loguearse</a>";
            } 
        
?>
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #4 (permalink)  
Antiguo 22/03/2014, 13:57
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 8 meses
Puntos: 2
Respuesta: Confirmación registro por mail

Hola, gracias por responder. Cuando pueda, probaré el codigo y te dire algo.

Yo estube mirando hilos y dicen algunos que se necesita el php.ini para enviar emails. Yo uso el servidor 000webhost. No se si eso afecta en algo.

Atentamente:
-OfSerker
  #5 (permalink)  
Antiguo 22/03/2014, 14:23
Avatar de TSG
TSG
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 373
Antigüedad: 11 años, 2 meses
Puntos: 9
Respuesta: Confirmación registro por mail

Hola muy buenas,

No necesitas php.ini.

Solo necesitas este código:

Código PHP:
Ver original
  1. $para = $email; //hace referencia a la variable email...
  2. $titulo = "Activar cuenta";
  3. $mensaje = "El mensaje es este chaval. ejemplo xd";
  4. $cabeceras  = 'MIME-Version: 1.0' . "\r\n";
  5. $cabeceras .= 'Content-type: text/plain; charset=iso-8859-1' . "\r\n";
  6. $cabeceras .= 'From: Activar cuenta <tucorreo>' . "\r\n";
  7.  
  8. mail($para, $titulo, $mensaje, $cabeceras);

Esto lo introduces en un registro, cuándo te registres la web, en dónde te lanza el mensaje de te has registrado correctamente introduces esto...

Claro ya lo que sería para verificación de un código has de sacar los datos de la base de datos y enviarlo nada complicado.

Ya para activar tu cuenta, necesitas manejar las entradas al servidor, osea los $_GET...

Pero si sabes del tema....

Bueno, prueba y tal y coméntanos.

Un cordial saludo!
  #6 (permalink)  
Antiguo 22/03/2014, 14:26
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 8 meses
Puntos: 2
Respuesta: Confirmación registro por mail

Vale, esto es como un mensaje sin confirmacion. Muy simple. Lo incluyo cuando me registre correctamente y enviara el mensaje. ¿Lo he entendido bien?

Atentamente, OfSerker.

P.D: Empiezan Los Simpsons.
  #7 (permalink)  
Antiguo 22/03/2014, 14:34
Avatar de TSG
TSG
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 373
Antigüedad: 11 años, 2 meses
Puntos: 9
Respuesta: Confirmación registro por mail

Cita:
Iniciado por OfSerker Ver Mensaje
Vale, esto es como un mensaje sin confirmacion. Muy simple. Lo incluyo cuando me registre correctamente y enviara el mensaje. ¿Lo he entendido bien?

Atentamente, OfSerker.

P.D: Empiezan Los Simpsons.
Perdón eso fue culpa mía no terminé le leer bien y tal y puse eso de enviar el correo.
----------------------------------------------------------------------------------------------------------

Hola muy buenas,

No necesitas php.ini.

Código PHP:
Ver original
  1. $email = utf8_decode(mysqli_real_escape_string($conexion, ((isset($_GET['email']) && !empty($_GET['email']))?$_GET['email']:false)));
  2. $key = utf8_decode(mysqli_real_escape_string($conexion, ((isset($_GET['key']) && !empty($_GET['key']))?$_GET['key']:false)));
  3.  
  4. $ffkk = mysqli_query($conexion, "SELECT tucolumna FROM tabla WHERE email = '".$email."'")or die(mysqli_query($conexion));
  5. $del = mysqli_fetch_assoc($ffkk);
  6. if($del['activacion'] == '1'){
  7.     echo "No puedes volver a activar tu cuenta, ya se encuentra activada.";
  8. }
  9. else{
  10.  
  11. $verificacion = mysqli_query($conexion, "SELECT * FROM tutabla WHERE email = '".$email."' AND code = '".$key."'")or die(mysqli_error($conexion));
  12. if($veri = mysqli_fetch_array($verificacion)){
  13.     $codes = md5 (rand (0,90900));
  14.     $ya = mysqli_query($conexion, "UPDATE tutabla SET activacion = '1' WHERE activacion = '0'")or die(mysqli_error($conexion));
  15.     $ya2 = mysqli_query($conexion, "UPDATE tutabla SET code = '".$codes."' WHERE email = '".$email."'")or die(mysqli_error($conexion));
  16.     echo  "Tu cuenta ha sido activada.";
  17.  
  18. }

Ya solo con esto adaptándolo a tu código debería de funcionarte perfectamente.

Un cordial saludo!
  #8 (permalink)  
Antiguo 22/03/2014, 19:42
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: Confirmación registro por mail

como vas a hacer eso:

"UPDATE tutabla SET activacion = '1' WHERE activacion = '0'"

o sea, vas a tomar todas las cuentas no activadas y las vas a activar?
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #9 (permalink)  
Antiguo 23/03/2014, 02:21
Avatar de TSG
TSG
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 373
Antigüedad: 11 años, 2 meses
Puntos: 9
Respuesta: Confirmación registro por mail

Bueno ya el se encargaria de solucionar eso nada del otro mundo hace:

Where email = '"$email"'

Igual con el key... Solo deberia adaptarlo bien

saludos!
  #10 (permalink)  
Antiguo 24/03/2014, 07:27
 
Fecha de Ingreso: marzo-2014
Mensajes: 168
Antigüedad: 10 años, 8 meses
Puntos: 2
Pregunta Respuesta: Confirmación registro por mail

Bueno, no os habéis explicado muy bien... Soy nuevo en esto, solo se seleccionar cosas en la bd y el metodo $_POST.

Aqui os paso los archivos que me dijisteis que escribiera:

activacion.php:

Código PHP:
<?php
$email 
utf8_decode(mysqli_real_escape_string($conexion, ((isset($_GET['email']) && !empty($_GET['email']))?$_GET['email']:false)));
$key utf8_decode(mysqli_real_escape_string($conexion, ((isset($_GET['key']) && !empty($_GET['key']))?$_GET['key']:false)));
 
$ffkk mysqli_query($conexion"SELECT tucolumna FROM tabla WHERE email = '".$email."'")or die(mysqli_query($conexion));
$del mysqli_fetch_assoc($ffkk);
if(
$del['activacion'] == '1'){
    echo 
"No puedes volver a activar tu cuenta, ya se encuentra activada.";
}
else{
 
$verificacion mysqli_query($conexion"SELECT * FROM tutabla WHERE email = '".$email."' AND code = '".$key."'")or die(mysqli_error($conexion));
if(
$veri mysqli_fetch_array($verificacion)){
    
$codes md5 (rand (0,90900));
    
$ya mysqli_query($conexion"UPDATE tutabla SET activacion = '1' WHERE activacion = '0'")or die(mysqli_error($conexion));
    
$ya2 mysqli_query($conexion"UPDATE tutabla SET code = '".$codes."' WHERE email = '".$email."'")or die(mysqli_error($conexion));
    echo  
"Tu cuenta ha sido activada.";
 
}
?>

activacion.php:

Código PHP:
<?php
$key 
$_GET['id'];

$query=mysql_query("SELECT * FROM users WHERE id='$key'");
if(
$check=mysql_fetch_array($query)) //con este if verificamos que el codigo existe en la BD 
            

            
                if(
$check['active']=="1"//Si el mail ya esta verificado 
                

                    echo 
"Tu mail ya esta verificado";
                } 
                elseif(
$check['active']=="0"//Si no esta verificado 
                

                
//Actualizamos la BD, y cambiamos el valor de dafault "NO" en verificado por "SI" 
                    
$sql "UPDATE users SET active='1' WHERE id='$key'"
                    
mysql_query($sql) or die("Error query ".mysql_error());  
                     echo 
"<p>Gracias. Hemos verificado su email. Ahora puede acceder con su usuario y clave</p>";
                     echo 
"<a href='../index.php'>Loguearse</a>";
                     
//habilitamos el formulario de login luego de la bienvenida
                    
                
                

            } 
            else 
//Si el codigo de verificacion no existe 
            

            echo 
"<p>Tu c&oacute;digo es incorrecto</p>"
            echo 
"<a href='../index.php'>Loguearse</a>";
            } 
        
?>

mail.php:

Código PHP:
<?php
require_once('./config/funciones.php');
conectar('localhost''root''123456''ofserker');

$para $email//hace referencia a la variable email...
$titulo "Activar cuenta";
$mensaje "El mensaje es este chaval. ejemplo xd";
$cabeceras  'MIME-Version: 1.0' "\r\n";
$cabeceras .= 'Content-type: text/plain; charset=iso-8859-1' "\r\n";
$cabeceras .= 'From: Activar cuenta <tucorreo>' "\r\n";
 
mail($para$titulo$mensaje$cabeceras);

?>
Como hago para que los archivos trabajen juntos (los junte), que pongo en la db y si hay algún error porfavor, decidmelo.

Última edición por OfSerker; 24/03/2014 a las 07:33
  #11 (permalink)  
Antiguo 27/06/2016, 12:00
Avatar de supersiana  
Fecha de Ingreso: diciembre-2014
Mensajes: 14
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Confirmación registro por mail

En cuanto a lo que se comentó:

Cita:
Iniciado por loncho_rojas Ver Mensaje
como vas a hacer eso:

"UPDATE tutabla SET activacion = '1' WHERE activacion = '0'"

o sea, vas a tomar todas las cuentas no activadas y las vas a activar?
Cierto, esa sentencia es un error de sintaxis. Funcionará a la perfección pero sólo hará que todos los campos "activacion" de la tabla queden activos cuando sólo debiera serlo el del email en cuestión.

Es un error que se termina aprendiendo con la práctica en sintaxis SQL.

MI PREGUNTA SOBRE EL TEMA ES:

Es tuve viendo que la función uniqid() que php.net considera obsoleta y en su lugar, sugiere utilizar la función: openssl_random_pseudo_bytes()

¿Alguno la ha llegado a poner en práctica en sus códigos?
¿Algún ejemplo en español?

Muchas gracias!

Etiquetas: mail, registro, sql
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 21:37.