www.hostmil.com.br Dica: Twitter em português!
Hospedagem, Loja Virtual, Web Design, SEO, ...
 
 
 
Dicas - Criar um Sistema de Cadastro em PHP + MySQL HostMil

Seguiremos passo a passo:

Criar um banco de dados MySQL;
Utilize o link acima para ver como criar o Banco de Dados se precisar criar um novo, caso contrário no item seguinte você escolherá qual Banco de Dados conterá mais uma tabela de nomo "usuarios".

2º Utilizar o gerenciador de sql phpMyAdmin:

Criar tabela de usuários: bancodedados.sql, digitando ou copiando do arquivo de download ao final da página na área de Consulta do phpMyAdmin após escolher o banco de dados onde irá criar esta tabela.

CREATE TABLE usuarios(
usuario_id int(25) NOT NULL auto_increment,
nome varchar(25) NOT NULL default '',
sobrenome varchar(25) NOT NULL default '',
email varchar(25) NOT NULL default '',
usuario varchar(25) NOT NULL default '',
senha varchar(255) NOT NULL default '',
info text NOT NULL,
nivel_usuario enum('0','1','2') NOT NULL default '0',
data_cadastro datetime NOT NULL default '0000-00-00 00:00:00',
data_ultimo_login datetime NOT NULL default '0000-00-00 00:00:00',
ativado enum('0','1') NOT NULL default '0',
PRIMARY KEY (usuario_id)
) ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_general_ci COMMENT = '';

3º Criar os arquivos php e html:

3.1 - Criar o arquivo de conexão com o banco de dados: config.php

<?php

define('BD_USER', 'USUARIO'); // USE O TEU USUÁRIO DE BANCO DE DADOS
define('BD_PASS', 'SENHA'); // USE A TUA SENHA DO BANCO DE DADOS
define('BD_NAME', 'NOME_BANCO_DE_DADOS'); // USE O NOME DO TEU BANCO DE DADOS

mysql_connect('localhost', BD_USER, BD_PASS);
mysql_select_db(BD_NAME);

?>

 

3.2 - Montar o formulárioo de cadastro para o banco de dados acima: formulario_cadastro.php

<!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>Formul&aacute;rio Cadastro</title>
<style type="text/css">
<!--
body {
background-color: #CCCCCC;
}
-->
</style></head>

<body>
Formul&aacute;rio de Cadastro <br /><br />
<form name="cadastro" method="post" action="cadastra.php">
Nome<br />
<input name="nome" type="text" id="nome" value="<?php echo $nome; ?>" /><br />
<br />
Sobrenome<br />
<input name="sobrenome" type="text" id="sobrenome" value="<?php echo $sobrenome; ?>" /><br />
<br />
Email<br />
<input name="email" type="text" id="email" value="<?php echo $email; ?>" /><br />
<br />
Nome de Usu&aacute;rio<br />
<input name="usuario" type="text" id="usuario" value="<?php echo $usuario; ?>" /><br />
<br />
+ informa&ccedil;&otilde;es sobre voc&ecirc;<br />
<textarea name="info" id="info"><?php echo $info; ?></textarea>
<br />
<br />
<input type="submit" name="Submit" value="Enviar" />

</form>
</body>
</html>

 

3.3 - O formulário necessita do arquivo que recebe os dados enviados: cadastra.php

<?php

include "config.php";

$nome = trim($_POST['nome']);
$sobrenome = trim($_POST['sobrenome']);
$email = trim($_POST['email']);
$usuario = trim($_POST['usuario']);
$info = trim($_POST['info']);

/* Vamos checar algum erro nos campos, mas tenha em mente que existem formas bem mais eficientes de tratar os dados que são enviados ou n&atilde;o pelos campos do formulário */

if((!$nome) || (!$sobrenome) || (!$email) || (!$usuario)){

echo "ERRO: Voc&ecirc; n&atilde;o enviou as seguintes informaç&otilde;es requeridas para o cadastro! <br /> <br />";

if(!$nome){

echo "Nome &eacute; um campo requerido. <br />";

}

if(!$sobrenome){

echo "Sobrenome &eacute; um campo requerido. <br />";

}

if(!$email){

echo "Email &eacute; um campo requerido.<br />";

}

if(!$usuario){

echo "Nome de Usu&aacute;rio &eacute; um campo requerido. <br />";

}

echo "<br />Preencha os campos necess&aacute;rios abaixo: <br /><br />";

include "formulario_cadastro.php";

}
else{

/* Vamos checar se o nome de Usuário escolhido e/ou Email já existem no banco de dados */

$sql_email_check = mysql_query("SELECT COUNT(usuario_id) FROM usuarios WHERE email='{$email}'");
$sql_usuario_check = mysql_query("SELECT COUNT(usuario_id) FROM usuarios WHERE usuario='{$usuario}'");

$eReg = mysql_fetch_array($sql_email_check);
$uReg = mysql_fetch_array($sql_usuario_check);

$email_check = $eReg[0];
$usuario_check = $uReg[0];

//$email_check = mysql_num_rows($sql_email_check);
//$usuario_check = mysql_num_rows($sql_usuario_check);

if(($email_check > 0) || ($usuario_check > 0)){

echo "<strong>ERRO </strong>- Por favor corrija os seguintes erros abaixo: <br /> <br />";

if($email_check > 0){

echo "Este email ( <strong>".$email."</strong> ) j&aacute; est&aacute; sendo utilizado.<br />Por favor utilize outra conta de email! <br />";

unset($email);

}

if($usuario_check > 0){

echo "Este nome de usu&aacute;rio ( <strong>".$usuario."</strong> ) j&aacute; est&aacute; sendo utilizado.<br />Por favor utilize outro nome de usu&aacute;rio!<br />";

unset($usuario);

}

print "<br />";
include "formulario_cadastro.php";

}
else{

/* Se passarmos por esta verificação ilesos é hora de finalmente cadastrar
os dados Vamos utilizar uma função para gerar uma senha randômica */

function makeRandomPassword(){

$salt = "abchefghjkmnpqrstuvwxyz0123456789";
srand((double)microtime()*1000000);

$i = 0;

while($i <= 7){

$num = rand() % 33;
$tmp = substr($salt, $num, 1);
$pass = $pass . $tmp;
$i++;

}

return $pass;

}

$senha_randomica = makeRandomPassword();

$senha = md5($senha_randomica);

// Inserindo os dados no banco de dados

$info = htmlspecialchars($info);

$sql = mysql_query("INSERT INTO usuarios (nome, sobrenome, email, usuario, senha, info, data_cadastro)
VALUES('{$nome}', '{$sobrenome}', '{$email}', '{$usuario}', '{$senha}', '{$info}', now())")
or die( mysql_error() );

if(!$sql){

echo "Ocorreu algum erro ao criar sua conta, por favor entre em contato com o Webmaster.";

}
else {

$usuario_id = mysql_insert_id();

// Enviar um email ao usu&aacute;rio para confirmação e ativar o cadastro!

$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "From: Teu Domínio - Webmaster<teuemail@teudominiodeemail.com>"; // TEU DOMÌNIO E TEU EMAIL

$subject = "Confirmação de cadastro - teusite.com";
$mensagem = "Prezado <strong>$nome $sobrenome</strong>,

<br />

Obrigado pelo seu cadastro em nosso site,
<a href ='http://www.teusite.com'>www.teusite.com</a>!

<br /><br />

Para confirmar seu cadastro e ativar sua conta, podendo assim acessar áreas exclusivas,
por favor clique no link abaixo ou copie e cole o link na barra de endereço do seu navegador.

<br /><br />

<a href ='http://www.teusite.com/ativar.php?id=$usuario_id&code=$senha'>
http://www.teusite.com/ativar.php?id=$usuario_id&code=$senha
</a>

<br /> <br />

Após a ativação de sua conta, você poderá ter acesso ao conteúdo exclusivo,
efetuando o login com os dados abaixo:

<br /> <br />

<strong>Usuario</strong>: {$usuario}

<br />

<strong>Senha</strong>: {$senha_randomica}

<br /><br />

Obrigado!<br /> <br />

Webmaster<br /> <br /> <br />

Esta é uma mensagem automática, por favor não responda!";

mail($email, $subject, $mensagem, $headers);

echo "Foi enviado para seu email - ( ".$email." ) um pedido de confirma&ccedil;&atilde;o de cadastro,
por favor verifique e sigas as instru&ccedil;&otilde;es!";

}

}

}

?>

 

3.4 - No arquivo acima, ao cadastrar-se, automaticamente é enviado uma mensagem de confirmação de cadastro para a conta de email que o usuário digitou no formulário de cadastro. Esta mensagem conterá instruções de como proceder. Através de um link nesta mensagem, executará um arquivo que ativa definitivamente sua conta e só a partir desta ativação que o membro poderá acessar a área restrita. A rotina de ativação a seguir: ativar.php

<?php

include "config.php";

$usuario_id = $_REQUEST['id'];
$senha = $_REQUEST['code'];

$sql = mysql_query("UPDATE usuarios SET ativado='1' WHERE usuario_id='{$usuario_id}' AND senha='{$senha}'");

$sql_doublecheck = mysql_query("SELECT * FROM usuarios WHERE usuario_id='{$usuario_id}' AND senha='{$senha}' AND ativado='1'");
$doublecheck = mysql_num_rows($sql_doublecheck);

if($doublecheck == 0){

echo "<strong>Sua conta n&atide;o pode ser ativada!</strong>";

}
elseif($doublecheck > 0){

echo "<strong>Seu cadastro foi ativado com sucesso!</strong><br />Voc&ecirc; pode fazer o login logo abaixo!<br /><br />";
include "formulario_login.html";

}

?>

 

3.5 - Já estando cadastrado como usuário e ativado sua conta corretamente e sem problemas. Mas para cadastrar um usuário devem ser dados alguns privilégios para este membro?
Ao efetuar o login o usuário cadastrado terá acesso à uma área restrita, mas precisamos de um formulário de login simples: formulario_login.html

<!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>Login</title>
</head>

<body>
Login <br /><br />

<form action="verifica_usuario.php" method="post" name="" id="">

Usuario<br />
<input name="usuario" type="text" id="usuario" /><br />
Senha<br />
<input name="senha" type="password" id="senha" /><br /><br />

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

</form>

</body>
</html>

 

3.6 - Disponibilizar um formulário de login se não ter um arquivo para receber os dados enviados e efetuar uma verificação se realmente são dados de um usuário cadastrado ou alguém tentando logar sem as devidas permissões, utilizaremos o: verifica_usuario.php

<?php
session_start(); // Inicia a session
include "config.php";
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
if ((!$usuario) || (!$senha)){

echo "Por favor, todos campos devem ser preenchidos! <br /><br />";

include "formulario_login.html";

}else{

$senha = md5($senha);

$sql = mysql_query(

"SELECT * FROM usuarios
WHERE usuario='{$usuario}'
AND senha='{$senha}'
AND ativado='1'"

);
$login_check = mysql_num_rows($sql);
if ($login_check > 0){
while ($row = mysql_fetch_array($sql)){
foreach ($row AS $key => $val){
$$key = stripslashes( $val );
}
$_SESSION['usuario_id'] = $usuario_id;
$_SESSION['nome'] = $nome;
$_SESSION['sobrenome'] = $sobrenome;
$_SESSION['email'] = $email;
$_SESSION['nivel_usuario'] = $nivel_usuario;
mysql_query(

"UPDATE usuarios SET data_ultimo_login = now()
WHERE usuario_id ='{$usuario_id}'"
);
header("Location: area_restrita.php");
}
}else{
echo "Você não pode logar-se! Este usuário e/ou senha não são v&aacute;lidos!<br />
Por favor tente novamente!<br />";
include "formulario_login.html";
}
}
?>

 

3.7 - Acima, o usuário que não esteja cadastrado no banco de dados ou caso ele insira dados errados nos campos do formulário de login, ele não consegue entrar na área restrita, mas se conseguir validar, terá acesso à tão desejada área restrita. Vamos então fazer um arquivo de exemplo que representará uma página de acesso restrito: area_restrita.php

<?php
session_start(); // Inicia a session
include "functions.php"; // arquivo de funções.
session_checker(); // chama a função que verifica se a session iniciada da acesso à página.
echo "Bem vindo <strong>". $_SESSION['nome'] ." ". $_SESSION['sobrenome'] ."</strong>!<br />
Você est&aacute; acessando &aacute;rea restrita para usu&aacute;rios cadastrados!
<br /><br />";

echo "Seu nível de usu&aacute;rio &eacute; <strong>". $_SESSION['nivel_usuario']."</strong>.
<br />Com esse n&iacute;vel, voc&ecirc; tem permis&atilde;o de acesso &agrave;s
seguintes &aacute;reas: <br /><br />";

if ($_SESSION['nivel_usuario'] == 0){

echo "- <strong>Forum</strong><br />Abrir t&oacute;picos, postar em t&oacute;picos
de terceiros.<br /><br />";

}

if ($_SESSION['nivel_usuario'] == 1){

echo "- <strong>Forum</strong><br />Administra&ccedil;&atilde;o -
Acesso total <br /><br />";

}

/* Não colocarei representações para outros níveis de acesso, mas fica entendido que o
limite de níveis de acesso quem define é você*/

echo "<a href=\"logout.php\">Sair</a>";

?>

 

3.8 - No arquivo acima citamos mais dois arquivos ainda não criados. O primeiro arquivo conterá uma função de verificação: functions.php

<?php
function session_checker(){

if (!isset($_SESSION['usuario_id'])){

header ("Location:formulario_login.html");
exit();

}

}

?>

 

3.9 - O arquivo exemplo que representa a área restrita, foi colocado no final uma opção para sair desta área, por tanto vamos cria-la, assim sempre que o usuário sair utilizando esta opção só poderá acessar a área restrita se efetuar o login novamente. O funcionamento simples: logout.php

<?php
session_start();
if (!isset($_REQUEST['logmeout'])){

echo "Voc&ecirc; realmente deseja sair da &aacute;rea restrita?<br />";
echo "<a href=\"logout.php?logmeout\">Sim</a> | ";
echo "<a href=\"javascript:history.go(-1)\">N&atilde;o</a>";

}else{

session_destroy();

if (!session_is_registered('nome')){

echo "<strong>Voc&ecirc; n&atilde;o est&aacute; mais logado em nosso site!</strong>";
echo "<br /><br /><strong>Login:</strong><br /><br />";
include "formulario_login.html";
}
}
?>

 

3.10 - Disponibilizar uma opção para gerar nova senha, onde seria o melhor lugar para colocar um link para chamar o arquivo que dará início da criação de uma nova senha se não no próprio arquivo ".html" utilizado para efetuar o login.
Então coloque abaixo do formulário de login, adicionando essas linhas logo abaixo no arquivo formulario_login.html bem abaixo do botão Enviar:


<br /><a href="formulario_senha_perdida.html">- N&atilde;o lembra a sua senha?</a>

 

 

3.11 - Resta apenas criar o formulário para requisição de nova senha para os casos de esquecimento ou perda que será chamado pelo link criado acima e também o arquivo que recebe os dados e envia a nova senha para o email cadastrado do usuário: formulario_senha_perdida.html

<!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>Formul&aacute;rio Nova Senha</title>
</head>

<body>

<form name="form1" method="post" action="gerar_nova_senha.php">

Por favor digite o seu email que est&aacute; cadastrado em nosso banco de dados;<br />

<input name="email" type="text" id="email" />
<input name="recupera" type="hidden" id="recupera" value="recupera" />

<input type="submit" name="Submit" value="Gerar Senha" />
</form>

</body>
</html>

 

3.12 - Para completar, o arquivo que recebe os dados do formulário acima, após uma verificação de resultado afirmativo da existência deste email no banco de dados passa a gerar uma nova senha e envia-la para o mesmo email cadastrado, caso o email não exista, informa que o email não existe no cadastro, cria-se o arquivo: gerar_nova_senha.php

<?php

include "config.php";

$recupera = $_POST['recupera'];
$email = $_POST['email'];

switch($recupera){

case "recupera":
recupera_senha($email);
break;

default:
include "formulario_senha_perdida.html";
break;
}

function recupera_senha($email){

if(!isset($email)){

echo "Você esqueceu de preencher seu email.<br />
<strong>Use o mesmo email que utilizou em seu cadastro.</strong><br /><br />";

include "formulario_senha_perdida.html";

exit();

}

// Checando se o email informado está cadastrado

$sql_check = mysql_query("SELECT * FROM usuarios WHERE email='{$email}'");
$sql_check_num = mysql_num_rows($sql_check);

if($sql_check_num == 0){

echo "Este email não está cadastrado em nosso banco de dados.<br /><br />";

include "formulario_senha_perdida.html";

exit();

}

// Se tudo OK vamos gerar uma nova senha e enviar para o email do usuário!

function makeRandomPassword(){

$salt = "abchefghjkmnpqrstuvwxyz0123456789";
srand((double)microtime()*1000000);

$i = 0;

while ($i <= 7){

$num = rand() % 33;
$tmp = substr($salt, $num, 1);
$pass = $pass . $tmp;
$i++;

}

return $pass;

}

$senha_randomica = makeRandomPassword();

$senha = md5($senha_randomica);

$sql = mysql_query("UPDATE usuarios SET senha='{$senha}' WHERE email ='{$email}'");

$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "From: Teu Domínio - Webmaster<teuemail@domíniodoteuemail.com>"; //COLOQUE TEU EMAIL

$subject = "Sua nova senha em teusite.com";
$message = "Olá, redefinimos sua senha.<br /><br />

<strong>Nova Senha</strong>: {$senha_randomica}<br /><br />

<a href='http://www.teusite.com/formulario_login.html'>http://www.teusite.com/formulario_login.html</a><br /><br />

Obrigado!<br /><br />

Webmaster<br /><br /><br />

Esta é uma mensagem automática, por favor não responda!";

mail($email, $subject, $message, $headers);

echo "Sua nova senha foi gerada com sucesso e enviada para o seu email!<br />Por favor verifique seu email!<br /><br />";

include "formulario_login.html";

}

?>

 

4º Envie os arquivos para o servidor.

Upload: Utilize o Gerenciador de Arquivos do Painel de Controle ou algum programa cliente de ftp, com CuteFtp, Ws_Ftp, SmartFtp e outros mais para criar um diretório "cadastro" por exemplo e depois enviar os arquivos php e html criados acima ou copiados do arquivo de download abaixo.

 

5º Modifique o arquivo config.php.

Utilize os dados obtidos na 1º item, ou seja, quando criou-se o Banco de Dados, modifique os dados respectivos para que o Sistema possa ter acesso aos dados.

Originalmente o arquivo config.php é como se segue:

<?php

define('BD_USER', 'USUARIO'); // USE O TEU USUÁRIO DE BANCO DE DADOS
define('BD_PASS', 'SENHA'); // USE A TUA SENHA DO BANCO DE DADOS
define('BD_NAME', 'NOME_BANCO_DE_DADOS'); // USE O NOME DO TEU BANCO DE DADOS

mysql_connect('localhost', BD_USER, BD_PASS);
mysql_select_db(BD_NAME);

?>

Caso tenha utilizado os seguintes dados por exemplo: (Veja o exemplo de criação)

Usuário: umnome = "seusite_umnome"

Senha: ******** (A digitada na criação do usuário.)

Nome do Banco de Dados: cadastro = "seusite_cadastro"

O novo arquivo config.php ficará assim: (lembre-se de substituir os "*" pela sua senha)

<?php

define('BD_USER', 'seusitte_umnome');
define('BD_PASS', '********');
define('BD_NAME', 'seusite_cadastro');

mysql_connect('localhost', BD_USER, BD_PASS);
mysql_select_db(BD_NAME);

?>

Agora envie o arquivo config.php para o servidor novamente.

 

Observação:

Este tutorial apresentado da forma simples, com a intenção é ajudar aos iniciantes em PHP. Ressalttamos que há formas mais requintadas de tratar os dados. Destina-se a quem ainda tenha pouco contato com PHP e gostaria de entrar nesse mundo.

Cadastro DEMO - Veja o cadastro em funcionamento.
Acesso DEMO - Veja o login em funcionamento.

Quer economizar o tempo da digitação, faça o download dos arquivos:
Download dos arquivos deste tutorial

 

Se desejar enviar uma sugestão, opinião ou crítica utilize:

Nosso formulário de contato. ou envie um email.

 

 
© 2009 HOSTMIL - Todos Direitos Reservados para DGN STUDIOS
Design: www.dgn10.com - Versão: 3.2 - Modificada em: 19.10.09