André Buzzo

CRIAÇÃO DE SITES | DESENVOLVIMENTO DE SISTEMAS | CONSULTORIA EM SEO | ORIENTAÇÃO EM TCC

Sistema de Login e Senha Criptografados – Parte 01

Publicado na categoria Banco de Scripts com 68.776 visualizações e 87 comentários

Fala pessoas!

Hoje eu queria começar 2013 de uma maneira diferente: ao invés de gravar uma vídeo aula explicando determinado assunto, eu decidi ESCREVER para fazer isso. Há tempos eu penso em fazer algo mais “complexo” aqui no site, para atender também a algumas dúvidas de usuários mais avançados.

Ou não.

Porém, por falta de tempo (não que hoje esteja sobrando, que fique bem claro isso!) eu não conseguia gravar a vídeo aula, então, eu resolvi criar os scripts e comentá-lo. Isso mesmo. Farei alguns comentários ao inserir aqui os códigos, mas o script em si está bem comentado, visando não dar margem para dúvidas futuras.

Mas, como eu sempre costumo dizer, eu gosto quando as pessoas dão “aquela viajada” e, por si só, fazem aquele comentário interno “Nossa! Eu poderia usar isso para fazer aquilo! Só preciso adaptar isso aqui e ali” …

Se alguém quiser me deixar feliz, é só fazer isso!

Sistema de Login e Senha Criptografados - André Buzzo Webdesign

Apresentando: O PROBLEMA!

O cliente X me pediu para que eu criasse um sistema, onde seria necessário seguir as seguintes diretrizes:

  • O usuário deverá fazer seu cadastro, que deverá, por sua vez, conter os campos: Seu Nome, Nome de Usuário, E-mail e Senha;
  • Haverá no sistema um setor de “Conteúdo Exclusivo“, que o usuário só poderá acessar após fazer o seu cadastro completo;
  • Poderá ser cadastrado apenas UM endereço de e-mail; se for cadastrado em duplicidade, o usuário deve ser avisado desse problema;
  • Esse conteúdo, não poderá, em hipótese alguma, ser acessado por quem não efetuou o cadastro;
  • Preciso da segurança: se por um acaso o sistema for invadido, não quero que o invasor tenha acesso ao NOME DE USUÁRIO e a SENHA cadastrada. Precisam ser criptografados;
  • Caso o usuário perca seus dados, deve ser dada a opção e ferramentas para que o mesmo possa cadastrar novos dados, sempre que necessário;

Com esse “mini briefing” em mãos, podemos pensar e fazer uma comparação da seguinte maneira: eu preciso guardar dados dentro do banco, e depois, de alguma maneira, preciso recuperá-los. É o mesmo que eu jogar as coisas dentro de um baú com um cadeado, e depois, usando uma senha, eu consiga recuperar esses dados guardados lá… bico! rs

Então vamos começar a desenvolver esse nosso sistema: o primeiro arquivo que precisaremos ter em mãos é o de “conexão ao banco de dados”. O mesmo segue abaixo:

conexao.php

<?php

$host = "localhost";
$loga = "seuUsuario";
$senhaLoga = "suaSenha";
$baseDados = "seuBancoDeDados";

$conecta = mysql_connect($host, $loga, $senhaLoga, $baseDados);
$conectaBanco = mysql_select_db($baseDados);

?>

E de quebra, vou passar para vocês o código do banco que eu vou utilizar para nesse tutorial. Na realidade, ele é bem simples, tendo apenas uma tabela no total!

bancoDados.sql

CREATE TABLE IF NOT EXISTS `usuario` (
`id_usuario` int(111) NOT NULL AUTO_INCREMENT,
`nome` varchar(150) NOT NULL,
`email` varchar(150) NOT NULL,
`userlogin` longtext NOT NULL,
`passlogin` longtext NOT NULL,
`ativo` varchar(3) NOT NULL DEFAULT 'sim',
PRIMARY KEY (`id_usuario`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

Fazendo uma breve explicação sobre os campos dessa tabela:

id_usuario -> É o ID do usuário, que é campo único e se incrementa automaticamente;
nome -> Tá mais do que na cara;
e-mail -> Idem à de cima! rs;
userlogin -> Aqui fica interessante! O campo está como “longText”, pois é nele que será inserido o primeiro dado criptografado desse tutorial, que será o nome de usuário;
passlogin -> Aqui será inserida a senha do usuário, também criptografada;
ativo -> O campo terá como valor padrão (default) o “SIM“. Não pretendo deixar que sejam DELETADOS dados do banco. Simplesmente, ou eu ATIVO ou DESATIVO determinado usuário. Porém, nunca o apago. Evita problemas futuros!

Após termos criado o banco e testado a conexão com o mesmo, vamos analisar o primeiro arquivo ao qual nosso usuário terá acesso!

index.php

<!DOCTYPE HTML>

<html lang="br" class="no-js">

<head>

<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="style.css" rel="stylesheet" />

</head>

<body>

<div id="conteudo">

<h1>Sistema de login e senha criptografados - Cadastro de usuário</h1>

<div class="borda"></div>

<!-- Formulário para acesso -->
<p>Para ter acesso ao conteúdo exclusivo, por favor, cadastre-se utilizando o formulário abaixo!</p>

<form method="post" action="cadastraUsuario.php" id="validaAcesso">
<fieldset>
<legend>Faça seu cadastro abaixo!</legend>
<label for="nome">Seu nome:</label>
<input type="text" name="nome" id="nome" />
<div class="clear"></div>
<label for="nome">Nome de usuário:</label>
<input type="text" name="nomeUsuario" id="nomeUsuario" />
<div class="clear"></div>
<label for="email">E-mail:</label>
<input type="text" name="email" id="email" />
<div class="clear"></div>
<label for="senha">Senha:</label>
<input type="password" name="senha" id="senha" />
<div class="clear"></div>
<input type="submit" value="Efetuar cadastro" />

</fieldset>
</form>

<p>Se você já possui cadastro, <a href="exclusivo/">clique aqui</a> para acessar o Conteúdo Exclusivo!</p>

</div>

</body>

</html>

E seu arquivo de “folha de estilos”, o

style.css

* body {
margin:0;
padding:0;

background-color:#f2f2f2;

font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
font-size:medium;
color:#000;
line-height:150%;
}

h1 {
color:#039;
font-size:120%;
}

h3 {
color:#900;
font-size:100%;
}

p {
font-size:80%;
}

#conteudo {
width:984px;
height:auto;
display:table;
margin:10px auto;
border-top:1px solid #e1e1e1;
}

#conteudo form {
font-size:80%;
}

