Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Enviar email para que el usuario pueda activar su cuenta

Hola como están, resulta me preguntaba como podría hacer que se envié un correo al usuario una vez se registre en mi sitio para que pueda activar su cuenta y ya pueda iniciar session
Este es mi codigo que estoy desarrollando :
El adduser:
<?php require_once('../config/conexion.php'); 

// Validamos para agregar un anunciante 
//Validar formulario
if(!isset($_POST['nombre']) 
	|| $_POST['cedula']=='' 
	|| $_POST['correo']=='' 
	|| $_POST['pass1']=='') exit;

$email =  $conexion->real_escape_string(htmlentities($_POST['correo']));



//Comprobar correo
$accion_email=sprintf("SELECT * FROM tc_user WHERE email=%s",
	formatearcadena($_POST['correo'],'text'));

$consulta_email=mysqli_query($conexion,$accion_email);
$datos_email=mysqli_fetch_assoc($consulta_email);
$cantidad_email=mysqli_num_rows($consulta_email);

if($cantidad_email==0){
	//Insertar user
	$accion_adduser = sprintf("INSERT INTO tc_user (nombre, cedula, email, password, rango) VALUES (%s, %s, %s, %s, %s)",
		formatearcadena($_POST['nombre'],'text'),
		formatearcadena($_POST['cedula'],'text'),
		formatearcadena($_POST['correo'],'text'),
		formatearcadenamd5($_POST['pass1']),'text'),
		formatearcadena(0,'int'));

	$consulta_adduser = mysqli_query($conexion,$accion_adduser) or die(mysqli_error());

	$para= $emails;
	$titulo    = 'Estimado'.urls_amigables(trim($_POST['nombre'])).'para activar su cuenta siga los pasos acontinuación';
	$mensaje= "Para activar tu cuenta este enlace ".$$dato[0]."activate/activate.php?iduser=".$SESSION['iduser'];
	
	// Cabeceras
	$cabeceras  = 'MIME-Version: 1.0' . "\r\n";
	$cabeceras .= "Content-type: text/html; charset=utf-8\r\n";
	$cabeceras .= 'From: '.$dato[1].' <'.$dato[1].'>' . "\r\n";

	error_reporting(0);
	mail($para, $titulo, utf8_decode($mensaje), $cabeceras);

	

	echo 'correcto';


}
else echo 'existe';


mysqli_free_result($consulta_email);




?>
Y este para activar su cuenta
<?php

require_once('../conexion.php'); 


$iduser=$conexion->real_escape_string(htmlentities($_GET['iduser']));
//Eliminar post
$accion_nm = "UPDATE tc_user SET rango = 1 WHERE id=$iduser";
$consulta_nm = mysqli_query($conexion,$accion_nm) or die(mysqli_error());

echo "Cuenta activada";

header('Location:'.$dato[0]);


Editado
0
Puntos
1256
Visitas
7
Resp
Por eduaryein hace 68 meses
Principiante Sitio web
Respuesta #1
Hola que tal! Creo que te tienes acceso al curso web avanzada https://datoweb.com/cursos/curso-web-avanzada

En ese curso se explica como recuperar una contraseña, el proceso para activar la cuenta es similar solo tienes que usar esas nociones.

Te explico un poco por encima, en el registro del usuario pones una columna que guarde el estado:
0 desactivado (por defecto) y 1 activado (después de enviarle el correo y hacer clic en el enlace)

En el registro inicial ademas de guardar el estado 0 le guardas un valor aleatorio creando otra columna que se llame "activar" o algo así.

Mediante la función mail de php (por ejemplo) le envías lo algo así:
http.//tu_dominio.com/activar.php?aleatorio=AQUI_EL_VALOR_ALEATORIO_EN_DB
como vemos en el link, la pagina activar.php es la que se encargará de comprobar el valor aleatorio en la DB y si la encuentra pasará al valor de ese usuario de 0 a 1

ese es el concepto, te recomiendo que te familiarices mirando los vídeos y lo podrás hacer super fácil

salu2
0
Puntos
Por alber hace 68 meses
Administrador
Respuesta #2
alber dijo: Hola que tal! Creo que te tienes acceso al curso web avanzada https://datoweb.com/cursos/curso-web-avanzada

En ese curso se explica como recuperar una contraseña, el proceso para activar la cuenta es similar solo tienes que usar esas nociones.

Te explico un poco por encima, en el registro del usuario pones una columna que guarde el estado:
0 desactivado (por defecto) y 1 activado (después de enviarle el correo y hacer clic en el enlace)

En el registro inicial ademas de guardar el estado 0 le guardas un valor aleatorio creando otra columna que se llame "activar" o algo así.

