Como criar um sistema de registro PHP para seu site
Você está procurando integrar o sistema de registro do PHP? Neste post, criamos um formulário de inscrição, validamos o e-mail no banco de dados. Após o registro bem-sucedido de um usuário, enviamos um link de ativação para o e-mail do usuário. Assim que o usuário clicar no link de ativação do e-mail, ativaremos sua conta.
Dito isso, vamos criar nosso sistema de registro PHP.
Crie uma tabela de usuários no banco de dados
Para cada sistema de registro, precisamos de uma tabela de banco de dados. Contra os registros dessa tabela, verificamos se o usuário está inserindo um endereço de e-mail exclusivo ou não. Se os dados do usuário forem únicos e corretos, somente ele poderá se registrar em nosso sistema.
Execute a consulta abaixo em seu banco de dados para criar a tabela chamada ‘usuários’.
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`fullname` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`activation_key` varchar(255) NOT NULL,
`status` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)) ENGINE=MyISAM;
Crie um formulário de inscrição
Usamos o Bootstrap Framework para projetar nosso formulário de registro. Crie um arquivo ‘index.php’ e coloque o código abaixo nele.
<!DOCTYPE html>
<html>
<head>
<title>Registration Form</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-6">
<h3>Registration Form</h3>
<?php if(!empty($arr_message['msg'])) { ?>
<div class="alert <?php echo $arr_message['class']; ?>"><?php echo $arr_message['msg']; ?></div>
<?php } ?>
<form method="post">
<div class="form-group">
<label for="exampleInputFullname">Full Name</label>
<input type="text" class="form-control" id="exampleInputFullname" name="fullname" placeholder="Full Name" value="<?php if(isset($fullname)) echo $fullname; ?>" required>
</div>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" name="email" placeholder="Email" value="<?php if(isset($email)) echo $email; ?>" required>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" name="password" placeholder="Password" required>
</div>
<div class="form-group">
<label for="exampleInputPassword2">Confirm Password</label>
<input type="password" class="form-control" id="exampleInputPassword2" name="cpassword" placeholder="Confirm Password" required>
</div>
<button type="submit" name="submit" class="btn btn-default">Submit</button>
</form>
</div>
</div>
</div>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>
</html>
O código acima exibirá o formulário de inscrição quando executarmos o arquivo ‘index.php’. Você observa a variável $ arr_message [‘msg’] no código que irá imprimir o erro de inscrição, se houver. Esta variável é declarada em breve.
Código do lado do servidor para sistema de registro PHP
Nesta fase, estamos prontos com o formulário de inscrição e a tabela do banco de dados. Em seguida, no envio do formulário, temos que escrever o código PHP que verifica se o email já existe no banco de dados. Se houver e-mail, enviaremos a mensagem de erro. Se todos os detalhes estiverem corretos, inserimos os detalhes do usuário no banco de dados e enviamos um link de ativação para o endereço de e-mail fornecido.
Crie um arquivo ‘config.php’ onde armazenamos as credenciais do banco de dados.
<?php
$conn = new mysqli('DB_HOST', 'DB_USER', 'DB_PASSWORD', 'DB_NAME');
if ($conn->connect_errno) {
echo "Error: ". $conn->connect_error;
}
?>
Em nosso ‘index.php’, antes do início da tag html, adicione o código abaixo.
<?php
require_once('config.php');
$arr_message = [];
if (isset($_POST['submit'])) {
$_POST = array_map('trim', $_POST);
extract($_POST);
if (!empty($fullname) && !empty($email) && !empty($password)) {
if ($password == $cpassword) {
$sql = "SELECT id FROM users WHERE email = '".$conn->real_escape_string($email)."'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$arr_message = [
'class' => 'alert-danger',
'msg' => 'Email already exist.',
];
} else {
$email = $conn->real_escape_string($email);
$activation_key = sha1(mt_rand(10000,99999).time().$email);
$sql = "INSERT INTO users(fullname, email, password, activation_key) VALUES('".$conn->real_escape_string($fullname)."', '".$email."', '".md5($conn->real_escape_string($password))."', '".$activation_key."')";
$conn->query($sql);
//send activation link in an email
$subject = 'Activate Your Account';
$message = 'Hello '.ucwords($fullname).',<br>
<p>Click the below link to activate your account.</p>
<a href="YOUR_PROJECT_URL/activate.php?key='.$activation_key.'">Activate Account</a><br><br>
Thanks,<br>Admin';
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';
mail($email, $subject, $message, implode("rn", $headers));
$arr_message = [
'class' => 'alert-success',
'msg' => 'We have sent an activation link to your email. Please activate your account.',
];
$fullname = $email = '';
}
} else {
$arr_message = [
'class' => 'alert-danger',
'msg' => 'Password mismatch.',
];
}
}
}
?>
Aqui, ao armazenar a senha, usamos o método PHP md5, supondo que você tenha armazenado a senha usando este algoritmo.
arquivo activate.php para ativar sua conta
Agora é hora de criar o arquivo ‘activate.php’. Este arquivo controla o código de ativação da conta. Escrevemos um código para ativar a conta do usuário se o URL contiver uma chave de ativação correta.
O arquivo ‘activate.php’ contém o código abaixo.
<?php
require_once('config.php');
if (!isset($_GET['key']) || empty($_GET['key'])) {
header('Location:index.php');
}
$sql = "SELECT id, status FROM users WHERE activation_key = '".$_GET['key']."'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
if ($row['status']) {
$arr_message = [
'class' => 'alert-success',
'msg' => 'Your account is already activated.',
];
} else {
$sql = "UPDATE users SET status = '1' WHERE id = ".$row['id']." AND activation_key = '".$_GET['key']."'";
$conn->query($sql);
$arr_message = [
'class' => 'alert-success',
'msg' => 'Your account is activated. You can <a href="YOUR_PROJECT_URL/login.php">login now</a>.',
];
}
} else {
$arr_message = [
'class' => 'alert-danger',
'msg' => 'Invalid URL.',
];
}
?>
Para exibir a mensagem de sucesso / erro no arquivo ‘activate.php’, adicione o código HTML abaixo nele.
<div class="container">
<div class="row">
<div class="col-md-6">
<?php if(!empty($arr_message['msg'])) { ?>
<div class="alert <?php echo $arr_message['class']; ?>">
<?php echo $arr_message['msg']; ?>
</div>
<?php } ?>
</div>
</div>
</div>
Você também pode querer ler nosso artigo relacionado em Como criar um sistema de login em PHP.