#conteudo form legend {
padding:5px;
border:1px solid #036;
border-radius:5px;
background-color:#e2e2e2;
}
#conteudo fieldset {
border:1px dotted #036;
}

#conteudo form label {
width:120px;
float:left;
font-weight:bold;
margin:5px 0;
}

#conteudo form input[type="text"], #conteudo form input[type="password"] {
float:left;
background-color:#e2e2e2;
text-indent:10px;
width:150px;
height:25px;
border:1px solid #036;
border-radius:5px;
margin:5px 0;
}

#conteudo form input[type="text"]:hover, #conteudo form input[type="password"]:hover {
background-color:#ccc;
}

#conteudo form input[type="text"]:focus, #conteudo form input[type="password"]:focus {
background-color:#fff;
}

#conteudo form input[type="submit"]{
background-color:#036;
color:#fff;
width:150px;
text-align:center;
padding:5px;
border-radius:5px;
float:left;
margin:0 50px;
}

#conteudo form input[type="submit"]:hover{
background-color:#000;
color:#fff;
}

.clear {
clear:both;
}
.borda {
border-top:1px solid #e1e1e1;
margin:10px auto;
}

.destaca {
color:#f90;
}

.logout {
float:right;
border:1px solid #900;
background-color:#ccc;
padding:5px;
width:250px;
height:25px;
text-align:center;
margin:10px 0 0;
}

.sairSistema {
font-size:70%;
color:#036;
margin:0 auto;
}

Como podem observar, nada mais é do que um formulário que pede os dados requisitados pelo nosso cliente X. Nele, constam todos os campos que o mini-briefing nos pediu, e, sim, ele tem o cabeçalho em HTML5.

Tem também um link para que, se o usuário já estiver cadastrado no sistema, ter acesso ao seu “Conteúdo Exclusivo”.

O formulário, assim que o usuário o tiver preenchido e clicado no botão “Efetuar Cadastro”, será enviado ao arquivo

cadastraUsuario.php

<!DOCTYPE HTML>

<html lang="br" class="no-js">

<head>

<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="style.css" rel="stylesheet" />

</head>

<body>

<div id="conteudo">

<h1>Sistema de login e senha criptografados</h1>

<div class="borda"></div>

<!-- Recebendo e gravando os dados -->
<?php

include "conexao.php";

//URL para a qual o usuário será enviado após ter preenchido todos os campos corretamente
$urlAcesso = "exclusivo/index.php";

//Recebendo os dados e tratando os mesmos para inserção no banco
$recebeSeuNome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_SPECIAL_CHARS);
$confereSeuNome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_MAGIC_QUOTES);
$recebeNomeUsuario = filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_SPECIAL_CHARS);
$confereNomeUsuario = filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_MAGIC_QUOTES);
$recebeEmail = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$recebeSenha = filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_SPECIAL_CHARS);

//Nesse if, faço uma conferência em relação ao e-mail informado; se não for um e-mail validado pelo filtro, ele retornará a mensagem abaixo.
//Se o email for válido, ele passa para a segunda parte da verificação
if ($recebeEmail == NULL ) {
echo "<p>Retorne e digite um e-mail válido por favor!";
echo "<p><a href='javascript:history.back();'>Voltar</a></p>";
return false;
}

//Nesse if, faço uma conferência em relação à senha informada. Se não for informada nenhuma, retorno a mensagem para que o usuário informe algo!
if ($recebeSenha == NULL ) {
echo "<p>Retorne e informe uma senha por favor!";
echo "<p><a href='javascript:history.back();'>Voltar</a></p>";
return false;
}

//Aqui faço a segunda parte da verificação: vejo se no nome de usuário foi utilizado algum caractere especial
//Isso serve para evitar uma possível invasão sql no banco de dados, possibilitando assim a proteção e integridade dos dados
//Nesse caso, eu comparo os nomes. Se forem iguais, após passarem pelos filtros, eu inicio a criptografia. Se não forem, peço que volte à página anterior
else if ($confereNomeUsuario != $recebeNomeUsuario) {
echo "<p>Você informou o seguinte Nome de Usuário: <strong>$recebeNomeUsuario</strong> .</p>";
echo "<p>Por favor, não utilize caracteres especiais (tais como aspas simples ou duplas, assim como barras!) no campo <strong>Nome de Usuário</strong>.</p>";
echo "<p><a href='javascript:history.back();'>Volte</a> para a página anterior e tente novamente! Obrigado!</p>";
return false;

}
else if ($confereSeuNome != $recebeSeuNome) {
echo "<p>Você informou o Seu Nome como: <strong>$confereSeuNome</strong> .</p>";
echo "<p>Por favor, não utilize caracteres especiais (tais como aspas simples ou duplas, assim como barras!) no campo <strong>Seu Nome</strong>.</p>";
echo "<p><a href='javascript:history.back();'>Volte</a> para a página anterior e tente novamente! Obrigado!</p>";
return false;
}

else {

//Aqui vou agora, criptografar as informações antes de enviá-las ao banco de dados
echo "<h3>Cadastrando informações em nosso banco de dados</h3>";

//Aqui vamos criar a função que vai criptografar os dados.
//Serão necessários criptografar apenas o endereço de e-mail e a senha informada

//Função para criptografar a senha
function criptoSenha($criptoSenha){
return sha1(md5($criptoSenha));
}
//Função para criptografar o e-mail
function criptoNomeUsuario($criptoNomeUsuario){
return sha1(md5($criptoNomeUsuario));
}
//Aqui realizo a criptografia do endereço de e-mail
$criptoNomeUsuario = criptoNomeUsuario(filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_MAGIC_QUOTES));
//Aqui realizo a criptografia da senha informada do usuário
$criptoSenha = criptoSenha(filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_SPECIAL_CHARS));

