{"id":552,"date":"2019-09-20T14:17:17","date_gmt":"2019-09-20T14:17:17","guid":{"rendered":"https:\/\/www.webhozz.com\/code\/?p=552"},"modified":"2019-09-20T14:17:21","modified_gmt":"2019-09-20T14:17:21","slug":"php-mysql-login-system","status":"publish","type":"post","link":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/","title":{"rendered":"PHP MySQL : Login System"},"content":{"rendered":"\n<h5 class=\"wp-block-heading\">Menerapkan Mekanisme Otentikasi Pengguna<\/h5>\n\n\n\n<p>Otentikasi pengguna sangat umum dalam aplikasi web modern.\nIni adalah mekanisme keamanan yang digunakan untuk membatasi akses tidak sah (restrict unauthorized) khusus\nuntuk member saja pada suatu situs tersebut.<\/p>\n\n\n\n<p>Pada tutorial ini kita akan membuat sistem registrasi dan login sederhana menggunakan PHP dan MySQL. Tutorial ini terdiri dari dua bagian: di bagian pertama kita akan membuat form pendaftaran pengguna, dan di bagian kedua kita akan membuat form login, serta halaman pembuka dan skrip logout.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Membangun Sistem Registrasi<\/h5>\n\n\n\n<p>Di bagian ini kita akan membangun sistem pendaftaran yang memungkinkan pengguna untuk membuat akun baru dengan mengisi form web. Tapi, pertama kita perlu membuat tabel yang akan menampung semua data pengguna.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Langkah 1 : Membuat Tabel Database<\/h5>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nCREATE TABLE users (\n    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\n    username VARCHAR(50) NOT NULL UNIQUE,\n    password VARCHAR(255) NOT NULL,\n    created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n<\/pre><\/div>\n\n\n<p>Silakan periksa tutorial tentang pernyataan <strong><em>SQL CREATE TABLE<\/em><\/strong> untuk informasi terperinci tentang sintaks untuk membuat tabel dalam sistem database MySQL.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Langkah 2 : Membuat Config File<\/h5>\n\n\n\n<p>Setelah membuat tabel, kita perlu membuat skrip PHP untuk dapat terhubung ke server database MySQL. Mari kita membuat file bernama &#8220;<strong><em>config.php<\/em><\/strong>&#8221; dan memasukkan kode berikut di dalamnya.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;?php\n\/* Database credentials. Assuming you are running MySQL\nserver with default setting (user 'root' with no password) *\/\ndefine('DB_SERVER', 'localhost');\ndefine('DB_USERNAME', 'root');\ndefine('DB_PASSWORD', '');\ndefine('DB_NAME', 'demo');\n \n\/* Attempt to connect to MySQL database *\/\n$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);\n \n\/\/ Check connection\nif($link === false){\n    die(&quot;ERROR: Could not connect. &quot; . mysqli_connect_error());\n}\n?&gt;\n<\/pre><\/div>\n\n\n<p>Jika kalian telah mengunduh contoh kode berorientasi objek atau PDO menggunakan tombol unduh, harap hapus teks &#8220;<strong><em>-oo-format<\/em><\/strong>&#8221; atau &#8220;<strong><em>-pdo-format<\/em><\/strong>&#8221; dari nama file sebelum menguji kode tersebut.<\/p>\n\n\n\n<p><strong><em>Catatan: <\/em><\/strong>Ganti kredensial sesuai dengan pengaturan server MySQL kalian sebelum menguji kode ini, misalnya, ganti nama basis data &#8216;<em>demo<\/em>&#8216; dengan nama basis data kalian sendiri, ganti nama pengguna &#8216;<em>root<\/em>&#8216; dengan nama pengguna basis data kalian sendiri, tentukan kata sandi basis data jika ada.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Langkah 3 : Membuat Form Registrasi<\/h5>\n\n\n\n<p>Mari kita buat file PHP lain &#8220;<strong><em>register.php<\/em><\/strong>&#8221; dan\nmasukkan kode contoh berikut di dalamnya. Kode contoh ini akan membuat form web\nyang memungkinkan pengguna untuk mendaftar sendiri.<\/p>\n\n\n\n<p>Skrip ini juga akan menghasilkan error jika pengguna mencoba mengirimkan form tanpa memasukkan nilai apa pun, atau jika nama pengguna yang dimasukkan oleh pengguna sudah digunakan oleh pengguna lain.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;?php\n\/\/ Include config file\nrequire_once &quot;config.php&quot;;\n \n\/\/ Define variables and initialize with empty values\n$username = $password = $confirm_password = &quot;&quot;;\n$username_err = $password_err = $confirm_password_err = &quot;&quot;;\n \n\/\/ Processing form data when form is submitted\nif($_SERVER&#x5B;&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;){\n \n    \/\/ Validate username\n    if(empty(trim($_POST&#x5B;&quot;username&quot;]))){\n        $username_err = &quot;Please enter a username.&quot;;\n    } else{\n        \/\/ Prepare a select statement\n        $sql = &quot;SELECT id FROM users WHERE username = ?&quot;;\n        \n        if($stmt = mysqli_prepare($link, $sql)){\n            \/\/ Bind variables to the prepared statement as parameters\n            mysqli_stmt_bind_param($stmt, &quot;s&quot;, $param_username);\n            \n            \/\/ Set parameters\n            $param_username = trim($_POST&#x5B;&quot;username&quot;]);\n            \n            \/\/ Attempt to execute the prepared statement\n            if(mysqli_stmt_execute($stmt)){\n                \/* store result *\/\n                mysqli_stmt_store_result($stmt);\n                \n                if(mysqli_stmt_num_rows($stmt) == 1){\n                    $username_err = &quot;This username is already taken.&quot;;\n                } else{\n                    $username = trim($_POST&#x5B;&quot;username&quot;]);\n                }\n            } else{\n                echo &quot;Oops! Something went wrong. Please try again later.&quot;;\n            }\n        }\n         \n        \/\/ Close statement\n        mysqli_stmt_close($stmt);\n    }\n    \n    \/\/ Validate password\n    if(empty(trim($_POST&#x5B;&quot;password&quot;]))){\n        $password_err = &quot;Please enter a password.&quot;;     \n    } elseif(strlen(trim($_POST&#x5B;&quot;password&quot;])) &lt; 6){\n        $password_err = &quot;Password must have atleast 6 characters.&quot;;\n    } else{\n        $password = trim($_POST&#x5B;&quot;password&quot;]);\n    }\n    \n    \/\/ Validate confirm password\n    if(empty(trim($_POST&#x5B;&quot;confirm_password&quot;]))){\n        $confirm_password_err = &quot;Please confirm password.&quot;;     \n    } else{\n        $confirm_password = trim($_POST&#x5B;&quot;confirm_password&quot;]);\n        if(empty($password_err) &amp;&amp; ($password != $confirm_password)){\n            $confirm_password_err = &quot;Password did not match.&quot;;\n        }\n    }\n    \n    \/\/ Check input errors before inserting in database\n    if(empty($username_err) &amp;&amp; empty($password_err) &amp;&amp; empty($confirm_password_err)){\n        \n        \/\/ Prepare an insert statement\n        $sql = &quot;INSERT INTO users (username, password) VALUES (?, ?)&quot;;\n         \n        if($stmt = mysqli_prepare($link, $sql)){\n            \/\/ Bind variables to the prepared statement as parameters\n            mysqli_stmt_bind_param($stmt, &quot;ss&quot;, $param_username, $param_password);\n            \n            \/\/ Set parameters\n            $param_username = $username;\n            $param_password = password_hash($password, PASSWORD_DEFAULT); \/\/ Creates a password hash\n            \n            \/\/ Attempt to execute the prepared statement\n            if(mysqli_stmt_execute($stmt)){\n                \/\/ Redirect to login page\n                header(&quot;location: login.php&quot;);\n            } else{\n                echo &quot;Something went wrong. Please try again later.&quot;;\n            }\n        }\n         \n        \/\/ Close statement\n        mysqli_stmt_close($stmt);\n    }\n    \n    \/\/ Close connection\n    mysqli_close($link);\n}\n?&gt;\n \n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;title&gt;Sign Up&lt;\/title&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.css&quot;&gt;\n    &lt;style type=&quot;text\/css&quot;&gt;\n        body{ font: 14px sans-serif; }\n        .wrapper{ width: 350px; padding: 20px; }\n    &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;div class=&quot;wrapper&quot;&gt;\n        &lt;h2&gt;Sign Up&lt;\/h2&gt;\n        &lt;p&gt;Please fill this form to create an account.&lt;\/p&gt;\n        &lt;form action=&quot;&lt;?php echo htmlspecialchars($_SERVER&#x5B;&quot;PHP_SELF&quot;]); ?&gt;&quot; method=&quot;post&quot;&gt;\n            &lt;div class=&quot;form-group &lt;?php echo (!empty($username_err)) ? 'has-error' : ''; ?&gt;&quot;&gt;\n                &lt;label&gt;Username&lt;\/label&gt;\n                &lt;input type=&quot;text&quot; name=&quot;username&quot; class=&quot;form-control&quot; value=&quot;&lt;?php echo $username; ?&gt;&quot;&gt;\n                &lt;span class=&quot;help-block&quot;&gt;&lt;?php echo $username_err; ?&gt;&lt;\/span&gt;\n            &lt;\/div&gt;    \n            &lt;div class=&quot;form-group &lt;?php echo (!empty($password_err)) ? 'has-error' : ''; ?&gt;&quot;&gt;\n                &lt;label&gt;Password&lt;\/label&gt;\n                &lt;input type=&quot;password&quot; name=&quot;password&quot; class=&quot;form-control&quot; value=&quot;&lt;?php echo $password; ?&gt;&quot;&gt;\n                &lt;span class=&quot;help-block&quot;&gt;&lt;?php echo $password_err; ?&gt;&lt;\/span&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;form-group &lt;?php echo (!empty($confirm_password_err)) ? 'has-error' : ''; ?&gt;&quot;&gt;\n                &lt;label&gt;Confirm Password&lt;\/label&gt;\n                &lt;input type=&quot;password&quot; name=&quot;confirm_password&quot; class=&quot;form-control&quot; value=&quot;&lt;?php echo $confirm_password; ?&gt;&quot;&gt;\n                &lt;span class=&quot;help-block&quot;&gt;&lt;?php echo $confirm_password_err; ?&gt;&lt;\/span&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;form-group&quot;&gt;\n                &lt;input type=&quot;submit&quot; class=&quot;btn btn-primary&quot; value=&quot;Submit&quot;&gt;\n                &lt;input type=&quot;reset&quot; class=&quot;btn btn-default&quot; value=&quot;Reset&quot;&gt;\n            &lt;\/div&gt;\n            &lt;p&gt;Already have an account? &lt;a href=&quot;login.php&quot;&gt;Login here&lt;\/a&gt;.&lt;\/p&gt;\n        &lt;\/form&gt;\n    &lt;\/div&gt;    \n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/pre><\/div>\n\n\n<p>Output dari contoh di atas (mis. Form pendaftaran) akan terlihat seperti ini:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.tutorialrepublic.com\/lib\/images\/php-signup-form.png\" alt=\"PHP Signup Form\"\/><\/figure>\n\n\n\n<p>Pada contoh di atas, kita telah menggunakan fungsi PHP <strong><em>password_hash()<\/em><\/strong> untuk membuat hash kata sandi dari string kata sandi yang dimasukkan oleh pengguna (baris no-75). Fungsi ini menciptakan hash kata sandi menggunakan algoritma hashing satu arah yang kuat. Hal itu juga menghasilkan dan menerapkan kode acak secara otomatis ketika hashing kata sandi; ini berarti bahwa meskipun dua pengguna memiliki kata sandi yang sama, hash kata sandi mereka akan berbeda.<\/p>\n\n\n\n<p>Pada saat login, kita akan memverifikasi kata sandi yang\ndiberikan dengan hash kata sandi yang disimpan dalam database menggunakan\nfungsi PHP <strong><em>password_verify()<\/em><\/strong>, seperti yang ditunjukkan pada contoh\nberikut.<\/p>\n\n\n\n<p>Kita telah menggunakan framework Bootstrap untuk membuat form layout dengan cepat dan indah. Silakan, cek bagian tutorial Bootstrap untuk mempelajari lebih lanjut tentang framework ini.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Membangun System Login<\/h5>\n\n\n\n<p>Di bagian ini kita akan membuat form login di mana pengguna dapat memasukkan nama pengguna dan kata sandi mereka. Ketika pengguna mengirimkan form input maka hal tersebut akan diverifikasi dengan yang disimpan dalam database, jika nama pengguna dan kata sandi cocok, pengguna diotorisasi dan diberikan akses ke situs, jika tidak maka upaya login akan ditolak.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Langkah 1 : Membuat Login Form<\/h5>\n\n\n\n<p>Mari kita buat file bernama &#8220;<strong><em>login.php<\/em><\/strong>&#8221; dan letakkan kode berikut di dalamnya.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;?php\n\/\/ Initialize the session\nsession_start();\n \n\/\/ Check if the user is already logged in, if yes then redirect him to welcome page\nif(isset($_SESSION&#x5B;&quot;loggedin&quot;]) &amp;&amp; $_SESSION&#x5B;&quot;loggedin&quot;] === true){\n    header(&quot;location: welcome.php&quot;);\n    exit;\n}\n \n\/\/ Include config file\nrequire_once &quot;config.php&quot;;\n \n\/\/ Define variables and initialize with empty values\n$username = $password = &quot;&quot;;\n$username_err = $password_err = &quot;&quot;;\n \n\/\/ Processing form data when form is submitted\nif($_SERVER&#x5B;&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;){\n \n    \/\/ Check if username is empty\n    if(empty(trim($_POST&#x5B;&quot;username&quot;]))){\n        $username_err = &quot;Please enter username.&quot;;\n    } else{\n        $username = trim($_POST&#x5B;&quot;username&quot;]);\n    }\n    \n    \/\/ Check if password is empty\n    if(empty(trim($_POST&#x5B;&quot;password&quot;]))){\n        $password_err = &quot;Please enter your password.&quot;;\n    } else{\n        $password = trim($_POST&#x5B;&quot;password&quot;]);\n    }\n    \n    \/\/ Validate credentials\n    if(empty($username_err) &amp;&amp; empty($password_err)){\n        \/\/ Prepare a select statement\n        $sql = &quot;SELECT id, username, password FROM users WHERE username = ?&quot;;\n        \n        if($stmt = mysqli_prepare($link, $sql)){\n            \/\/ Bind variables to the prepared statement as parameters\n            mysqli_stmt_bind_param($stmt, &quot;s&quot;, $param_username);\n            \n            \/\/ Set parameters\n            $param_username = $username;\n            \n            \/\/ Attempt to execute the prepared statement\n            if(mysqli_stmt_execute($stmt)){\n                \/\/ Store result\n                mysqli_stmt_store_result($stmt);\n                \n                \/\/ Check if username exists, if yes then verify password\n                if(mysqli_stmt_num_rows($stmt) == 1){                    \n                    \/\/ Bind result variables\n                    mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);\n                    if(mysqli_stmt_fetch($stmt)){\n                        if(password_verify($password, $hashed_password)){\n                            \/\/ Password is correct, so start a new session\n                            session_start();\n                            \n                            \/\/ Store data in session variables\n                            $_SESSION&#x5B;&quot;loggedin&quot;] = true;\n                            $_SESSION&#x5B;&quot;id&quot;] = $id;\n                            $_SESSION&#x5B;&quot;username&quot;] = $username;                            \n                            \n                            \/\/ Redirect user to welcome page\n                            header(&quot;location: welcome.php&quot;);\n                        } else{\n                            \/\/ Display an error message if password is not valid\n                            $password_err = &quot;The password you entered was not valid.&quot;;\n                        }\n                    }\n                } else{\n                    \/\/ Display an error message if username doesn't exist\n                    $username_err = &quot;No account found with that username.&quot;;\n                }\n            } else{\n                echo &quot;Oops! Something went wrong. Please try again later.&quot;;\n            }\n        }\n        \n        \/\/ Close statement\n        mysqli_stmt_close($stmt);\n    }\n    \n    \/\/ Close connection\n    mysqli_close($link);\n}\n?&gt;\n \n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;title&gt;Login&lt;\/title&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.css&quot;&gt;\n    &lt;style type=&quot;text\/css&quot;&gt;\n        body{ font: 14px sans-serif; }\n        .wrapper{ width: 350px; padding: 20px; }\n    &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;div class=&quot;wrapper&quot;&gt;\n        &lt;h2&gt;Login&lt;\/h2&gt;\n        &lt;p&gt;Please fill in your credentials to login.&lt;\/p&gt;\n        &lt;form action=&quot;&lt;?php echo htmlspecialchars($_SERVER&#x5B;&quot;PHP_SELF&quot;]); ?&gt;&quot; method=&quot;post&quot;&gt;\n            &lt;div class=&quot;form-group &lt;?php echo (!empty($username_err)) ? 'has-error' : ''; ?&gt;&quot;&gt;\n                &lt;label&gt;Username&lt;\/label&gt;\n                &lt;input type=&quot;text&quot; name=&quot;username&quot; class=&quot;form-control&quot; value=&quot;&lt;?php echo $username; ?&gt;&quot;&gt;\n                &lt;span class=&quot;help-block&quot;&gt;&lt;?php echo $username_err; ?&gt;&lt;\/span&gt;\n            &lt;\/div&gt;    \n            &lt;div class=&quot;form-group &lt;?php echo (!empty($password_err)) ? 'has-error' : ''; ?&gt;&quot;&gt;\n                &lt;label&gt;Password&lt;\/label&gt;\n                &lt;input type=&quot;password&quot; name=&quot;password&quot; class=&quot;form-control&quot;&gt;\n                &lt;span class=&quot;help-block&quot;&gt;&lt;?php echo $password_err; ?&gt;&lt;\/span&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;form-group&quot;&gt;\n                &lt;input type=&quot;submit&quot; class=&quot;btn btn-primary&quot; value=&quot;Login&quot;&gt;\n            &lt;\/div&gt;\n            &lt;p&gt;Don't have an account? &lt;a href=&quot;register.php&quot;&gt;Sign up now&lt;\/a&gt;.&lt;\/p&gt;\n        &lt;\/form&gt;\n    &lt;\/div&gt;    \n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/pre><\/div>\n\n\n<p> Output dari contoh di atas (mis. Form login) akan terlihat seperti ini:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.tutorialrepublic.com\/lib\/images\/php-login-form.png\" alt=\"PHP Login Form\"\/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">Langkah 2 : Membuat Welcome Page<\/h5>\n\n\n\n<p>Berikut kode file &#8220;<strong><em>welcome.php<\/em><\/strong>&#8221; kita, tempat pengguna diarahkan setelah login berhasil.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;?php\n\/\/ Initialize the session\nsession_start();\n \n\/\/ Check if the user is logged in, if not then redirect him to login page\nif(!isset($_SESSION&#x5B;&quot;loggedin&quot;]) || $_SESSION&#x5B;&quot;loggedin&quot;] !== true){\n    header(&quot;location: login.php&quot;);\n    exit;\n}\n?&gt;\n \n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;title&gt;Welcome&lt;\/title&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.css&quot;&gt;\n    &lt;style type=&quot;text\/css&quot;&gt;\n        body{ font: 14px sans-serif; text-align: center; }\n    &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;div class=&quot;page-header&quot;&gt;\n        &lt;h1&gt;Hi, &lt;b&gt;&lt;?php echo htmlspecialchars($_SESSION&#x5B;&quot;username&quot;]); ?&gt;&lt;\/b&gt;. Welcome to our site.&lt;\/h1&gt;\n    &lt;\/div&gt;\n    &lt;p&gt;\n        &lt;a href=&quot;reset-password.php&quot; class=&quot;btn btn-warning&quot;&gt;Reset Your Password&lt;\/a&gt;\n        &lt;a href=&quot;logout.php&quot; class=&quot;btn btn-danger&quot;&gt;Sign Out of Your Account&lt;\/a&gt;\n    &lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/pre><\/div>\n\n\n<p>Jika data berasal dari sumber eksternal seperti form yang diisi oleh pengguna anonim, ada risiko bahwa itu mungkin berisi skrip berbahaya yang bermaksud untuk meluncurkan serangan skrip <em>cross-site<\/em> (XSS). Oleh karena itu, kalian harus menghindari data ini menggunakan fungsi PHP <strong><em>htmlspecialchars()<\/em><\/strong> sebelum menampilkannya di browser, sehingga tag HTML apa pun yang ada di dalamnya menjadi tidak berbahaya.<\/p>\n\n\n\n<p>Misalnya, setelah mengeluarkan dari karakter khusus string <em><strong>&lt;script&gt;alert(&#8220;XSS&#8221;)&lt;\/script&gt;<\/strong><\/em> menjadi  <strong><em>&lt;script&gt;alert(&#8220;XSS&#8221;)&lt;\/script&gt;<\/em><\/strong> yang dimana tidak akan dijalankan oleh browser.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Langkah 3 : Membuat Logout Script<\/h5>\n\n\n\n<p>Sekarang, mari kita buat file &#8220;<strong><em>logout.php<\/em><\/strong>&#8220;. Ketika pengguna mengklik pada <em>log out<\/em> atau <em>sign out<\/em>, skrip di dalam file ini akan menghancurkan (mengeluarkan) sesi dan mengarahkan pengguna kembali ke halaman login.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;?php\n\/\/ Initialize the session\nsession_start();\n \n\/\/ Unset all of the session variables\n$_SESSION = array();\n \n\/\/ Destroy the session.\nsession_destroy();\n \n\/\/ Redirect to login page\nheader(&quot;location: login.php&quot;);\nexit;\n?&gt;\n<\/pre><\/div>\n\n\n<h5 class=\"wp-block-heading\">Menambahkan Fitur Reset Kata Sandi<\/h5>\n\n\n\n<p>Terakhir, di bagian ini kita akan menambahkan utilitas pengaturan ulang kata sandi ke sistem login kita. Dengan menggunakan fitur ini, pengguna yang masuk dapat langsung mengatur ulang kata sandi mereka sendiri untuk akun mereka.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;?php\n\/\/ Initialize the session\nsession_start();\n \n\/\/ Check if the user is logged in, if not then redirect to login page\nif(!isset($_SESSION&#x5B;&quot;loggedin&quot;]) || $_SESSION&#x5B;&quot;loggedin&quot;] !== true){\n    header(&quot;location: login.php&quot;);\n    exit;\n}\n \n\/\/ Include config file\nrequire_once &quot;config.php&quot;;\n \n\/\/ Define variables and initialize with empty values\n$new_password = $confirm_password = &quot;&quot;;\n$new_password_err = $confirm_password_err = &quot;&quot;;\n \n\/\/ Processing form data when form is submitted\nif($_SERVER&#x5B;&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;){\n \n    \/\/ Validate new password\n    if(empty(trim($_POST&#x5B;&quot;new_password&quot;]))){\n        $new_password_err = &quot;Please enter the new password.&quot;;     \n    } elseif(strlen(trim($_POST&#x5B;&quot;new_password&quot;])) &lt; 6){\n        $new_password_err = &quot;Password must have atleast 6 characters.&quot;;\n    } else{\n        $new_password = trim($_POST&#x5B;&quot;new_password&quot;]);\n    }\n    \n    \/\/ Validate confirm password\n    if(empty(trim($_POST&#x5B;&quot;confirm_password&quot;]))){\n        $confirm_password_err = &quot;Please confirm the password.&quot;;\n    } else{\n        $confirm_password = trim($_POST&#x5B;&quot;confirm_password&quot;]);\n        if(empty($new_password_err) &amp;&amp; ($new_password != $confirm_password)){\n            $confirm_password_err = &quot;Password did not match.&quot;;\n        }\n    }\n        \n    \/\/ Check input errors before updating the database\n    if(empty($new_password_err) &amp;&amp; empty($confirm_password_err)){\n        \/\/ Prepare an update statement\n        $sql = &quot;UPDATE users SET password = ? WHERE id = ?&quot;;\n        \n        if($stmt = mysqli_prepare($link, $sql)){\n            \/\/ Bind variables to the prepared statement as parameters\n            mysqli_stmt_bind_param($stmt, &quot;si&quot;, $param_password, $param_id);\n            \n            \/\/ Set parameters\n            $param_password = password_hash($new_password, PASSWORD_DEFAULT);\n            $param_id = $_SESSION&#x5B;&quot;id&quot;];\n            \n            \/\/ Attempt to execute the prepared statement\n            if(mysqli_stmt_execute($stmt)){\n                \/\/ Password updated successfully. Destroy the session, and redirect to login page\n                session_destroy();\n                header(&quot;location: login.php&quot;);\n                exit();\n            } else{\n                echo &quot;Oops! Something went wrong. Please try again later.&quot;;\n            }\n        }\n        \n        \/\/ Close statement\n        mysqli_stmt_close($stmt);\n    }\n    \n    \/\/ Close connection\n    mysqli_close($link);\n}\n?&gt;\n \n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;title&gt;Reset Password&lt;\/title&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.css&quot;&gt;\n    &lt;style type=&quot;text\/css&quot;&gt;\n        body{ font: 14px sans-serif; }\n        .wrapper{ width: 350px; padding: 20px; }\n    &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;div class=&quot;wrapper&quot;&gt;\n        &lt;h2&gt;Reset Password&lt;\/h2&gt;\n        &lt;p&gt;Please fill out this form to reset your password.&lt;\/p&gt;\n        &lt;form action=&quot;&lt;?php echo htmlspecialchars($_SERVER&#x5B;&quot;PHP_SELF&quot;]); ?&gt;&quot; method=&quot;post&quot;&gt; \n            &lt;div class=&quot;form-group &lt;?php echo (!empty($new_password_err)) ? 'has-error' : ''; ?&gt;&quot;&gt;\n                &lt;label&gt;New Password&lt;\/label&gt;\n                &lt;input type=&quot;password&quot; name=&quot;new_password&quot; class=&quot;form-control&quot; value=&quot;&lt;?php echo $new_password; ?&gt;&quot;&gt;\n                &lt;span class=&quot;help-block&quot;&gt;&lt;?php echo $new_password_err; ?&gt;&lt;\/span&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;form-group &lt;?php echo (!empty($confirm_password_err)) ? 'has-error' : ''; ?&gt;&quot;&gt;\n                &lt;label&gt;Confirm Password&lt;\/label&gt;\n                &lt;input type=&quot;password&quot; name=&quot;confirm_password&quot; class=&quot;form-control&quot;&gt;\n                &lt;span class=&quot;help-block&quot;&gt;&lt;?php echo $confirm_password_err; ?&gt;&lt;\/span&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;form-group&quot;&gt;\n                &lt;input type=&quot;submit&quot; class=&quot;btn btn-primary&quot; value=&quot;Submit&quot;&gt;\n                &lt;a class=&quot;btn btn-link&quot; href=&quot;welcome.php&quot;&gt;Cancel&lt;\/a&gt;\n            &lt;\/div&gt;\n        &lt;\/form&gt;\n    &lt;\/div&gt;    \n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Menerapkan Mekanisme Otentikasi Pengguna Otentikasi pengguna sangat umum dalam aplikasi web modern. Ini adalah mekanisme keamanan yang digunakan untuk membatasi akses tidak sah (restrict unauthorized)<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-552","post","type-post","status-publish","format-standard","hentry","category-php"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Belajar PHP MySQL : Login System - WebHozz Code<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Belajar PHP MySQL : Login System - WebHozz Code\" \/>\n<meta property=\"og:description\" content=\"Menerapkan Mekanisme Otentikasi Pengguna Otentikasi pengguna sangat umum dalam aplikasi web modern. Ini adalah mekanisme keamanan yang digunakan untuk membatasi akses tidak sah (restrict unauthorized)\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/\" \/>\n<meta property=\"og:site_name\" content=\"WebHozz Code\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-20T14:17:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-09-20T14:17:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tutorialrepublic.com\/lib\/images\/php-signup-form.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/#\\\/schema\\\/person\\\/3b2b79dc317236b0dde4b1fda37263e1\"},\"headline\":\"PHP MySQL : Login System\",\"datePublished\":\"2019-09-20T14:17:17+00:00\",\"dateModified\":\"2019-09-20T14:17:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/\"},\"wordCount\":704,\"image\":{\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tutorialrepublic.com\\\/lib\\\/images\\\/php-signup-form.png\",\"articleSection\":[\"PHP\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/\",\"url\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/\",\"name\":\"Belajar PHP MySQL : Login System - WebHozz Code\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tutorialrepublic.com\\\/lib\\\/images\\\/php-signup-form.png\",\"datePublished\":\"2019-09-20T14:17:17+00:00\",\"dateModified\":\"2019-09-20T14:17:21+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/#\\\/schema\\\/person\\\/3b2b79dc317236b0dde4b1fda37263e1\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tutorialrepublic.com\\\/lib\\\/images\\\/php-signup-form.png\",\"contentUrl\":\"https:\\\/\\\/www.tutorialrepublic.com\\\/lib\\\/images\\\/php-signup-form.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/php-mysql-login-system\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP MySQL : Login System\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/#website\",\"url\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/\",\"name\":\"WebHozz Code\",\"description\":\"Tutorial Web &amp; Pemrograman Indonesia\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/#\\\/schema\\\/person\\\/3b2b79dc317236b0dde4b1fda37263e1\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f222cb0ed38f2100d666bb262fd38d4f0d8e5673698208e40ff83118f10a4e8e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f222cb0ed38f2100d666bb262fd38d4f0d8e5673698208e40ff83118f10a4e8e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f222cb0ed38f2100d666bb262fd38d4f0d8e5673698208e40ff83118f10a4e8e?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"url\":\"https:\\\/\\\/www.webhozz.com\\\/code\\\/author\\\/dody\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Belajar PHP MySQL : Login System - WebHozz Code","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/","og_locale":"en_US","og_type":"article","og_title":"Belajar PHP MySQL : Login System - WebHozz Code","og_description":"Menerapkan Mekanisme Otentikasi Pengguna Otentikasi pengguna sangat umum dalam aplikasi web modern. Ini adalah mekanisme keamanan yang digunakan untuk membatasi akses tidak sah (restrict unauthorized)","og_url":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/","og_site_name":"WebHozz Code","article_published_time":"2019-09-20T14:17:17+00:00","article_modified_time":"2019-09-20T14:17:21+00:00","og_image":[{"url":"https:\/\/www.tutorialrepublic.com\/lib\/images\/php-signup-form.png","type":"","width":"","height":""}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/#article","isPartOf":{"@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/"},"author":{"name":"admin","@id":"https:\/\/www.webhozz.com\/code\/#\/schema\/person\/3b2b79dc317236b0dde4b1fda37263e1"},"headline":"PHP MySQL : Login System","datePublished":"2019-09-20T14:17:17+00:00","dateModified":"2019-09-20T14:17:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/"},"wordCount":704,"image":{"@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tutorialrepublic.com\/lib\/images\/php-signup-form.png","articleSection":["PHP"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/","url":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/","name":"Belajar PHP MySQL : Login System - WebHozz Code","isPartOf":{"@id":"https:\/\/www.webhozz.com\/code\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/#primaryimage"},"image":{"@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tutorialrepublic.com\/lib\/images\/php-signup-form.png","datePublished":"2019-09-20T14:17:17+00:00","dateModified":"2019-09-20T14:17:21+00:00","author":{"@id":"https:\/\/www.webhozz.com\/code\/#\/schema\/person\/3b2b79dc317236b0dde4b1fda37263e1"},"breadcrumb":{"@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/#primaryimage","url":"https:\/\/www.tutorialrepublic.com\/lib\/images\/php-signup-form.png","contentUrl":"https:\/\/www.tutorialrepublic.com\/lib\/images\/php-signup-form.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.webhozz.com\/code\/php-mysql-login-system\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webhozz.com\/code\/"},{"@type":"ListItem","position":2,"name":"PHP MySQL : Login System"}]},{"@type":"WebSite","@id":"https:\/\/www.webhozz.com\/code\/#website","url":"https:\/\/www.webhozz.com\/code\/","name":"WebHozz Code","description":"Tutorial Web &amp; Pemrograman Indonesia","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webhozz.com\/code\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.webhozz.com\/code\/#\/schema\/person\/3b2b79dc317236b0dde4b1fda37263e1","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f222cb0ed38f2100d666bb262fd38d4f0d8e5673698208e40ff83118f10a4e8e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f222cb0ed38f2100d666bb262fd38d4f0d8e5673698208e40ff83118f10a4e8e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f222cb0ed38f2100d666bb262fd38d4f0d8e5673698208e40ff83118f10a4e8e?s=96&d=mm&r=g","caption":"admin"},"url":"https:\/\/www.webhozz.com\/code\/author\/dody\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/posts\/552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/comments?post=552"}],"version-history":[{"count":4,"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/posts\/552\/revisions"}],"predecessor-version":[{"id":557,"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/posts\/552\/revisions\/557"}],"wp:attachment":[{"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/media?parent=552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/categories?post=552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webhozz.com\/code\/wp-json\/wp\/v2\/tags?post=552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}