Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com a ativação de email ( sistema de login PHP )


chris_ammy

Pergunta

Sou novata em programação PHP, e tenho que montar um projeto de intranet.

Consegui na net, um sistema de login, onde o usuario cadastra seus dados, recebe um email de ativação de conta e dai ele consegue acessar as paginas.

O problema é o seguinte: eu cadastrei dois usuarios, os usuarios receberam os emails de ativação, porém se um dele ativar a conta, ele tambem ativa a conta do outro usuario.

No sistema q peguei na net, a tabela do banco contem uma variavel chamada sessao, que sempre fica com o mesmo valor.

Segue abaixo o codigo da tabela (banco ) e os codigos em PHP que estou utilizando.

Me ajudem por favor!!!!!!!

-- Banco: intranet

-- Estrutura da tabela `user`

--

CREATE TABLE `user` (

`id` int(11) NOT NULL auto_increment,

`login` varchar(20) NOT NULL default '',

`senha` varchar(8) NOT NULL default '',

`nome` varchar(50) NOT NULL default '',

`sobrenome` varchar(50) NOT NULL default '',

`empresa` varchar(50) NOT NULL default '',

`depto` varchar(50) NOT NULL default '',

`fone` varchar(11) NOT NULL default '',

`email` varchar(200) NOT NULL default '',

`activo` enum('N','S') NOT NULL default 'N',

`sessao` varchar(200) NOT NULL default '',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Cadastro.php

<?php

include("config.php");

if (isset($_POST['login'])){

//pega a sessão id do usuario

session_start();

$sessao = session_id();

$login = $_POST['login'];

$senha = $_POST['senha'];

$email = $_POST['email'];

$nome = $_POST['nome'];

$sobrenome = $_POST['sobrenome'];

$empresa = $_POST['empresa'];

$depto = $_POST['depto'];

$fone = $_POST['fone'];

$sql_busca = "SELECT * FROM user WHERE login = '$login'";

$exe_busca = mysql_query($sql_busca) or die (mysql_error());

$num_busca = mysql_num_rows($exe_busca);

$sql_busca2 = "SELECT * FROM user WHERE email = '$email'";

$exe_busca2 = mysql_query($sql_busca2) or die (mysql_error());

$num_busca2 = mysql_num_rows($exe_busca2);

//Verifica se os campos estão preenchidos

if ($_POST['login'] == "" || $_POST['senha'] == "" || $_POST['senha2'] == "" || $_POST['email'] == "" || $_POST['nome'] == "" || $_POST['empresa'] == "" || $_POST['depto'] == ""){

$ac[] = "Por favor preencha todos os campos corretamente.";

}

//Verifica se já existe o login

if ($num_busca > 0){

$ac[] = "Esse login já está sendo usado por outro usuário.";

}

//Verifica se já existe o e-mail

if ($num_busca2 > 0){

$ac[] = "Esse e-mail já está sendo usado por outro usuário.";

}

//Verifica se o e-mail esta correto

if (!ereg("@.", $_POST['email'])){

$ac[] = "E-mail inválido.";

}

//Verifica se as duas senha são diferente

if ($_POST['senha'] != $_POST['senha2']){

$ac[] = "Verifique se as duas senha estão corretas.";

}

//Verifica se todas estão corretas

if (!isset($ac)){

//Inclui o cadastro no mysql

$sql_inclu = "INSERT INTO user(login, senha, email, nome, sobrenome, empresa, depto, fone, sessao) VALUES

('$login', '$senha', '$email', '$nome', '$sobrenome', '$empresa', '$depto', '$fone', '$sessao')";

$exe_inclu = mysql_query($sql_inclu) or die (mysql_error());

$tópico = "Cadastro Intranet";

$mensagem = "<html>";

$mensagem .= "<body>";

$mensagem .= "Olá $login\r\n";

$mensagem .= "<br>Você efetuou um cadastro na intranet.</br>";

$mensagem .= "<br>Login: $login";

$mensagem .= "<br>Senha: $senha";

$mensagem .= "<br>Ativar conta <a href=$site/active.php?ac=$sessao'>$site/active.php?ac=$sessao</a></br>";

$mensagem .= "</body>";

$mensagem .= "</html>";

$headers = "MIME-Version: 1.0\r\n";

$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

$headers .= "From: intranet <cristina.oliveira@bmslog.com>\r\n"; // Mude para o e-mail do remetente, não pode ser o mesmo do destinatário

$headers .= "To: <$email>\r\n";

$ac[] = "Cadastro efetuado com sucesso, verifique seu e-mail para ativa a conta.";

//enviar para o email o login, senha e o codigo de ativação

mail($email, $tópico, $mensagem, $headers);

}

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Document sans titre</title>

<style type="text/css">

<!--

.Style2 {font-size: 13px}

-->

</style>

</head>

<body>

<?php

if (isset($ac)){

for($i=0;$i<count($ac);$i++){

echo "<li>".$ac[$i];

}

}

?>

<form id="form1" name="form1" method="post" action="<? $_SERVER['PHP_SELF]?>">

<table width="100%" border="0">

<tr>

<td colspan="2"><div align="center"><strong>Cadastro</strong></div></td>

</tr>

<tr>

<td width="13%"><span class="Style2">Nome:</span></td>

<td width="87%"><span class="Style2">

<label>

<input name="nome" type="text" id="nome" />

</label>

</span></td>

</tr>

<tr>

<td width="13%"><span class="Style2">Sobrenome:</span></td>

<td width="87%"><span class="Style2">

<label>

<input name="sobrenome" type="text" id="sobrenome" />

</label>

</span></td>

</tr>

<tr>

<td width="13%"><span class="Style2">Empresa:</span></td>

<td width="87%"><span class="Style2">

<label>

<input name="empresa" type="text" id="empresa" />

</label>

</span></td>

</tr>

<tr>

<td width="13%"><span class="Style2">Depto:</span></td>

<td width="87%"><span class="Style2">

<label>

<input name="depto" type="text" id="depto" />

</label>

</span></td>

</tr>

<tr>

<td width="13%"><span class="Style2">Fone com DDD:</span></td>

<td width="87%"><span class="Style2">

<label>

<input name="fone" type="text" id="fone" />

</label>

</span></td>

</tr>

<tr>

<td width="13%"><span class="Style2">Login:</span></td>

<td width="87%"><span class="Style2">

<label>

<input name="login" type="text" id="login" />

</label>

</span></td>

</tr>

<tr>

<td><span class="Style2">Senha:</span></td>

<td><span class="Style2">

<label>

<input name="senha" type="password" id="senha" />

</label>

</span></td>

</tr>

<tr>

<td><span class="Style2">Repetir senha: </span></td>

<td><span class="Style2">

<label>

<input name="senha2" type="password" id="senha2" />

</label>

</span></td>

</tr>

<tr>

<td><span class="Style2">E-mail:</span></td>

<td><span class="Style2">

<label>

<input name="email" type="text" id="email" />

</label>

</span></td>

</tr>

<tr>

<td> </td>

<td><span class="Style2">

<label>

<input type="submit" name="Submit" value="Enviar" />

</label>

</span></td>

</tr>

</table>

<p> </p>

</form>

</body>

</html>

active.php

<?php

include("config.php");

if (isset($_GET['ac'])){

$sessao = $_GET['ac'];

$sql_busca = "SELECT * FROM user WHERE sessao = '$sessao'";

$exe_busca = mysql_query($sql_busca) or die (mysql_error());

$num_busca = mysql_num_rows($exe_busca);

if ($num_busca > 0){

$sql_up = "UPDATE user SET activo = 'S' WHERE sessao = '$sessao'";

$exe_up = mysql_query($sql_up) or die (mysql_error());

echo "Usuário ativado.";

}

else {

echo "Esse usuário não pode ser ativado.";

}

}

?>

restrito.php

<?php

@session_start();

if (isset($_SESSION['login']) && isset($_SESSION['senha'])){

$login_usuario = $_SESSION['login'];

}

else {

header("Location:login.php");

exit();

}

?>

logar.php

<?php

include("config.php");

$login = $_POST['login'];

$senha = $_POST['senha'];

/* Verifica se existe usuario, o segredo ta aqui quando ele procupa uma

linha q contenha o login e a senha digitada */

$sql_logar = "SELECT * FROM user WHERE login = '$login' && senha = '$senha'";

$exe_logar = mysql_query($sql_logar) or die (mysql_error());

$fet_logar = mysql_fetch_assoc($exe_logar);

$num_logar = mysql_num_rows($exe_logar);

//Verifica se n existe uma linha com o login e a senha digitado

if ($num_logar == 0){

echo "Login ou senha invalido.";

echo "<br><a href=java script:window.history.go(-1)'>Clique aqui para volta.</a>";

}

elseif($fet_logar['activo] == "N"){

echo "Usuario não ativado, verifique seu e-mail para ativa a conta.";

echo "<br><a href='java script:window.history.go(-1)'>Clique aqui para volta.</a>";

}

else{

//Cria a sessão e manda pra pagina principal.php

session_start();

$_SESSION['login'] = $login;

$_SESSION['senha'] = $senha;

header("Location:principal.php");

}

?>

principal.php

<?php

include("config.php");

include("restrito.php");

$sql_busca = "SELECT * FROM user WHERE login = '$login_usuario'";

$exe_busca = mysql_query($sql_busca) or die (mysql_error());

$fet_busca = mysql_fetch_assoc($exe_busca);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns=http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Document sans titre</title>

</head>

<body>

Olá <? echo $fet_busca['login];?>

</body>

</html>

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bem isso ocorre pois você deve especificar qual usuário pretende editar dentro da sua tabela, use a 'Chave primaria' da tabela que no caso é o campo de ID e mande junto com o E-MAIL ... Depois é só editar o ID epecifico ... faça assim e mude essas linhas ...

Cadastro.php

...

//Inclui o cadastro no mysql
$sql_inclu = "INSERT INTO user(login, senha, email, nome, sobrenome, empresa, depto, fone, sessao) VALUES
('$login', '$senha', '$email', '$nome', '$sobrenome', '$empresa', '$depto', '$fone', '$sessao')";
$exe_inclu = mysql_query($sql_inclu) or die (mysql_error());

// Busca o Último ID cadastrado na tabela
$ultimo_id = mysql_insert_id();

.....

$mensagem .= "<br>Ativar conta <a href='$site/active.php?ac=$sessao&usr=$ultimo_id'>$site/active.php?ac=$sessao&usr=$ultimo_id</a></br>";

....
active.php
...
$sessao = $_GET['ac'];
$usuario = $_GET['usr'];

$sql_busca = "SELECT * FROM user WHERE id='$usuario' && sessao = '$sessao'";

....

$sql_up = "UPDATE user SET activo = 'S' WHERE id='$usuario' && sessao = '$sessao'";

...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...