{"id":27962,"date":"2021-05-29T13:35:00","date_gmt":"2021-05-29T10:35:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27962"},"modified":"2021-10-18T04:06:23","modified_gmt":"2021-10-18T01:06:23","slug":"como-criar-um-sistema-de-login-php-para-o-seu-site","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-criar-um-sistema-de-login-php-para-o-seu-site\/","title":{"rendered":"Como criar um sistema de login PHP para o seu site"},"content":{"rendered":"<p>Voc\u00ea est\u00e1 procurando integrar um sistema de login em PHP? Neste artigo, mostro como fazer um fluxo de login b\u00e1sico em PHP. Criaremos um formul\u00e1rio de login, validaremos as credenciais e redirecionaremos o usu\u00e1rio na p\u00e1gina da conta. Eu tamb\u00e9m adicionaria um c\u00f3digo para fazer o logout do usu\u00e1rio. Al\u00e9m disso, exibiremos as mensagens de erro se as credenciais incorretas forem inseridas.<\/p>\n<p>Para o prop\u00f3sito do tutorial, presumo que voc\u00ea esteja usando o hash &#8216;md5&#8217; para armazenar a senha. Gostaria de escrever o c\u00f3digo considerando o hash md5 de uma string. Voc\u00ea pode estar usando outro algoritmo. Nesse caso, voc\u00ea precisa alterar a consulta de acordo com seu algoritmo.<\/p>\n<p>Para integrar o fluxo de login, precisamos de uma tabela de banco de dados que armazene os detalhes do usu\u00e1rio. Nesta tabela, validamos se o usu\u00e1rio inseriu as credenciais corretas ou n\u00e3o. Se as credenciais do usu\u00e1rio estiverem corretas, apenas ele deve ter acesso \u00e0s p\u00e1ginas protegidas.<\/p>\n<p>No meu caso, criei uma tabela de &#8216;usu\u00e1rios&#8217; e adicionei algumas entradas fict\u00edcias. Tamb\u00e9m adicionei uma coluna de &#8216;status&#8217; que ser\u00e1 usada para descobrir se uma conta est\u00e1 ativa ou n\u00e3o. Esta coluna possui tipo de dados ENUM com valores 0 e 1.<\/p>\n<ul>\n<li>1: a conta est\u00e1 ativa<\/li>\n<li>0: a conta n\u00e3o est\u00e1 ativa<\/li>\n<\/ul>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20431-6081f068055fd.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20431-6081f068055fd.png\" alt=\"Como criar um sistema de login PHP para o seu site\" ><\/a><\/p>\n<h3>Crie um formul\u00e1rio de login<\/h3>\n<p>Para come\u00e7ar, vamos criar um formul\u00e1rio de login onde os usu\u00e1rios podem inserir suas credenciais. Estou usando uma estrutura de Bootstrap para construir um formul\u00e1rio de login. Meu <code>index.php<\/code>arquivo cont\u00e9m o c\u00f3digo abaixo.<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;head&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;title&gt;Login Form&lt;\/title&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;link rel=\"stylesheet\" href=\"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.3.1\/css\/bootstrap.min.css\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/head&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;body&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"container\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"row\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-md-6\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h3&gt;Login Form&lt;\/h3&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php if(!empty($error_message)) { ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"alert alert-danger\"&gt;&lt;?php echo $error_message; ?&gt;&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php } ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;form method=\"post\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputEmail1\"&gt;Email address&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"email\" class=\"form-control\" id=\"exampleInputEmail1\" name=\"email\" placeholder=\"Email\" required \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputPassword1\"&gt;Password&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"password\" class=\"form-control\" id=\"exampleInputPassword1\" name=\"password\" placeholder=\"Password\" required \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" name=\"submit\" class=\"btn btn-primary\"&gt;Submit&lt;\/button&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>O c\u00f3digo acima exibir\u00e1 o formul\u00e1rio de login, conforme mostrado na imagem abaixo.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20431-6081f06877449.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20431-6081f06877449.png\" alt=\"Como criar um sistema de login PHP para o seu site\" ><\/a><\/p>\n<p>Eu adicionei a vari\u00e1vel <code>$error_message<\/code>no c\u00f3digo que ir\u00e1 imprimir os erros de login.<\/p>\n<h3>C\u00f3digo PHP para validar as credenciais dos usu\u00e1rios<\/h3>\n<p>Voc\u00ea est\u00e1 pronto com o formul\u00e1rio de login e a tabela do banco de dados. Em seguida, ao enviar um formul\u00e1rio, temos que escrever o c\u00f3digo PHP que verifica as credenciais do usu\u00e1rio contra os registros do banco de dados. Se os detalhes estiverem corretos, fa\u00e7a o login do usu\u00e1rio no sistema e redirecione para a <code>myaccount.php<\/code>p\u00e1gina.<\/p>\n<p>Crie um <code>config.php<\/code>arquivo e adicione um c\u00f3digo para a conex\u00e3o do banco de dados.<\/p>\n<pre><code>&lt;?php\n$conn = new mysqli('DB_HOST', 'DB_USER', 'DB_PASSWORD', 'DB_NAME');\n\u00a0\nif ($conn-&gt;connect_errno) {\n\u00a0\u00a0\u00a0\u00a0echo \"Error: \". $conn-&gt;connect_error;\n}\n?&gt;<\/code><\/pre>\n<p>Substitua os marcadores de posi\u00e7\u00e3o pelos valores reais.<\/p>\n<p>Agora, no <code>index.php<\/code>arquivo antes do in\u00edcio da tag html, adicione o c\u00f3digo abaixo.<\/p>\n<pre><code>&lt;?php\nsession_start();\n\u00a0\u00a0\nrequire_once('config.php');\n\u00a0\u00a0\n\/\/if user is logged in redirect to myaccount page\nif (isset($_SESSION['id'])) {\n\u00a0\u00a0\u00a0\u00a0header('Location: myaccount.php');\n}\n\u00a0\u00a0\n$error_message = '';\nif (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0extract($_POST);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (!empty($email) &amp;&amp; !empty($password)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$sql = \"SELECT id, status FROM users WHERE email = '\".$conn-&gt;real_escape_string($email).\"' AND password = '\".md5($conn-&gt;real_escape_string($password)).\"'\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $conn-&gt;query($sql);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($result-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$row = $result-&gt;fetch_assoc();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($row['status']) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$_SESSION['id'] = $row['id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Location: myaccount.php');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$error_message = 'Your account is not active yet.';\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$error_message = 'Incorrect email or password.';\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$error_message = 'Please enter email and password.';\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;<\/code><\/pre>\n<p>Aqui no c\u00f3digo, ao verificar a senha, usei o m\u00e9todo PHP md5, supondo que voc\u00ea armazenou a senha usando esse algoritmo.<\/p>\n<h3>C\u00f3digo de Logout<\/h3>\n<p>A pr\u00f3xima parte \u00e9 adicionar o c\u00f3digo para fazer o logout do usu\u00e1rio. Para isso, crie o <code>myaccount.php<\/code>arquivo. Mais uma coisa necess\u00e1ria para lidar com a qual apenas usu\u00e1rios logados devem acessar esta p\u00e1gina.<\/p>\n<p><strong>myaccount.php<\/strong><\/p>\n<pre><code>&lt;?php\nsession_start();\n\u00a0\nif (isset($_GET['action']) &amp;&amp; ('logout' == $_GET['action'])) {\n\u00a0\u00a0\u00a0\u00a0unset($_SESSION['id']);\n}\n\u00a0\nif (isset($_SESSION['id'])) {\n\u00a0\u00a0\u00a0\u00a0?&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;h3&gt;Welcome User! &lt;a href=\"?action=logout\"&gt;Logout&lt;\/a&gt;&lt;\/h3&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;?php\n} else { \/\/redirect to login page\n\u00a0\u00a0\u00a0\u00a0header('Location: index.php');\n}\n?&gt;<\/code><\/pre>\n<p>Usando a sess\u00e3o de PHP, estamos decidindo se dar acesso a esta p\u00e1gina ou n\u00e3o. Se a sess\u00e3o n\u00e3o estiver configurada, redirecione o usu\u00e1rio para a p\u00e1gina de login.<\/p>\n<p>Espero que voc\u00ea entenda os fundamentos da constru\u00e7\u00e3o de um sistema de login em PHP. Por favor, compartilhe seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/sistema-de-registro-de-usuario-e-login-no-laravel\/\" title=\"Sistema de Registro de Usu\u00e1rio e Login no Laravel\" >Sistema de Registro de Usu\u00e1rio e Login no Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/login-do-google-no-laravel-usando-laravel-socialite\/\" title=\"Login do Google no Laravel usando Laravel Socialite\" >Login do Google no Laravel usando Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-criar-um-sistema-de-registro-php-para-seu-site\/\" title=\"Como criar um sistema de registro PHP\" >Como criar um sistema de registro PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste artigo, eu crio um sistema de login PHP que \u00e9 \u00fatil para iniciantes. Aqui n\u00f3s escrevemos um c\u00f3digo para HTML, PHP e tratamos de todos os poss\u00edveis<\/p>\n","protected":false},"author":1,"featured_media":21659,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[278],"tags":[848],"class_list":["post-27962","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27962","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=27962"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27962\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21659"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=27962"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=27962"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=27962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}