Mediante la función mail de php (por ejemplo) le envías lo algo así:
http.//tu_dominio.com/activar.php?aleatorio=AQUI_EL_VALOR_ALEATORIO_EN_DB
como vemos en el link, la pagina activar.php es la que se encargará de comprobar el valor aleatorio en la DB y si la encuentra pasará al valor de ese usuario de 0 a 1

ese es el concepto, te recomiendo que te familiarices mirando los vídeos y lo podrás hacer super fácil

salu2
Hola Alber gracias por tu respuesta mira lo hice de esta forma pero no me llega el correo
<?php require_once('../conexion.php'); 

// Validamos para agregar un anunciante 
//Validar formulario
if(!isset($_POST['nombre']) 
	|| $_POST['cedula']=='' 
	|| $_POST['correo']=='' 
	|| $_POST['pass1']=='') exit;

$email =  $conexion->real_escape_string(htmlentities($_POST['correo']));

$token = $_SESSION['token'] = md5(uniqid(mt_rand(), true) );


//Comprobar correo
$accion_email=sprintf("SELECT * FROM tc_user WHERE email=%s",
	formatearcadena($_POST['correo'],'text'));

$consulta_email=mysqli_query($conexion,$accion_email);
$datos_email=mysqli_fetch_assoc($consulta_email);
$cantidad_email=mysqli_num_rows($consulta_email);

if($cantidad_email==0){
	//Insertar user
	$accion_adduser = sprintf("INSERT INTO tc_user (nombre, cedula,  email,  password, rango, token) VALUES (%s, %s, %s, %s, %s, %s)",
		formatearcadena($_POST['nombre'],'text'),
		formatearcadena($_POST['cedula'],'text'),
		formatearcadena($_POST['correo'],'text'),
		formatearcadena(md5($_POST['pass1']),'text'),
		formatearcadena(0,'int'),
		formatearcadena($token,'text'));

	$consulta_adduser = mysqli_query($conexion,$accion_adduser) or die(mysqli_error());

	$para= $email;
	$titulo    = 'Estimado ' .urls_amigables(trim($_POST['nombre'])). 'para activar su cuenta siga los pasos acontinuación';
	$mensaje='Para activar tu cuenta utiliza este enlace '.$dato[0].'activate/activate.php?iduser='.$token;
	
	// Cabeceras
	$cabeceras  = 'MIME-Version: 1.0' . "\r\n";
	$cabeceras .= "Content-type: text/html; charset=utf-8\r\n";
	$cabeceras .= 'From: '.$dato[1].' <'.$dato[1].'>' . "\r\n";

	error_reporting(0);
	mail($para, $titulo, utf8_decode($mensaje), $cabeceras);

	echo 'correcto';


}
else echo 'existe';


mysqli_free_result($consulta_email);




?>
0
Puntos
Por eduaryein hace 68 meses
Principiante Sitio web
Respuesta #3
genial, el código lo tienes bien.. si te inserta el usuario en la base de datos y no te llega el correo es por que la función:
mail($para, $titulo, utf8_decode($mensaje), $cabeceras);
a veces llega a la carpeta de correo no deseado cuando usas cuentas hotmail (por ejemplo)

tb puede ser que tu servidor ni siquiera use la función mail, otra cosa es comentarte que en localhost tampoco funcionan los envíos de correo a no ser que uses mercury implementado en tu servido local

haz las pruebas y vamos viendo

salu2
0
Puntos
Por alber hace 68 meses
Administrador
Respuesta #4
alber dijo: genial, el código lo tienes bien.. si te inserta el usuario en la base de datos y no te llega el correo es por que la función:
mail($para, $titulo, utf8_decode($mensaje), $cabeceras);
a veces llega a la carpeta de correo no deseado cuando usas cuentas hotmail (por ejemplo)

tb puede ser que tu servidor ni siquiera use la función mail, otra cosa es comentarte que en localhost tampoco funcionan los envíos de correo a no ser que uses mercury implementado en tu servido local

haz las pruebas y vamos viendo

salu2
Hola alber si funciona solo que se tarda un poco en llegar disculpa las molestias, Mira e creado este otro para la activación al darle clik al enlace que llega al correo pero no se como sacar un mensaje en echo para que diga su cuenta a sidio activada
<?php

require_once '../config/conexion.php';
 if(isset($_SESSION['iduser'])) header('Location:'.$dato[0].'vistas/escritorio.php');


$iduser = $conexion->real_escape_string(htmlentities($_GET['iduser']));

//Comprobar correo
$accion_email=sprintf("SELECT * FROM tc_user WHERE token=%s",
	formatearcadena($_GET['iduser'],'text'));

$consulta_email=mysqli_query($conexion,$accion_email);
$datos_email=mysqli_fetch_assoc($consulta_email);
$cantidad_email=mysqli_num_rows($consulta_email);

//Eliminar post
$accion_nm = "UPDATE tc_user SET rango = 1 WHERE token=$iduser";
$consulta_nm = mysqli_query($conexion,$accion_nm) or die(mysqli_error());



$succes = echo "Cuenta activada";


 ?>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Cuenta activada</title>
  <!-- Tell the browser to be responsive to screen width -->
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">

  <link rel="stylesheet" href="<?php echo $dato[0]; ?>public/css/_all-skins.min.css">
  <link rel="apple-touch-icon" href="<?php echo $dato[0]; ?>public/img/apple-touch-icon.png">
  <link rel="shortcut icon" href="<?php echo $dato[0]; ?>public/img/favicon.ico">

  <!-- Bootstrap 3.3.7 -->
  <link rel="stylesheet" href="<?php echo $dato[0]; ?>public/css/bootstrap.min.css">
  <!-- Font Awesome -->
  <link rel="stylesheet" href="<?php echo $dato[0]; ?>public/css/font-awesome.css">
  <!-- Theme style -->
  <link rel="stylesheet" href="<?php echo $dato[0]; ?>public/css/AdminLTE.min.css">
  <!-- iCheck -->
  <link rel="stylesheet" href="<?php echo $dato[0]; ?>public/css/blue.css">



  <!-- Google Font -->
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
</head>
<body class="hold-transition register-page">
<div class="register-box anc">
  <div class="register-logo">
    <a href="<?php echo $dato[0]; ?>"><b>LT</b>ecuador</a>
  </div>

  <div class="register-box-body">
    <p class="login-box-msg"><?php echo $succes; ?></p>

	<a href="<?php echo $dato[0]; ?>login">Iniciar sesion</a>
  </div>
  <!-- /.form-box -->
</div>
<!-- /.register-box -->

<!-- jQuery 3 -->
<script src="<?php echo $dato[0]; ?>public/js/jquery-3.1.1.min.js"></script>
<!-- Bootstrap 3.3.7 -->
<script src="<?php echo $dato[0]; ?>public/js/bootstrap.min.js"></script>
<!-- iCheck -->
<script src="<?php echo $dato[0]; ?>public/js/icheck.min.js"></script>
<script src="<?php echo $dato[0]; ?>scripts/efectos.js"></script>
<script src="<?php echo $dato[0]; ?>scripts/validar-forms.js"></script>

</body>
</html>





0
Puntos
Por eduaryein hace 68 meses
Principiante Sitio web
Respuesta #5
ok pues mas o menos cambiando un poquito tu código:
//Comprobar correo
$accion_email=sprintf("SELECT * FROM tc_user WHERE token=%s",
	formatearcadena($_GET['iduser'],'text'));

$consulta_email=mysqli_query($conexion,$accion_email);
$datos_email=mysqli_fetch_assoc($consulta_email);
$cantidad_email=mysqli_num_rows($consulta_email);

if($cantidad_email==1){
	//existe el token
	$accion_nm = "UPDATE tc_user SET rango = 1 WHERE token=$iduser";
	$consulta_nm = mysqli_query($conexion,$accion_nm) or die(mysqli_error());

	//opción 1
	echo 'Cuenta activada!';

}

mysqli_free_result($consulta_email);
o si quieres sacarlo en cualquier parte del CUERPO de la pagina:
<html>
<?php if($cantidad_email==1) echo 'cuenta activa!'; else echo 'error en la activación!'; //opción 2 ?>
</html>
salu2
0
Puntos
Por alber hace 68 meses
Administrador
Respuesta #6
alber dijo: ok pues mas o menos cambiando un poquito tu código:
//Comprobar correo
$accion_email=sprintf("SELECT * FROM tc_user WHERE token=%s",
	formatearcadena($_GET['iduser'],'text'));

$consulta_email=mysqli_query($conexion,$accion_email);
$datos_email=mysqli_fetch_assoc($consulta_email);
$cantidad_email=mysqli_num_rows($consulta_email);

if($cantidad_email==1){
	//existe el token
	$accion_nm = "UPDATE tc_user SET rango = 1 WHERE token=$iduser";
	$consulta_nm = mysqli_query($conexion,$accion_nm) or die(mysqli_error());

	//opción 1
	echo 'Cuenta activada!';

}

mysqli_free_result($consulta_email);
o si quieres sacarlo en cualquier parte del CUERPO de la pagina:
<html>
<?php if($cantidad_email==1) echo 'cuenta activa!'; else echo 'error en la activación!'; //opción 2 ?>
</html>
salu2
Gracias alber eres grande siguiendo tu código agregando algo mas ya me funciona
1
Puntos
Por eduaryein hace 68 meses
Principiante Sitio web
Respuesta #7
yeah!!! me alegro de que tengas corriendo..

salu2
0
Puntos
Por alber hace 68 meses
Administrador
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate