Jump to content


Photo

Autenticação De Login/senha Em Oo


  • Faça o login para participar
3 replies to this topic

#1 gonacts

gonacts

    "Agora eu tb tenho um Tux..." =D

  • Usuários
  • 1030 posts
  • Sexo:Não informado

Posted 30/01/2006, 16:30

Bem galera, estou postando aqui um pequeno tutorial de como fazer um sistema de autenticação de usuário em OO(Orientado a Objetos), usando php5.

Banco de Dados utilizado:

CREATE database gonacts;

CREATE TABLE `usuario` (
  `id` int(11) NOT NULL default '0',
  `login` varchar(42) NOT NULL default '',
  `senha` varchar(42) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Antes de mais nada, segue abaixo o code completo..
<?
#CLASSE USUÁRIO
class User{
	
	#MÉTODO CONSTRUTOR.
	#Dados para conexão com o BD.
	function __construct($host, $user, $pass, $banco)
	{
  #DEFINE OS VALORES PARA CONEXÃO COM O BANCO DE DADOS
  $this->host  = $host;
  $this->user 	 = $user;
  $this->pass  = $pass;
  $this->banco	= $banco;	
  #Tentativa de conexão com o banco
  self::connect();	
	}
	
	function connect()
	{ 	 
  #CONECTA-SE AO BANCO DE DADOS COM OS VALORES SETADOS PELO MÉTODO CONSTRUTOR
  $conexao	= mysql_connect($this->host,$this->user,$this->pass) or die("ERRO1: ".mysql_error());
  $banco  = mysql_select_db($this->banco,$conexao) or die("ERRO2: ".mysql_error());  
  return $conexao;  
	}
	
	function autentica($tbl, $login, $senha)
	{
  #CHAMA O MÉTODO DE CONEXÃO COM O BANCO DE DADOS.
  self::connect();  
  
  #VERIFICA SE EXISTE ALGUM LOGIN CADASTRADO NO BANCO COM O INFOMRADO.
  $query = mysql_query("select login from $tbl WHERE login='".sha1($login)."' ") or die("ERRO3: ".mysql_error());
  #SE ENCONTROU ALGUM USUÁRIO, VERIFICA A SENHA.
  if(mysql_num_rows($query)>0):
 	 #RESGATA OS VALORES DOS REGISTROS DO USUÁRIO REFERENTE AO LOGIN INFORMADO.
 	 $dados = mysql_fetch_array($query);
 	 #VERIFICA SE A SENHA INFORMADA É VÁLIDA.
 	 $sql = mysql_query("select senha from $tbl WHERE login='".sha1($login)."' AND senha='".sha1($senha)."'  ") or die("ERRO4: ".mysql_error()); 	 
 	 if(mysql_num_rows($sql)>0):
 	 $this->msg = "LOGADO COM SUCESSO";
 	 else:
 	 $this->msg = "SENHA INVÁLIDA"; 	 
 	 endif;
  else:
  $this->msg = "LOGIN INVÁLIDO";
  endif;
  
  return $this->msg;
  
	}
	
}

#PASSA OS PARÂMETROS DE CONEXÃO COM O BANCO DE DADOS.
$logar = new User("localhost","USUARIO","SENHA","BANCO");



#VERIFICA A ENTRADA DOS CAMPOS.
if(!empty($_POST['login']) && !empty($_POST['senha']) ):
	#FAZ A AUTENTICAÇÃO.
	$logou = $logar->autentica("usuario",$_POST['login'],$_POST['senha']);
endif;
?>


<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<table border="0" width="550" align="center">
	<tr>
	<td colspan="2"><div align="center"><strong>Autenticação de Usuário</strong></div></td>
	</tr>	
	
	<?
	if(isset($logou)):
	?>
	<tr>
	<td colspan="2"><div align="center"><strong><font color="#FF0000"><?=$logou?></font></strong></div></td>
	</tr>
	<?
	endif;
	?>
	
	<tr>
	<td>&nbsp;</td>
	<td>&nbsp;</td>
	</tr>
	
	<tr>
	<td>Login</td>
	<td><input type="text" name="login"></td>
	</tr>
	
	<tr>
	<td>Senha</td>
	<td><input type="password" name="senha"></td>
	</tr>
	
	<tr>
	<td>&nbsp;</td>
	<td><input type="submit" name="Submit" value="Logar"></td>
	</tr>
</table>

</form>

analisaremos por partes...

classe
class User{
	
	#MÉTODO CONSTRUTOR.
	#Dados para conexão com o BD.
	function __construct($host, $user, $pass, $banco)
	{
  #DEFINE OS VALORES PARA CONEXÃO COM O BANCO DE DADOS
  $this->host  = $host;
  $this->user 	 = $user;
  $this->pass  = $pass;
  $this->banco	= $banco;	
  #Tentativa de conexão com o banco
  self::connect();	
	}
	
	function connect()
	{ 	 
  #CONECTA-SE AO BANCO DE DADOS COM OS VALORES SETADOS PELO MÉTODO CONSTRUTOR
  $conexao	= mysql_connect($this->host,$this->user,$this->pass) or die("ERRO1: ".mysql_error());
  $banco  = mysql_select_db($this->banco,$conexao) or die("ERRO2: ".mysql_error());  
  return $conexao;  
	}
	
	function autentica($tbl, $login, $senha)
	{
  #CHAMA O MÉTODO DE CONEXÃO COM O BANCO DE DADOS.
  self::connect();  
  
  #VERIFICA SE EXISTE ALGUM LOGIN CADASTRADO NO BANCO COM O INFOMRADO.
  $query = mysql_query("select login from $tbl WHERE login='".sha1($login)."' ") or die("ERRO3: ".mysql_error());
  #SE ENCONTROU ALGUM USUÁRIO, VERIFICA A SENHA.
  if(mysql_num_rows($query)>0):
 	 #RESGATA OS VALORES DOS REGISTROS DO USUÁRIO REFERENTE AO LOGIN INFORMADO.
 	 $dados = mysql_fetch_array($query);
 	 #VERIFICA SE A SENHA INFORMADA É VÁLIDA.
 	 $sql = mysql_query("select senha from $tbl WHERE login='".sha1($login)."' AND senha='".sha1($senha)."'  ") or die("ERRO4: ".mysql_error()); 	 
 	 if(mysql_num_rows($sql)>0):
 	 $this->msg = "LOGADO COM SUCESSO";
 	 else:
 	 $this->msg = "SENHA INVÁLIDA"; 	 
 	 endif;
  else:
  $this->msg = "LOGIN INVÁLIDO";
  endif;
  
  return $this->msg;
  
	}
	
}


caso o seu php nao seja o 5, mude o nome do método construtor para o mesmo nome da classe, que no nosso caso é User..

O que é/faz o método construtor?
Resp:Assim q instanciamos um objeto da classe o método construtor é executado, isso se o mesmo existir em sua classe. O método construtor, a partir do php 5 ele é implementado usando "__construct()", nas versões anteriores o msm é implementado definindo o método com o mesmo nome da função, que no nosso caso ,como já disse, é: User.
No nosso caso o método é executado para poder definir as variáveis de conexão com o banco de dados.

O que faz o comando self::connect?
Resp: Após a definição das mesmas o método connect é chamado, através da chamada: self::connect. self foi um recurso adicionado a partir do php 5, sua fç é chamar o método definido após os :(2 pontos) da própria classe. (Tem também parent::, que é usada em caso de herança). O método connect é responsável por fazer a conexão com o bd.

Após instanciada a classe e setados os valores, o próximo passo é chamar o método autentica, que fará o acesso ao banco de dados e retornará sucesso ou falha.
$logou = $logar->autentica("usuario",$_POST['login'],$_POST['senha']);

os parâmetros a serem passados para o método sâo: nome da tabela q será consultada, login e senha a serem verificados.

para nao ficar mto longo o tuto vou terminando por aqui, caso haja alguma dúvida no momento de implementar, ou mesmo no entendimento do sistema, post ai :D

entao, é isso ai, espero q tenham gostado..sempre q tiver oportunidade estarei postando algum tuto...de preferencia em OO, ate msm para "acostumar" :rolleyes:

Edição feita por: gonacts, 30/01/2006, 16:33.

"Ninguém é tão inteligente que não possa aprender e ninguém é tão burro que não possa ensinar.."
"As dúvidas engrandecem nossa sabedoria, mas não basta somente tirá-las, temos que entendê-las"

#2 jovino

jovino

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 13/05/2007, 11:14

Salve! :)

É minha primeira vez aqui no forum. Gostei muito desse artigo, simples e direto. Só que testei aqui no meu pc e não deu certo. Você poderia me dar uma ajuda??? :unsure:

Tenho alguma experiencia em GNU/Linux, mas de php OO tô começando agora. :(

Esse script sempre retorna a mensagem "LOGIN INválido".

Tô usando PHP5 e MySQL 5.0.

Aqui vai o códifgo do meu login.php:

<!--

jovino@jovino-desktop:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 5.0.24a-Debian_9ubuntu2-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

myaql>create database LAX;
mysql> use LAX;
Database changed
mysql> CREATE TABLE `usuario` (
`id` int(11) NOT NULL default '0',
`login` varchar(42) NOT NULL default '',
`senha` varchar(42) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on LAX.* to jovino@localhost identified by '123456';
Query OK, 0 rows affected (0.02 sec)

mysql> insert into usuario values(1,'jovino','123456');
Query OK, 1 row affected (0.02 sec)

mysql> show fields from usuario
-> ;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | | 0 | |
| login | varchar(42) | NO | | | |
| senha | varchar(42) | NO | | | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> select * from usuario;
+----+--------+--------+
| id | login | senha |
+----+--------+--------+
| 1 | jovino | 123456 |
+----+--------+--------+
1 row in set (0.00 sec)

mysql> exit
Bye
jovino@jovino-desktop:~$


$logou = $logar->autentica("usuario",$_POST['login'],$_POST['senha']);


-->

<?
#CLASSE USUÁRIO
class User{

#MÉTODO CONSTRUTOR.
#Dados para conexão com o BD.
function __construct($host, $user, $pass, $banco)
{
#DEFINE OS VALORES PARA CONEXÃO COM O BANCO DE DADOS
$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->banco = $banco;
#Tentativa de conexão com o banco
self::connect();
}

function connect()
{
#CONECTA-SE AO BANCO DE DADOS COM OS VALORES SETADOS PELO MÉTODO CONSTRUTOR
$conexao = mysql_connect($this->host,$this->user,$this->pass) or die("ERRO1: ".mysql_error());
$banco = mysql_select_db($this->banco,$conexao) or die("ERRO2: ".mysql_error());
return $conexao;
}

function autentica($tbl, $login, $senha)
{
#CHAMA O MÉTODO DE CONEXÃO COM O BANCO DE DADOS.
self::connect();

#VERIFICA SE EXISTE ALGUM LOGIN CADASTRADO NO BANCO COM O INFOMRADO.
$query = mysql_query("select login from $tbl WHERE login='".sha1($login)."' ") or die("ERRO3: ".mysql_error());
#SE ENCONTROU ALGUM USUÁRIO, VERIFICA A SENHA.
if(mysql_num_rows($query)>0):
#RESGATA OS VALORES DOS REGISTROS DO USUÁRIO REFERENTE AO LOGIN INFORMADO.
$dados = mysql_fetch_array($query);
#VERIFICA SE A SENHA INFORMADA É VÁLIDA.
$sql = mysql_query("select senha from $tbl WHERE login='".sha1($login)."' AND senha='".sha1($senha)."' ") or die("ERRO4: ".mysql_error());
if(mysql_num_rows($sql)>0):
$this->msg = "LOGADO COM SUCESSO";
else:
$this->msg = "SENHA INVÁLIDA";
endif;
else:
$this->msg = "LOGIN INVÁLIDO";
endif;

return $this->msg;

}

}

#PASSA OS PARÂMETROS DE CONEXÃO COM O BANCO DE DADOS.
$logar = new User("localhost","jovino","123456","LAX");



#VERIFICA A ENTRADA DOS CAMPOS.
if(!empty($_POST['login']) && !empty($_POST['senha']) ):
#FAZ A AUTENTICAÇÃO.
$logou = $logar->autentica("usuario",$_POST['login'],$_POST['senha']);
endif;
?>


<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<table border="0" width="550" align="center">
<tr>
<td colspan="2"><div align="center"><strong>Autenticação de Usuário</strong></div></td>
</tr>

<?
if(isset($logou)):
?>
<tr>
<td colspan="2"><div align="center"><strong><font color="#FF0000"><?=$logou?></font></strong></div></td>
</tr>
<?
endif;
?>

<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>

<tr>
<td>Login</td>
<td><input type="text" name="login"></td>
</tr>

<tr>
<td>Senha</td>
<td><input type="password" name="senha"></td>
</tr>

<tr>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Logar"></td>
</tr>
</table>

</form>

#3 HaroNism

HaroNism

    Super Veterano

  • Usuários
  • 15385 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 28/10/2017, 05:56

Amoxicillin And Humira Propecia Alicante viagra Cialis With Priligy Pills Levitra Patente
Priligy Patent Cialis 10 Mg Precio viagra Amoxicillin Allergy
Compra De Viagra En Espana Buy Deltasone Without Prescription generic levitra professional Hytrin Viagra 50mg Pills Amazon

#4 LarPhozyHah

LarPhozyHah

    Super Veterano

  • Usuários
  • 14515 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 29/10/2017, 07:51

Online Valtrex Priligy Erfaringer viagra Zyban No Prescription Get A Lavitra Script




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq