{"id":28627,"date":"2021-05-29T14:23:00","date_gmt":"2021-05-29T11:23:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28627"},"modified":"2021-10-18T03:39:02","modified_gmt":"2021-10-18T00:39:02","slug":"jak-stworzyc-system-logowania-php-dla-swojej-witryny","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-stworzyc-system-logowania-php-dla-swojej-witryny\/","title":{"rendered":"Jak stworzy\u0107 system logowania PHP dla swojej witryny?"},"content":{"rendered":"<p>Czy chcesz zintegrowa\u0107 system logowania w PHP? W tym artykule poka\u017c\u0119, jak wykona\u0107 podstawowy proces logowania do PHP. Stworzymy formularz logowania, zweryfikujemy po\u015bwiadczenia i przekierujemy u\u017cytkownika na stron\u0119 konta. Doda\u0142bym r\u00f3wnie\u017c kod do wylogowania u\u017cytkownika. Dodatkowo wy\u015bwietlimy komunikaty o b\u0142\u0119dach, je\u015bli zostan\u0105 wprowadzone nieprawid\u0142owe dane uwierzytelniaj\u0105ce.<\/p>\n<p>Na potrzeby samouczka zak\u0142adam, \u017ce do przechowywania has\u0142a u\u017cywasz skr\u00f3tu \u201emd5&quot;. Napisa\u0142bym kod, bior\u0105c pod uwag\u0119 skr\u00f3t md5 ci\u0105gu. By\u0107 mo\u017ce u\u017cywasz innego algorytmu. W takim przypadku musisz zmieni\u0107 zapytanie zgodnie z algorytmem.<\/p>\n<p>Aby zintegrowa\u0107 przep\u0142yw logowania, potrzebujemy tabeli bazy danych, kt\u00f3ra przechowuje dane u\u017cytkownika. Na podstawie tej tabeli sprawdzamy, czy u\u017cytkownik wprowadzi\u0142 prawid\u0142owe dane uwierzytelniaj\u0105ce, czy nie. Je\u015bli po\u015bwiadczenia u\u017cytkownika s\u0105 poprawne, tylko oni powinni mie\u0107 dost\u0119p do zabezpieczonych stron.<\/p>\n<p>W moim przypadku stworzy\u0142em tabel\u0119 \u201eusers&#8221; i doda\u0142em kilka fikcyjnych wpis\u00f3w. Doda\u0142em r\u00f3wnie\u017c kolumn\u0119 \u201estatus&#8221;, kt\u00f3ra pos\u0142u\u017cy do sprawdzenia, czy konto jest aktywne, czy nie. Ta kolumna ma typ danych ENUM z warto\u015bciami 0 i 1.<\/p>\n<ul>\n<li>1: Konto jest aktywne<\/li>\n<li>0: Konto nie jest aktywne<\/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=\"Jak stworzy\u0107 system logowania PHP dla swojej witryny?\" ><\/a><\/p>\n<h3>Utw\u00f3rz formularz logowania<\/h3>\n<p>Na pocz\u0105tek utw\u00f3rzmy formularz logowania, w kt\u00f3rym u\u017cytkownicy mog\u0105 wprowadza\u0107 swoje po\u015bwiadczenia. Aby zbudowa\u0107 formularz logowania u\u017cywam frameworka Bootstrap. M\u00f3j <code>index.php<\/code>plik zawiera poni\u017cszy kod.<\/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>Powy\u017cszy kod wy\u015bwietli formularz logowania, jak pokazano na poni\u017cszym zrzucie ekranu.<\/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=\"Jak stworzy\u0107 system logowania PHP dla swojej witryny?\" ><\/a><\/p>\n<p>Doda\u0142em zmienn\u0105 <code>$error_message<\/code>w kodzie, kt\u00f3ra wy\u015bwietli b\u0142\u0119dy logowania.<\/p>\n<h3>Kod PHP do weryfikacji po\u015bwiadcze\u0144 u\u017cytkownik\u00f3w<\/h3>\n<p>Jeste\u015b gotowy z formularzem logowania i tabel\u0105 bazy danych. Nast\u0119pnie, przesy\u0142aj\u0105c formularz, musimy napisa\u0107 kod PHP, kt\u00f3ry por\u00f3wnuje dane uwierzytelniaj\u0105ce u\u017cytkownika z rekordami bazy danych. Je\u015bli dane s\u0105 poprawne, zaloguj si\u0119 do systemu i przekieruj na <code>myaccount.php<\/code>stron\u0119.<\/p>\n<p>Utw\u00f3rz <code>config.php<\/code>plik i dodaj kod po\u0142\u0105czenia z baz\u0105 danych.<\/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>Zast\u0105p symbole zast\u0119pcze rzeczywistymi warto\u015bciami.<\/p>\n<p>Teraz w <code>index.php<\/code>pliku przed rozpocz\u0119ciem tagu html dodaj poni\u017cszy kod.<\/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>Tutaj w kodzie, sprawdzaj\u0105c has\u0142o, u\u017cy\u0142em metody PHP md5 zak\u0142adaj\u0105c, \u017ce zapisa\u0142e\u015b has\u0142o za pomoc\u0105 tego algorytmu.<\/p>\n<h3>Kod wylogowania<\/h3>\n<p>Kolejna cz\u0119\u015b\u0107 to dodanie kodu do wylogowania u\u017cytkownika. W tym celu utw\u00f3rz <code>myaccount.php<\/code>plik. Jeszcze jedna rzecz potrzebna do obs\u0142ugi, kt\u00f3ra tylko zalogowani u\u017cytkownicy powinni uzyska\u0107 dost\u0119p do tej strony.<\/p>\n<p><strong>mojekonto.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>Korzystaj\u0105c z sesji PHP zastanawiamy si\u0119, czy da\u0107 dost\u0119p do tej strony, czy nie. Je\u015bli sesja nie jest ustawiona, przekieruj u\u017cytkownika na stron\u0119 logowania.<\/p>\n<p>Mam nadziej\u0119, \u017ce rozumiesz podstawy budowania systemu logowania w PHP. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/system-rejestracji-i-logowania-uzytkownika-w-laravel\/\" title=\"System rejestracji i logowania u\u017cytkownika w Laravel\" >System rejestracji i logowania u\u017cytkownika w Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/zaloguj-sie-przez-google-w-laravel-za-pomoca-laravel-socialite\/\" title=\"Zaloguj si\u0119 przez Google w Laravel za pomoc\u0105 Laravel Socialite\" >Zaloguj si\u0119 przez Google w Laravel za pomoc\u0105 Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-stworzyc-system-rejestracji-php-dla-swojej-witryny\/\" title=\"Jak stworzy\u0107 system rejestracji PHP\" >Jak stworzy\u0107 system rejestracji PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym artykule tworz\u0119 system logowania PHP, kt\u00f3ry jest przydatny dla pocz\u0105tkuj\u0105cych. Tutaj piszemy kod dla HTML, PHP i obs\u0142ugujemy wszystkie mo\u017cliwe<\/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":[277],"tags":[847],"class_list":["post-28627","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28627","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28627"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28627\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21659"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}