//Aqui eu vou realizar minha PRIMEIRA VERIFICAÇÃO DE CRIPTOGRAFIA no banco de dados
//Se o endereço de e-mail for válido, eu preciso verificar se o e-mail cadastrado já consta na base de dados.
//Como desejo que o e-mail seja um campo único, preciso verificar se o mesmo já foi ou não cadastrado no banco.
//A consulta segue abaixo:
$consultaBanco = mysql_query("SELECT * FROM usuario WHERE email = '$recebeEmail'") or die (mysql_error());
$verificaBanco = mysql_num_rows($consultaBanco);

if($verificaBanco == 1){

echo "<p>Prezado(a) <strong>$confereSeuNome</strong>, o endereço de e-mail informado (<strong><em>$recebeEmail</em></strong>) já consta em nossa base de dados!</p>";
echo "<p><a href='javascript:history.back();'>Volte</a> para a página anterior e informe um novo endereço! Obrigado!</p>";
return false;
}

//Agora vamos inserir os dados no banco
$insereDados = mysql_query("INSERT INTO usuario (id_usuario, nome, email, userlogin, passlogin, ativo) VALUES ('NULL', '$confereSeuNome', '$recebeEmail', '$criptoNomeUsuario', '$criptoSenha', 'sim')") or die (mysql_error());

echo "<p>Seu cadastro foi efetuado com sucesso!</p>";
echo "<p>Aguarde enquanto lhe encaminhamos para a página de acesso ao <strong>Conteúdo Exclusivo</strong>!";
echo "<meta http-equiv=\"refresh\" content=\"5;URL=".$urlAcesso."\">";
}

?>

</div>

</body>

</html>

E pronto! Se o usuário preencheu corretamente todas as informações requisitadas, ele será enviado para uma outra “index”, que estará dentro de uma pasta. No meu caso, nomeei essa pasta de “exclusivo”, e lá consta esse primeiro arquivo, o qual fará, novamente, requisições de dados para garantir o acesso do usuário ao “Conteúdo Exclusivo”.

Portanto, vamos trabalhar agora dentro de uma pasta chamada “exclusivo“. O primeiro arquivo que teremos acesso é o

exclusivo/index.php

<?php

ob_start();

include 'conexao.php';

//Essa variável $msg será explanada e apresentada no decorrer do tutorial

$msg = $_REQUEST["msg"];
?>
<!DOCTYPE HTML>

<html lang="br" class="no-js">

<head>

<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="../style.css" rel="stylesheet" />

</head>

<body>

<div id="conteudo">

<h1>Sistema de login e senha criptografados - Acesso ao Conteúdo Exclusivo</h1>

<div class="borda"></div>

<!-- Formulário para acesso -->
<p>Para ter acesso ao <strong>Conteúdo Exclusivo</strong>, por favor, logue-se utilizando o formulário abaixo!</p>

<form method="post" action="validaAcesso.php" id="validaAcesso">
<fieldset>
<legend>Login</legend>
<label for="nomeUsuario">Nome de Usuário:</label>
<input type="text" name="nomeUsuario" id="nomeUsuario" />
<div class="clear"></div>
<label for="senha">Senha:</label>
<input type="password" name="senha" id="senha" />
<div class="clear"></div>
<input type="submit" value="Acessar o sistema" />

</fieldset>
</form>

<p><small>Esqueceu seus dados? <a href="recuperaDados.php">Clique aqui!</a></small></p>

</div>

</body>

</html>

Na segunda parte desse tutorial, vamos trabalhar com a recuperação de dados, o qual se encontra linkado bem ao final do script acima. Por enquanto, vamos pensar que temos mais um arquivo de conexão dentro dessa pasta (exclusivo) que nos dá acesso ao banco de dados, e que não difere em nada do que já temos salvo. Vamos então, dar aquela analisada no arquivo

exclusivo/validaAcesso.php

 

<?php
ob_start();
include 'conexao.php';
$msg = $_REQUEST["msg"];
/*
Por questões de segurança, deixo eu aqui uma breve explicação e direcionamento.

Quando fores utilizar esse sistema em uma hospedagem web, recomendo que crie "usuários diferenciados" para acesso às informações no banco de dados.
Por exemplo: Se eu estiver pensando em criar duas áreas distintas, onde uma será a do administrador e outra será do usuário, seria interessante,
para efeitos de segurança e integridade do banco, criar um usuário com alguns privilégios dentro do banco, e outro com esses privilégios reduzido.

Administrador -> Poderia, dentro de seu ambiente, deletar informações do banco.

Usuário -> Deveria, em seu ambiente, apenas alterar informações, e nunca deletar sequer uma linha ou tabela ou base de dados.

Nesse caso, seria necessário trabalhar com dois arquivos de conexão, um para cada tipo de usuário.

#ficaDica

*/
?>
<!DOCTYPE HTML>

<html lang="br" class="no-js">

<head>

<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="../style.css" rel="stylesheet" />

</head>

<body>

<div id="conteudo">

<h1>Sistema de login e senha criptografados - Verificando Informações</h1>

<div class="borda"></div>

<!-- Recebendo e gravando os dados -->
<?php

include "conexao.php";
//Praticamente faço as mesmas validações que fizemos para o cadastrado do usuário no banco de dados.
//Recebendo os dados e tratando os mesmos para inserção no banco
$recebeNomeUsuario = filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_SPECIAL_CHARS);
$confereNomeUsuario = filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_MAGIC_QUOTES);
$recebeSenha = filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_SPECIAL_CHARS);

//Nesse if, faço uma conferência em relação à senha informada. Se não for informada nenhuma, retorno a mensagem para que o usuário informe algo!
if ($recebeSenha == NULL ) {
echo "<p>A senha precisa ser informada!";
echo "<p><a href='javascript:history.back();'>Voltar</a></p>";
return false;
}

