{"id":24986,"date":"2021-05-29T14:18:00","date_gmt":"2021-05-29T11:18:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24986"},"modified":"2021-10-17T20:33:26","modified_gmt":"2021-10-17T17:33:26","slug":"kuinka-luoda-php-kirjautumisjarjestelma-verkkosivustollesi","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fi\/kuinka-luoda-php-kirjautumisjarjestelma-verkkosivustollesi\/","title":{"rendered":"Kuinka luoda PHP-kirjautumisj\u00e4rjestelm\u00e4 verkkosivustollesi"},"content":{"rendered":"<p>Etsitk\u00f6 sis\u00e4\u00e4nkirjautumisj\u00e4rjestelm\u00e4n integrointia PHP: hen? T\u00e4ss\u00e4 artikkelissa n\u00e4yt\u00e4n sinulle, kuinka tehd\u00e4 perus kirjautumisvirta PHP: hen. Luomme kirjautumislomakkeen, vahvistamme kirjautumistiedot ja ohjaamme k\u00e4ytt\u00e4j\u00e4n tilisivulle. Lis\u00e4\u00e4n my\u00f6s koodin kirjautua ulos k\u00e4ytt\u00e4j\u00e4lt\u00e4. Lis\u00e4ksi n\u00e4yt\u00e4mme virheilmoitukset, jos sy\u00f6t\u00e4t v\u00e4\u00e4r\u00e4t kirjautumistiedot.<\/p>\n<p>Opetusohjelman vuoksi oletan, ett\u00e4 k\u00e4yt\u00e4t salasanan tallentamiseen md5-hashia. Kirjoitan koodin, kun otetaan huomioon merkkijonon md5-hash. Saatat k\u00e4ytt\u00e4\u00e4 toista algoritmia. Siin\u00e4 tapauksessa sinun on vaihdettava kysely algoritmin mukaan.<\/p>\n<p>Kirjautumisvirran integroimiseksi tarvitsemme tietokantataulukon, joka tallentaa k\u00e4ytt\u00e4j\u00e4n tiedot. T\u00e4t\u00e4 taulukkoa vastaan \u200b\u200btarkistamme, onko k\u00e4ytt\u00e4j\u00e4 sy\u00f6tt\u00e4nyt oikeat tunnistetiedot vai ei. Jos k\u00e4ytt\u00e4j\u00e4n tunnistetiedot ovat oikein, vain heill\u00e4 on oltava p\u00e4\u00e4sy suojatuille sivuille.<\/p>\n<p>Minun tapauksessani olen luonut k\u00e4ytt\u00e4jien taulukon ja lis\u00e4nnyt joitain nuken merkint\u00f6j\u00e4. Lis\u00e4sin my\u00f6s &quot;status&quot; -sarakkeen, jota k\u00e4ytet\u00e4\u00e4n selvitt\u00e4m\u00e4\u00e4n onko tili aktiivinen vai ei. T\u00e4ss\u00e4 sarakkeessa on ENUM-tietotyyppi arvoilla 0 ja 1.<\/p>\n<ul>\n<li>1: Tili on aktiivinen<\/li>\n<li>0: Tili ei ole aktiivinen<\/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=\"Kuinka luoda PHP-kirjautumisj\u00e4rjestelm\u00e4 verkkosivustollesi\" ><\/a><\/p>\n<h3>Luo kirjautumislomake<\/h3>\n<p>Aloitetaan luomalla kirjautumislomake, jossa k\u00e4ytt\u00e4j\u00e4t voivat sy\u00f6tt\u00e4\u00e4 kirjautumistietonsa. Rakennan kirjautumislomaketta Bootstrap-kehyksen avulla. Minun <code>index.php<\/code>tiedosto sis\u00e4lt\u00e4\u00e4 alla koodin.<\/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>Yll\u00e4 oleva koodi n\u00e4ytt\u00e4\u00e4 kirjautumislomakkeen alla olevan kuvakaappauksen mukaisesti.<\/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=\"Kuinka luoda PHP-kirjautumisj\u00e4rjestelm\u00e4 verkkosivustollesi\" ><\/a><\/p>\n<p>Olen lis\u00e4nnyt muuttujan <code>$error_message<\/code>koodiksi, joka tulostaa kirjautumisvirheet.<\/p>\n<h3>PHP-koodi k\u00e4ytt\u00e4jien tunnistetietojen tarkistamiseksi<\/h3>\n<p>Olet valmis kirjautumislomakkeen ja tietokantataulukon kanssa. Seuraavaksi, kun l\u00e4het\u00e4mme lomakkeen, meid\u00e4n on kirjoitettava PHP-koodi, joka tarkistaa k\u00e4ytt\u00e4j\u00e4n kirjautumistiedot tietokantatietueisiin. Jos tiedot ovat oikein, kirjaudu k\u00e4ytt\u00e4j\u00e4 j\u00e4rjestelm\u00e4\u00e4n ja ohjaa <code>myaccount.php<\/code>sivulle.<\/p>\n<p>Luo <code>config.php<\/code>tiedosto ja lis\u00e4\u00e4 koodi tietokantayhteytt\u00e4 varten.<\/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>Korvaa paikkamerkit todellisilla arvoilla.<\/p>\n<p>Lis\u00e4\u00e4 nyt <code>index.php<\/code>tiedostoon ennen html-tunnisteen alkua alla oleva koodi.<\/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>T\u00e4ss\u00e4 koodissa tarkistaessani salasanaa k\u00e4ytin PHP-menetelm\u00e4\u00e4 md5 olettaen, ett\u00e4 olet tallentanut salasanan t\u00e4ll\u00e4 algoritmilla.<\/p>\n<h3>Uloskirjautumiskoodi<\/h3>\n<p>Seuraava osa on koodin lis\u00e4\u00e4minen k\u00e4ytt\u00e4j\u00e4n kirjautumista varten. T\u00e4t\u00e4 varten luo <code>myaccount.php<\/code>tiedosto. Viel\u00e4 yksi asia, jota tarvitaan vain kirjautuneiden k\u00e4ytt\u00e4jien k\u00e4sittelyyn, tulisi k\u00e4ytt\u00e4\u00e4 t\u00e4t\u00e4 sivua.<\/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>PHP-istunnon avulla selvit\u00e4mme, annetaanko p\u00e4\u00e4sy t\u00e4lle sivulle vai ei. Jos istuntoa ei ole asetettu, ohjaa k\u00e4ytt\u00e4j\u00e4 kirjautumissivulle.<\/p>\n<p>Toivon, ett\u00e4 ymm\u00e4rr\u00e4t sis\u00e4\u00e4nkirjautumisj\u00e4rjestelm\u00e4n rakentamisen perusteet PHP: ss\u00e4. Jaa ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.<\/p>\n<h4>Aiheeseen liittyv\u00e4t artikkelit<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kayttajarekisterointi-ja-kirjautumisjarjestelma-laravelissa\/\" title=\"K\u00e4ytt\u00e4j\u00e4rekister\u00f6inti- ja kirjautumisj\u00e4rjestelm\u00e4 Laravelissa\" >K\u00e4ytt\u00e4j\u00e4rekister\u00f6inti- ja kirjautumisj\u00e4rjestelm\u00e4 Laravelissa<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/google-kirjautuminen-laravelissa-laravel-socialiten-avulla\/\" title=\"Google-kirjautuminen Laravelissa Laravel Socialiten avulla\" >Google-kirjautuminen Laravelissa Laravel Socialiten avulla<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-luoda-php-rekisterointijarjestelma-verkkosivustollesi\/\" title=\"Kuinka luoda PHP-rekister\u00f6intij\u00e4rjestelm\u00e4\" >Kuinka luoda PHP-rekister\u00f6intij\u00e4rjestelm\u00e4<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4ss\u00e4 artikkelissa luon PHP-kirjautumisj\u00e4rjestelm\u00e4n, joka on hy\u00f6dyllinen aloittelijoille. T\u00e4ss\u00e4 kirjoitamme koodin HTML: lle, PHP: lle ja k\u00e4sittelemme kaikki mahdolliset<\/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":[275],"tags":[843],"class_list":["post-24986","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-6","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24986","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/comments?post=24986"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24986\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media\/21659"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media?parent=24986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/categories?post=24986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/tags?post=24986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}