//Aqui faço a segunda parte da verificação: vejo se no nome de usuário foi utilizado algum caractere especial
//Isso serve para evitar uma possível invasão sql no banco de dados, possibilitando assim a proteção e integridade dos dados
//Nesse caso, eu comparo os nomes. Se forem iguais, após passarem pelos filtros, eu inicio a criptografia. Se não forem, peço que volte à página anterior
else if ($confereNomeUsuario != $recebeNomeUsuario) {
echo "<p>Você informou o seguinte Nome de Usuário: <strong>$recebeNomeUsuario</strong> .</p>";
echo "<p>Por favor, não utilize caracteres especiais (tais como aspas simples ou duplas, assim como barras!) no campo <strong>Nome de Usuário</strong>.</p>";
echo "<p><a href='javascript:history.back();'>Volte</a> para a página anterior e tente novamente! Obrigado!</p>";
return false;

} else {

//Aqui vamos criar a função que vai criptografar os dados.
//Serão necessários criptografar apenas o endereço de e-mail e a senha informada

//Função para criptografar a senha
function criptoSenha($criptoSenha){
return sha1(md5($criptoSenha));
}

//Função para criptografar o e-mail
function criptoNomeUsuario($criptoNomeUsuario){
return sha1(md5($criptoNomeUsuario));
}

//Aqui realizo a criptografia do nome de usuário
$criptoNomeUsuario = criptoNomeUsuario(filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_MAGIC_QUOTES));

//Aqui realizo a criptografia da senha informada do usuário
$criptoSenha = criptoSenha(filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_SPECIAL_CHARS));

/*
Agora vamos consultar no banco de dados para ver se existe realmente esse cadastro
Vamos verificar ambos os dados: Nome de Usuário e Senha e ainda se o campo "ATIVO" está setado como SIM
Penso eu que, ao invés de simplesmente DELETAR um USUÁRIO ou DELETAR QUALQUER INFORMAÇÃO GRAVADA NO BANCO é tiro no pé.
Vez ou outra, pode ser que seja necessária rever a informação ou a ação, e se tivermos apagado os dados, não temos muito o que fazer.
Lembre-se sempre: o usuário quer uma coisa agora, e outra daqui a 10 minutos. Então, preserve-se da melhor maneira possível.
Prefiro sempre trabalhar com a hipótese de ATIVO, EXIBIR, LIBERAR algo, para poder mudar simplesmente de SIM P/ NÃO e vice-versa, do que deletar a informação.
Posso até IMPRIMIR no botão "Deseja deletar a informação"? mas nunca, realmente nunca, apagar determinada linha ou informação do banco.
*/

$consultaInformacoes = mysql_query("SELECT * FROM usuario WHERE userlogin = '$criptoNomeUsuario' AND passlogin = '$criptoSenha' AND ativo = 'sim'") or die (mysql_error());
$verificaInformacoes = mysql_num_rows($consultaInformacoes);

//Aqui vou verificar se houve resultado positivo na pesquisa
if($verificaInformacoes == 1){

//Aqui eu vou setar os cookies para gravar os dados de acesso do usuário
setcookie ("login", $criptoNomeUsuario, (time()+60*60*24*30 ));
setcookie ("senha", $criptoSenha, (time()+60*60*24*30 ));
setcookie ("nomeUsuario", $confereNomeUsuario, (time()+60*60*24*30 ));
//header ("Location: conteudoExclusivo.php");

echo "<p>Os dados informados estão corretos!</p>
<p>Por favor, aguarde alguns segundos. Estamos processando a sua entrada!</p>
<p>Obrigado!</p>";

$conteudoExclusivo = "conteudoExclusivo.php";
echo "<meta http-equiv=\"refresh\" content=\"3;URL=".$conteudoExclusivo."\">";

} else {
echo "<p>Nome de Usuário ou Senha informada não confere. Por favor, <a href='javascript:history.back();'>volte</a> e tente novamente!</p>";
}

}

?>

</div>

</body>

</html>

Se todos os dados baterem, a gente vai acessar  o “Conteúdo Exclusivo” em si. Primeiramente, precisamos criar um arquivo que “confere”, por assim dizer, se os dados setados no cookie realmente batem com os dados cadastrados no banco.

Essa é a “grande sacada” em se criar um sistema de login e senha! Eu preciso verificar TODAS AS PÁGINAS do sistema se o usuário e senha informados realmente são cadastrados no banco de dados! Segue abaixo, o arquivo

exclusivo/acessoUsuario.php

<?php

include 'conexao.php';

$criptoNomeUsuario = $_COOKIE["login"];
$criptoSenha = $_COOKIE["senha"];
$nomeUsuario = $_COOKIE["nomeUsuario"];

$confirmacao = mysql_query("SELECT * FROM usuario WHERE userlogin = '$criptoNomeUsuario' and passlogin = '$criptoSenha' and ativo = 'sim'") or die (mysql_error());

$verificaInformacoes = mysql_num_rows($confirmacao);
?>

Esse código que faz menção àquela variável chamada

$msg

que temos no cabeçalho de nosso arquivo. Se eu tentar acessar o conteúdo sem ter feito o login, é ela que será apresentada ao usuário!

Sendo assim, já podemos então, ter acesso ao

exclusivo/conteudoExclusivo.php

<?php
ob_start();

include 'conexao.php';
include 'acessoUsuario.php'; //Aqui verifico se os dados gravados em cookies são reais

if ( $verificaInformacoes == 1 ) {

?>
<?php
$criptoNomeUsuario = $_COOKIE["login"];
$resultado = "SELECT * FROM usuario WHERE userlogin = '$criptoNomeUsuario' AND ativo = 'sim'";
$listaCliente = mysql_query($resultado) or die (mysql_error());
while ($listagem = mysql_fetch_array($listaCliente)){
$nomeUsuario = $listagem ["nome"];
}
mysql_close();
?>
<?php
$msg = $_REQUEST["msg"];
?>
<!DOCTYPE HTML>

<html lang="br" class="no-js">

<head>

<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="../style.css" rel="stylesheet" />

</head>

<body>

<div id="conteudo">

<h1><span class="destaca"><?php echo $nomeUsuario; ?></span>, seja bem-vindo ao Conteúdo Exclusivo</h1>

<div class="borda"></div>

<div class="logout">
<p class="sairSistema"><a href="logout.php">Clique aqui</a> para sair do sistema</p>
</div>

<div class="clear"></div>

<h3>Conteúdo exclusivo 01</h3>

<p>Penatibus pellentesque tincidunt in in porta aenean adipiscing nisi porttitor? Lacus tincidunt cursus habitasse cursus adipiscing. Et porta nunc penatibus velit vel? Sociis ac porta natoque arcu integer? Odio. Ultricies purus pid dis habitasse magna etiam, sociis magna ut ut a, turpis odio habitasse et? Rhoncus proin lorem. Montes augue enim magna dignissim auctor tincidunt dapibus natoque quis dignissim mus rhoncus in lorem! Quis magna, amet, nunc vut auctor in, nec odio? Magna magnis magna, ultricies elementum porta, purus. Cras! Turpis turpis cum cras! Velit lacus eu porttitor, nec magna nisi et pellentesque hac ultrices dis, tempor velit, arcu etiam, lacus magna vut nisi mus! Ac dignissim pid? Aliquet hac, mid lacus cras ac? Dignissim pid, montes cursus porta, in.</p>

<p>Urna sit dignissim, lorem purus a arcu platea rhoncus natoque et ac scelerisque vel. Ac. Adipiscing augue! Auctor cursus ac! Ultrices, auctor sed etiam cum adipiscing adipiscing? Porttitor dignissim, sed dignissim cras? Elementum. Quis! Dignissim. Turpis proin est aliquam lundium in! Arcu elementum augue scelerisque, purus in auctor facilisis etiam aliquam enim nunc rhoncus ac. Dapibus pulvinar turpis et. Dapibus platea? Lectus turpis, integer platea auctor nisi enim augue placerat dolor nec enim rhoncus augue augue enim augue augue? Massa! Porta dapibus placerat, sed ultricies arcu tristique! Scelerisque vel aliquet egestas sit elit? Sociis a! Et sagittis scelerisque mus in porta auctor pulvinar, turpis magna, elementum mus montes augue in, odio, nascetur elementum adipiscing, placerat facilisis, nunc egestas dis.</p>

<h3>Conteúdo Exclusivo 02</h3>

<p>Platea est scelerisque, nascetur in, vel? Tortor elementum cras. Lectus tristique purus ut aliquam est aliquet augue! Augue eros scelerisque placerat placerat ut lacus porttitor dapibus elementum in rhoncus dignissim sed ut in habitasse massa, dolor pellentesque augue dictumst! In velit ridiculus sagittis, non. Dignissim amet, amet. Porta! Nisi, pulvinar tincidunt, rhoncus, dis egestas hac nunc, proin dictumst integer amet integer facilisis vel? Et aliquam purus, nascetur turpis. Augue. Augue tristique sit nec in turpis magna enim nascetur facilisis? Elementum ultricies adipiscing rhoncus elementum, ac elementum purus eros eros sit pellentesque integer augue sed et in velit ac phasellus scelerisque, tortor tempor, purus! Integer, tincidunt tristique habitasse dignissim. Mid auctor sagittis! Vel dolor integer lectus risus, ultrices, mauris, magna.</p>

<h3>Conteúdo Exclusivo 03</h3>

<p>Nec dis, penatibus, magnis ac odio dictumst ultrices elit. Habitasse eros pulvinar duis porta ac pulvinar in, porta, in ut proin integer adipiscing. Lundium phasellus tincidunt est cum, magna, porta in, ut elit, ut mattis! Sociis amet ac velit, cum pid, aenean odio dis pulvinar! Adipiscing, sed. Lundium ac, vut ac massa augue, turpis et nisi a velit cum? Porttitor dis adipiscing pulvinar augue cum? Urna augue! Porttitor, pellentesque lorem cursus proin turpis amet scelerisque duis odio vut. Tincidunt mus! Cursus purus magna, urna in ac aenean! Vut nec, non aliquet risus proin, turpis habitasse placerat enim tristique! Diam cras in? Magna? Turpis, habitasse risus habitasse dis nisi risus parturient et, natoque pid habitasse! Sociis, sed odio mid rhoncus.</p>

<div class="borda"></div>

</div>

</body>

</html>

<?php
}
else {
$urlAcesso = "index.php";
echo "
<script type='text/javascript'>
alert('Proibido o acesso por esse meio. Volte e informe os dados corretamente. Obrigado e aguarde o redirecionamento para a tela inicial!');
</script>";
echo "<meta http-equiv=\"refresh\" content=\"1;URL=".$urlAcesso."\">";
}
?>

E para finalizar essa primeira parte, segue abaixo o arquivo que vai efetuar nossa “saída”, o

exclusivo/logout.php

<?php

// Configura a data de expiração para uma hora

setcookie ("login", "", time() - 3600);
setcookie ("senha", "", time() - 3600, 1);
header("Location: index.php?msg=Você saiu do sistema!");

?>

É isso aí!

Na segunda parte desse tutorial, vamos dar um jeito de fazer com que nosso usuário possa recuperar, ou melhor, gerar novos dados para cadastrar no sistema.

Vamos, de maneira resumida, enviar um e-mail para o mesmo, utilizando a classe PHPMailer, para que acesse uma página de nosso sistema que possibilite, após comprovar que o e-mail realmente já se encontra em nossa base de dados, a inserção de novos dados de usário e senha para acesso.

Espero que seja de grande valia a todos e que possa ajuda e bastante em seus estudos!

Forte abraço e até a segunda parte (que está aqui!)!

 

OBS: Só para constar, experimente acessar a página “conteudoExclusivo.php” sem fazer o login. Se ele acessar a página, algo deu errado.

  • Arte Silkgra

    Boa tarde André,
    estou com um problema na variavel $msg = $_REQUEST[“msg”]; do arquivo exclusivo/index.php… esta dando uma msg de erro q diz o seguinte:
    Notice: Undefined index: msg in C:xampphtdocsexemplologin3exclusivoindex.php on line 9

  • Arte Silkgra

    Boa tarde André,
    consegui colocar para rodar aqui mais estou com um problema com a variavel $msg = $_REQUEST[“msg”];
    todas as pag. q aparecem msg de erro apontam para essa variavel como posso proceder aqui..
    parabens pela iniciativa de compartilhar teu irmão, com certeza voce vai ser favorecido com muito mais conhecimoento

    • Fala Arte!

      Eu que agradeço o seu empenho e dedicação! Essa “mensagem” que se apresenta pode ser da configuração de seu servidor web ok? Às vezes ele é configurado para exibir QUALQUER coisa que ele entenda como problema. Inclusive, quando se trata apenas de um aviso.

      Abraços cara!

  • Bruno

    Boa Tarde André,
    O meu sistema da usuário ou senha inválidos, ele não retorna para página que coloquei para quando der erro, o que acontece?Se puder me ajudar. Adpatei algumas coisas, porque na verdade só preciso de um login e senha, e quando a pessoa logar com o login e senha que criei dentro php ela é direcionada para uma página chamada index.html
    Abraços

    • Fala Bruno.

      Então cara .. aí complica um pouco meu amigo. Se você estivesse usando o código conforme eu coloquei no site, já seria meio difícil de te ajudar com as informações que me passou; se você ainda mudou ele … aí beira o impossível.

      Posso adiantar uma coisa apenas: se você está direcionando o usuário para uma página “.HTML” após o uso do login e senha, não tá adiantando nada ok? Tente acessar a página digitando diretamente o caminho dela no navegador. Algo do tipo: localhost/sistema/restrito/index.html e você vai ver que a pessoa acessa a página que deveria ser restrita, de maneira direta.

      Então, não há sentido correto?

      Abraços!

  • AsasPara Ajudar

    Boa noite amigo, estou com um problema na tela de login, vulgo, /exclusivo/index.php aonde aparece o seguinte erro: Notice: Undefined index: msg in C:UsersPublicDocumentsxampphtdocssiteAPAexclusivoindex.php on line 9

    • Olá Asas!

      Desculpe a demora para responder! Vamos lá: parece que tem algo no seu banco de dados que não foi setado corretamente!

      Abraços!

  • vaniomartins

    boa noite andre o meu esta dando este erro Incorrect integer value: ‘NULL’ for column ‘id_usuario’ at row 1 vc sabe como resolver por favor?

    • Olá Vanio.

      O erro é apresentado onde meu amigo? Desse jeito fica difícil de saber onde exatamente eu poderia lhe ajudar.

      Abraços!

  • Hahahahahaha … que isso Aldo!

    Obrigado pelas palavras meu velho. Mas se eu me disponho a compartilhar um pouco do que sei contigo, eu me sinto na obrigação – o que não vejo como, diga-se de passagem – de te dar auxílio e tentar fazê-lo entender como funciona o esquema.

    Muita gente me ajudou e ajuda até hoje nesse ramo. Porque eu vou ser diferente?

    Sinta-se a vontade em voltar sempre que tiver dúvidas, e se eu puder ajudar, o farei de bom grado!

    Abraços e até mais!

  • Bruno Correia

    André, muito obrigado pelo script. É exatamnete o que estou precisando. O meu também está apresentando a mensagem de erro Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’ in /home/trocoolcom/public_html/teste/cadastraUsuario.php on line 109 e não consigo localizar onde está faltando a , ou ;. Alguempode enviar o arquivo zipado com os PHP pra mim. E-mail correia2203@hotmail.com. Obrigado.

    • Fala Bruno!

      Cara, dei uma olhada na linha e realmente tem um erro ali ao qual não me atentei. Substitua o que se encontra na linha 109 pela seguinte linha de comando:

      echo “”;

      Estou alterando no script postado no site, assim como no banco de scripts e demais locais onde o mesmo erro persiste ok?

      Abraços e até mais!

      • Bruno Correia

        Muito obrigado André! Tá funcionando muito bem.
        Só agora está apresentando um erro ao solicitar nova senha. É exibida essa mensagem: Warning: include() [function.include]: URL file-access is disabled in the server configuration in /home/storage/8/52/a1/NOME DO SITE/public_html/artigos/exclusivo/enviaInformacoes.php on line 127

        Warning: include(http://www.NOME DO SITE.com.br/php/phpmailer/class.phpmailer.php) [function.include]: failed to open stream: no suitable wrapper could be found in /home/storage/8/52/a1/NOME DO SITE/public_html/artigos/exclusivo/enviaInformacoes.php on line 127

        Warning: include() [function.include]: Failed opening ‘http://www.NOME DO SITE.com.br/php/phpmailer/class.phpmailer.php’ for inclusion (include_path=’.:/usr/share/pear’) in /home/storage/8/52/a1/NOME DO SITE/public_html/artigos/exclusivo/enviaInformacoes.php on line 127

        Fatal error: Class ‘PHPMailer’ not found in /home/storage/8/52/a1/NOME DO SITE/public_html/artigos/exclusivo/enviaInformacoes.php on line 172

        • Fala Bruno!

          Que bom então que tudo deu certo compadre! Agora, esse problema novo aí eu já deixou contigo cara! Ele informa que não encontrou um arquivo que você tá pedindo para incluir … vc baixou o arquivo do PHPMailer e subiu ao servidor?

          Lembrando apenas que servidores locais – o que você instala em sua máquina – não enviam e-mail ok?

          Abraços e qualquer outra dúvida, posta aí!

  • mcgiver stone

    Comigo está acontecendo esse erro aqui depois que eu clico em cadastrar e também no link de acessar o conteudo exclusivo. é um erro que se refere a possível falta de ponto e virgula na linha anterior a informada, pesquisei algo a respeito de descobri que pode ser a falta de colocar uma barra ao contrário () em algum lugar entre as aspas duplas: Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’ in /home/trocoolcom/public_html/teste/cadastraUsuario.php on line 109

    • Fala Mcgiver!

      Conseguiu arrumar o erro meu velho? Não acredito que seja o que alega, já que o erro apresentado solicita a inserção de um ponto e vírgula ou vírgula simples em alguma linha … provavelmente nas linhas anteriores a linha 109 do seu código.

      Abraços!

      • mcgiver stone

        Prezado André, fico muito feliz por voce me responder, acontece que só agora vi seu recado aqui, vou tentar olhar o codigo novamente, referente a falta do ponto e virgula, vou testar e te informo o resultado. Muito obrigado mesmo!

        • Sem crise velho!

          Abraços!

          • mcgiver stone

            caro André, eu testei novamente o código e aquele erro no ponto e virgula sumiu, mas o problema agora é outro. Quando preencho os dados de login e clico no botão “efetuar cadastro” ele vai para a página cadastraUsuario.php totalmente em branco e não mostra mais nada. A proposito, quando você vai finalizar esse artigo, com as outras partes? Grato mais uma vez.

  • Fala Manoel!

    Obrigado pelas palavras compadre!

    Abraços e até mais!

    • Ah Manoel!

      Tem um sistema de comentários em PHP no site também … chegou a vê-lo?

      Abraços!

  • Lando

    Olá André

    Cara sou iniciante mais estou com um problema quero ajuda sua se fosse possível sei que não é uma coisa para iniciantes
    estou tentando tenho o básico ms preciso muito fazer funcionar agradeço desde já Andre Buzzo e parabéns pelo seu trabalho.
    Parse error: parse error, expecting `’,” or `’;” in C:wampwwwcadastroCADASTRAUSUARIO.PHP on line 109

    • Fala Lando!

      Cara, você não colocou um Ponto e Vírgulano final de alguma linha de programação ou na linha 109 ou acima da linha 109 …

      Dá uma olhada no seu código compadre!

      Abraços!

      • Lando

        Blz André deu certo cara agora já tem outro kkk obrigado André agora vamos ver segundo passo.

        • Hahahahahaha …. vá lá cara!

          Qualquer pepino estamos por aqui!

          Abraços!

  • Que bom Leo!

    Abraços meu velho!

  • Fala Leo! Cara, veja se o seu navegador aceita cookies cara …

    Abraços!

  • Mateus

    Fala André! Era exatamente isso! Muito obrigado!

    Abraços

  • Mateus

    André parabéns pelo sistema!
    Estou com um problema quando faço o cadastro.

    “Retorne e digite um e-mail válido por favor!”
    Só que ele grava no banco de dados o e-mail, mas não entra na parte privada do sistema. Sabe o que pode ser?

    Um abraço e obrigado!

    • Fala Mateus!! Obrigado cara!

      Vamos lá: ele grava o e-mail mesmo sendo inválido? Se positivo, falta um “return false” nessa condição … para que ele pare a execução do script e não grave em banco.

      Abraços!

  • Eder Silva

    Bom dia André, estou estudando o PHP agora e gostei muito deste seu tutorial sobre login criptografado, ao testar aconteceu um erro se possível me ajudar… Quando lanço o usuário e senha ele diz que a senha esta vazia.. mas eu coloquei…. Dá até a mensagem de Login e Senha Corretos estamos direcionando e depois diz que a senha deve ser informada….

    Pode me ajudar…

    • Olá Eder!

      Cara, verifique se está mesmo recebendo a senha através do formulário … ao que parece, não está não. Ou se estiver, tem algo dentro dos arquivos de verificação que estão dando “problema” …

      Abraços!

  • karoline

    Eu estou criando um site exatamente com todas as necessidades do feito acima, porém estou criando em java e não em php ( pois não sei php ainda ), então quero lhe perguntar, você sabe fazer isto em java? e se sabe, há como enviar um tutorial para meu email ou até mesmo postá-lo aqui? agradeceria muito se caso soubesse fizesse esse grande favor, aguardo resposta, obrigada!

  • Jonatan Casoni

    Bom dia André, eu vi que você tem uma grande habilidade em desenvolver sistema de login e senha para sites! Gostaria de saber, se você poderia fazer um sistema desses para mim, no meu site, pois até o presente momento não tive tempo de desenvolver esse sistema! Como poderia entrar em contato com você para dar mais esclarecimentos? No aguardo!

    • Fala Jonatan!

      Obrigado meu velho! Te respondi em seu e-mail!

      Abraços!

  • Excelente código muito bom mesmo !!!

    • Olá Aparecida!

      Espero que tenha lhe ajudado em algo!

      Abraços!

  • Diego

    Parabéns pelo tutorial, poderia me enviar os fontes para que eu possa tentar implementar no meu sistema?

    desde já muito obrigado

    • Fala Diego!

      Os arquivos estão na seção “Banco de Scripts” aqui do site.

      Abraços!

  • Matheus G

    André Buzzo , estou disposto a pagar voce , se vc me ensinar a incluir scripts em sites e estou querendo um script tbm , favor entrar em contato cmigo o mais rapido possivel isso e urgente.

    facebook:
    kifo liwo

    • Matheus G, adicionei você ao Facebook. Conversaremos por lá ok?

      Abraços!

  • Matheus G

    Boa Noite , gostaria de saber cmo coloco esse script em meu site , ja tentei de varias formas ate pelo include e nao consiguir , se puder me ajudar o mais rapido possivel fico grato :D

    • Fala Matheus G !

      Compadre, o script está aí e não há segredo em inseri-lo em seu projeto. Basta apenas um pouco de conhecimento em programação.

      Abraços!

  • Elizeu SIlva

    Jesus… tem algo que você não saiba ?
    Ainda estou aprendendo, mas ficaria muito feliz se depois de terminar meu curso de ADS, soubesse pelo menos 50% do que você já sabe.
    E olha que to aproveitando que to desempregado pra estudar.
    Abraços e Obrigado pelas ideias que você nós dá.
    Rs! vou destroçar esse código!!! iupi \o/

    • Opa se têm Elizeu!

      Programação Orientada a Objetos é uma delas! kkkkkk … ô coisa chata!

      Abraços!

  • Clayton Souza

    Excelente, o que eu sei sobre sites e scripts, que não é muito, devo a sites e profissionais como você que doam conhecimento de forma gratuita. Valeu!

    • Fala Clayton!

      Fico feliz em saber que de alguma maneira, eu posso contribuir para seu aprendizado!

      Forte abraço!

      Até mais!

  • Jeferson

    já procurei em tudo mais não achei uma sistema de login e senha usando SESSION parecido com esse seu sistema usando COOKIE todos que eu achei não criptografava o login e senha e uma pessoa facilmente poderia dar um Rainbow table (não sei o nome direito não mecho com php :/ to começando agora)

    não sei se é pedir muitos mais poderia fazer um?

    Vlw e desculpa por ter enviado 2 comentários é q cliquei em enviar sem querer agora

    • Fala Jeferson!

      Dê uma olhada na sua caixa de “Lixo Eletrônico”. Estou enviando um orçamento para você para que eu desenvolva o sistema utilizando SESSION.

      Forte abraço!

  • Jeferson

    o logout.php resolvi mais ou menos, a pessoa clica em deslogar só q vai deslogar só depois de 3 minutos porque antes disso n funciona.

    Sim estou precisando desse sistema utilizando SESSION.

    Vlw!

  • Jeferson

    esse sistema de login e senha é perfeito pra mim só q eu queria saber se tu consegue fazer um SISTEMA DE LOGIN E SENHA igual esse só q usando SESSION em vez de COOKIES

    • Fala Jeferson!

      Dá para montar o sistema utilizando SESSION sim. Você está precisando desse recurso?

      Em relação ao problema com o logout.php, conseguiu resolver?

      Abraços!

  • Jeferson

    Olá André Buzzo
    Descobrir seu site a pouco dias e gostei.

    to começando agora a criar site sou novo e não sei nada em php to aprendendo agora, quero uma ajuda na parte do logout.php eu fiz tudo certinho e funciono só que quando eu clico em logout fala q eu sai do site mais, eu tento acessar ele dnv sem ter q logar e aparece que ainda estou logado.

    Gostei do Site :) parabens.

  • Edson Bonjiovani

    Gostei do site.
    Trabalho com servidor de jogo e estou a procura de um especialista em
    websites.
    Se houver algum intereçado vou deixar logo abaixo meus contatos:
    skype: edson.jr.mormaii

    • Fala Edson!

      Obrigado pelo comentário, mas fiquei sem entender! Você achou o artigo interessante ou precisa apenas de um profissional interessado em prestar serviço para você?

      Abraços!

  • Henrique

    Show de Bola André.
    Só que não vi a página para Recuperar os Dados!
    Ou eu fiz algo errado? rsrs

    Abraço

    • Fala Henrique!

      Está na parte 02 meu amigo!

      Abraços!

      • mcgiver stone

        cade o link dessa continuação????? o meu codigo tambem ta pedindo esse arquivo

        • Macgiver, está nesse link: http://www.andrebuzzo.com.br/sistema-de-login-e-senha-criptografados-parte-02/#.VqDgwpSZElE

          Sobre a página retornando em branco … em algum ponto ele parou de compilar meu amigo … ainda tá dando algum erro …

          Abraços!

          • mcgiver stone

            obrigado mais uma vez por responder, mas realmente deve ser erro na compilação e nao tenho a minima ideia do que se trata. mesmo assim obrigado!

            • Mcgiver, tudo bem contigo?

              Desiste não compadre! Teve outro cara que também relatou o problema na linha 109 e eu resolvi dar uma pescoçada lá e ver o que eu postei de errado. E realmente tinha um erro lá.

              Eu alterei uns 3 scripts pois havia realmente um problema nas linhas de comando que envolviam o “refresh”.

              Testei aqui na minha máquina e agora, está funcionando do jeito que deveria funcionar!

              Abraços cara! Obrigado por tantas indas e vindas aqui!

              Té mais!

              • Caro André fico feliz que corrigiu o problema dentro do seu código, poderia publicar para nós a linha devidamente alterada e corrigida, para que todos nós possamos atualizar também nossos scripts?

                • Aldo, na linha 109 então altere para esse código:

                  echo “”;

                  Há, em outros dois scripts, o “refresh” digitado erroneamente. Peço a gentileza de verificar no escopo do projeto e realizar a alteração sugerida ok? Aí vc só observa o tempo do refresh e para qual variável ele aponta!

                  Abraços compadre! Desculpe a dor de cabeça!

  • Claudiney W.

    Parabéns, pelo site, e os artigos, to me divertindo com eles!!

  • Madson

    Opa! Então cara, o sistema todo funciona e apresenta a mensagem de restrição ao conteúdo exclusivo e tals..só que não sai esse Undefined index…por isso acho estranho.

    • Madson, se você procurar no Google sobre o erro verá que tem bastante conteúdo sobre o assunto.

      Numa rápida busca, encontrei esse artigo que pode te ajudar: www[.]htmlstaff[.]org/ver[.]php?id=11074

      Remova as chaves e cole o endereço no seu navegador. O conteúdo está em português.

      Algum campo de seu formulário não está passando algum valor….

      Abraços!

  • madson

    Buenas André, beleza?! Parabéns pelo brilhante tutorial ! Aqui pra mim tá aparecendo “Undefined index: msg…” no index.php da pasta exclusivo. Não to conseguindo achar a relação pra consertar.
    Pode me ajudar? Obrigado.

    • Fala Madson!

      Cara…você tá “apontando” direito pra pasta?

      Abraços!

  • joaovictor

    oie, nao consegui poderia faser um pra min? caso sim meu face e joaovictor-nerd@hotmail.com

    • Fala João Victor!

      É claro que eu faço um sistema para você! Estou enviando o orçamento em seu e-mail ok?

      Abraços!

  • Nailton

    Boa Noite!

    André, eu copiei esses códigos todos pro notepad++ , e fui salvando como vc descreve em cada arquivo php, criei a pasta exclusivo, e o banco de dados no mySql.

    porem quando executo a index que vou cadastrar o usuario e clico no button “efetuar cadastro” ela vai pra pagina cadastraUsuario.php e aparesse alguns códigos na tela que não deveriam , e não efetua o cadastro!

    será que há algo errado nos códigos , ou sou eu quem fez alguma coisa errada???

    • Fala Nailton!

      Você está usando algum “servidor web” instalado na sua máquina? Ele está acessando o banco?

      Abraços!

  • Ozéias Costa

    Show de bola, André!
    Me ajudou bastante aqui, meu velho!
    Abraços!

    • Ô Ozéias! Quanto tempo hein véio?

      Abraços!

  • Junior Varoni

    Será de grande ajuda isso, grato.. Bom trabalho

  • Léo Motta Rocha, me desculpe!

    Apaguei sem querer seu comentário meu velho!

    Obrigado por me parabenizar pelas mais de 20 mil visitas ao post.

    Valeu!

    Abraços!

  • Rudnei

    Daew Andre vc mais uma vez esta de parabéns!!!

  • Wagner Gilberto

    Show de bola, parabéns pelo seu site suas vídeos aulas e seu valioso tempo em publicar (códigos, vídeos, truques e macetes ),

Saiba mais sobre

André Buzzo

Sou desenvolvedor web especializado na criação de sites gerenciáveis com Wordpress; colunista da Abraweb - Associação Brasileira de Webdesigners - e tutor na instituição MX Cursos.

Template? Eu programo o seu!

Então você comprou um template, e pensou que ia ser fácil colocar seu site no ar né?

Pode ser fácil sim! Deixa comigo que eu faço ele ficar funcional para ti!

pesquise por conteúdos

Meus cursos

eu recomendo!

instagram