Login dan annals adalah fitur yang banyak dibutuhkan dalam pengembangan aplikasi web.

Biasanya saat membuat halaman admin. Kita pasti akan membuat login dan register.

Lalu bagaimana cara membuatnya?

Tulisan ini akan menjawabnya…

Sebelum itu, saya ingin menyampaikan apa saja yang akan dibahas di sini.

  • Tutorial ini menggunakan PHP Native dan PDO sebagai koneksi ke database;
  • Tutorial ini menggunakan Framework Bootstrap four untuk tampilan;
  • Tutorial ini hanya akan fokus membahas fitur login dan register saja, untuk class-course bootstrap saya tidak akan jelaskan. Saya anggap, pembaca sudah paham dengan Bootstrap.
Php Login Register

Baiklah, mari kita mulai…

Persiapan Alat dan Bahan

Berikut ini alat-alat yang dibutuhkan:

  1. Teks Editor: VS Code (pakai yang lain juga boleh);
  2. Spider web Browser: Google Chrome, Opera, Firefox, dll;
  3. Server: PHP (versi v.6 ke atas), Apache2/Nginx, dan MySQL.

Sementara untuk bahan-bahannya silahkan sediakan:

  1. Bootstrap four;
  2. Beberapa gambar.

Silahkan download di sini semua bahannya: bahan-bahan.zip

Download Bahan-bahan

Alat dan bahan sudah siap.

Mari kita mulai memasak coding… 😄

Membuat Project Baru

Buatlah sebuah direktori baru bernama php-login-annals di htdocs buat yang menggunakan XAMPP. Sedangkan yang menggunakan server apache2 dan nginx, silahkan buat di /var/www/html.

Ikuti perintah berikut:

            sudo chmod              777              /var/www/html -R              # berikan hak akses dulu              mkdir /var/world wide web/html/php-login-annals              # buat direktori baru              cd              /var/www/html/php-login-register              # pindah ke direktori baru                      

Buat tiga direktori di dalamnya:

            mkdir css js img              # buat tiga direktori sekaligus                      

Setelah itu buat file yang dibutuhkan:

                          # membuat file kosong              bear on index.php login.php register.php logout.php timeline.php auth.php config.php                      

Buka dengan VS Code:

                          # buka direktori ini dengan VS Code, pastikan kamu sudah menginstall VS Code              lawmaking .                      

Sehingga kita memiliki struktur direktori seperti ini:

Struktur direktori project php

Setelah itu, silahkan ekstrak dan copy semua bahan yang di-download tadi ke sana.

Ekstrak Bahan-bahan

Beres…

Semua bahan-bahan sudah siap.

Menyiapkan Database

Sebelum kita mulai menulis kode, siapkan dulu database-nya.

Silahkan buka phpmyadmin http://localhost/phpmyadmin/ dan buat database baru bernama pesbuk.

Baca juga: Cara Masuk ke phpMyAdmin Tanpa Login cPanel .

Membuat Database Baru di PHPmyadmin

Setelah itu, buatlah sebuah tabel baru dengan nama users dan buat kolomnya seperti ini:

Membuat tabel baru

Kode SQL-nya:

                          CREATE              TABLE              `users`              (              `id`              int(11)              NOT              Nix,              `username`              varchar(255)              Non              Zero,              `email`              varchar(255)              NOT              Zippo,              `password`              varchar(255)              Non              NULL,              `proper noun`              varchar(255)              Not              Cipher,              `photograph`              varchar(255)              NOT              NULL              DEFAULT              'default.svg'              ) ENGINE=InnoDB              DEFAULT              CHARSET=latin1;              --                            -- Indexes for tabular array `users`                            --                                          ALTER              TABLE              `users`              ADD              Main              KEY              (`id`),              ADD              UNIQUE              Primal              `username`              (`username`);              --                            -- AUTO_INCREMENT for table `users`                            --                                          Change              TABLE              `users`              MODIFY              `id`              int(xi)              NOT              Zero              AUTO_INCREMENT, AUTO_INCREMENT=              0;                      

Selesai, selanjutnya kita mulai coding

Membuat Koneksi ke Database

Hal pertama yang harus kita lakukan adalah membuat kode untuk koneksi ke database.

Silahkan buka file config.php, lalu isi kodenya seperti ini:

                          <?php              $db_host              =              "localhost";              $db_user              =              "root";              $db_pass              =              "kopi";              $db_name              =              "pesbuk";              try              {              //create PDO connection                                          $db              =              new              PDO("mysql:host=              $db_host              ;dbname=              $db_name              ",              $db_user,              $db_pass); }              take hold of(PDOException              $e) {              //testify fault                                          die("Terjadi masalah: "              .              $e              ->              getMessage()); }                      

Sesuaikan user dan password-nya dengan konfigurasi di komputermu. Karena di komputer saya, password mysql-nya menggunakan kopi.

Jika tidak menggunakan password, maka dikosongkan saja.

Apa maksud kode config.php di atas?

Pertama kita membuat variabel untuk menyimpan konfigurasi database:

                          $db_host              =              "localhost";              $db_user              =              "root";              $db_pass              =              "kopi";              $db_name              =              "pesbuk";                      

Setelah itu, kita membuat sebuah objek baru bernama $db, objek ini kita perlukan untuk melakukan query ke database.

                          $db              =              new              PDO("mysql:host=              $db_host              ;dbname=              $db_name              ",              $db_user,              $db_pass);                      

Saat kita membuat objek PDO, kita gunakan blok Try/Take hold of untuk menangai mistake.

Coba kita tes.

Silahkan buka terminal di VS Code (Tekan Ctrl+`), lalu jalankan server PHP di sana dengan perintah:

Argumen -S menggunakan huruf besar/kapital.

Menjalankan Server PHP

Sekarang buka: http://localhost:8000/config.php

Jika tampilannya kosong, maka koneksi berhasil dan tidak ada error.

Koneksi PHP ke MySQL berhasil

Tapi kalau ada error, biasanya akan tampil seperti ini.

Error saat koneksi PHP dan MYSQL

Membuat Halaman Utama

Halaman utama adalah halaman yang akan dibuka pertama kali oleh pengunjung web.

Halaman ini bertugas sebagai landing folio, isinya cuma html saja.

Silahkan buka file index.php lalu isi kodenya seperti ini:

                          <!DOCTYPE html>              <html              lang              =              "en"> <head>     <meta              charset              =              "UTF-8">     <meta              name              =              "viewport"              content              =              "width=device-width, initial-scale=1.0">     <meta              http-equiv              =              "10-UA-Uniform"              content              =              "ie=border">     <championship>Pesbuk</title>              <!-- menyisipkan bootstrap -->              <link              rel              =              "stylesheet"              href              =              "css/bootstrap.min.css"              /> </head> <torso              form              =              "bg-calorie-free">     <header>         <div              class              =              "jumbotron jumbotron-fluid">             <div              form              =              "container">                 <div              form              =              "row">                     <div              grade              =              "col-md-8">                         <h1>Selamat datang di Pesbuk</h1>                         <p>Bergabunglah bersama jutaan orang lainnya...</p>                     </div>                     <div              class              =              "col-md-4">                         <a              href              =              "login.php"              class              =              "btn btn-secondary">Masuk</a>                         <a              href              =              "register.php"              grade              =              "btn btn-success">Daftar</a>                     </div>                 </div>             </div>         </div>     </header>      <section>         <div              grade              =              "container">             <div              class              =              "row">                 <div              form              =              "col-dr.-12">                     <img              grade              =              "img img-responsive"              src              =              "img/connect.png"              />                 </div>             </div>         </div>     </section>  </torso> </html>                      

Setelah itu, coba buka http://localhost:8000/.

Landing page

Keren 'kan?

O ya gambarnya kita pinjam dari Facebook 😄.

Tidak apa-apa, ini kan hanya untuk belajar saja. Nanti kalau sudah buat web sungguhan, tidak boleh menggunakan gambar orang lain tanpa izin.

Membuat Fitur Annals di PHP

Berikutnya kita akan membuat fitur registrasi.

Alur kerjanya:

  1. Input data dari form;
  2. Filter information yang diinputkan;
  3. Simpan ke database;
  4. Kalau berhasil, alihkan ke halaman login.

Mari kita buat.

Silahkan buka file register.php, lalu isi dengan kode berikut:

                          <?php              require_once("config.php");              if(isset($_POST['register'])){              // filter information yang diinputkan                                          $proper name              =              filter_input(INPUT_POST,              'name', FILTER_SANITIZE_STRING);              $username              =              filter_input(INPUT_POST,              'username', FILTER_SANITIZE_STRING);              // enkripsi password                                          $password              =              password_hash($_POST["password"], PASSWORD_DEFAULT);              $email              =              filter_input(INPUT_POST,              'email', FILTER_VALIDATE_EMAIL);              // menyiapkan query                                          $sql              =              "INSERT INTO users (name, username, e-mail, password)                                            VALUES (:name, :username, :email, :password)";              $stmt              =              $db              ->              fix($sql);              // bind parameter ke query                                          $params              =              array(              ":name"              =>              $name,              ":username"              =>              $username,              ":password"              =>              $password,              ":e-mail"              =>              $electronic mail              );              // eksekusi query untuk menyimpan ke database                                          $saved              =              $stmt              ->              execute($params);              // jika query simpan berhasil, maka user sudah terdaftar                                          // maka alihkan ke halaman login                                          if($saved) header("Location: login.php"); }              ?>              <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>Register Pesbuk</title>      <link rel="stylesheet" href="css/bootstrap.min.css" /> </head> <body class="bg-light">  <div class="container mt-5">     <div class="row">         <div class="col-md-half-dozen">          <p>&larr; <a href="alphabetize.php">Home</a>          <h4>Bergabunglah bersama ribuan orang lainnya...</h4>         <p>Sudah punya akun? <a href="login.php">Login di sini</a></p>          <form activeness="" method="POST">              <div class="course-group">                 <characterization for="name">Nama Lengkap</label>                 <input class="form-control" type="text" proper noun="name" placeholder="Nama kamu" />             </div>              <div class="class-group">                 <label for="username">Username</label>                 <input grade="form-command" blazon="text" proper noun="username" placeholder="Username" />             </div>              <div class="class-group">                 <label for="email">Email</label>                 <input course="form-command" type="email" proper noun="email" placeholder="Alamat E-mail" />             </div>              <div class="class-group">                 <label for="password">Password</label>                 <input class="form-control" type="password" proper noun="password" placeholder="Countersign" />             </div>              <input type="submit" class="btn btn-success btn-block" proper name="annals" value="Daftar" />          </class>                      </div>          <div class="col-md-6">             <img class="img img-responsive" src="img/connect.png" />         </div>      </div> </div>  </body> </html>                      

Penjelasan:

Pertama kita membutuhkan objek $db untuk melakukan query, maka kita impor config.php dengan fungsi require_once().

                          require_once("config.php");                      

Setelah itu, baru kita buat kode untuk menyimpan information ke database.

Sebelumnya, kita cek dulu. Apakah tombol Register sudah ditekan atau belum:

                          if(isset($_POST['register'])){              // ...                            }              ?>                      

Selanjutnya melakukan filter dan enkripsi password terhadap data yang diinputkan:

                          // filter information yang diinputkan                                          $name              =              filter_input(INPUT_POST,              'name', FILTER_SANITIZE_STRING);              $username              =              filter_input(INPUT_POST,              'username', FILTER_SANITIZE_STRING);              // enkripsi password                                          $countersign              =              password_hash($_POST["password"], PASSWORD_DEFAULT);              $email              =              filter_input(INPUT_POST,              'electronic mail', FILTER_VALIDATE_EMAIL);                      

Kenapa harus di-filter dan dienkripsi?

Jangan percaya pada apa yang diinputkan user, bisa saja mereka menginputkan username dan name seperti ini:

Serangan XSS

Ini salah satu bentuk serangan XSS.

Karena itu, kita harus memfilternya agar skrip yang diinputkan user diubah menjadi karakter yang aman.

Filter XSS

Lalu kenapa password harus dienkripsi?

Tujuannya untuk keamanan. Nanti kalau database dicuri, si pencuri tidak akan tahu password dari akun-akun yang sudah terdaftar.

                          // enkripsi countersign                                          $password              =              password_hash($_POST["countersign"], PASSWORD_DEFAULT);                      

Tunggu dulu…

Kenapa password tidak di-filter?

Karena agar user dapat menggunakan simbol untuk membuat password.

Kalau kita filter nanti user tidak bisa membuat countersign dengan simbol-simbol seperti: &, <, >, %, dll.

Setelah information di-filter, selanjutnya kita buat query dengan objek $db.

                          $sql              =              "INSERT INTO users (name, username, email, password)                                            VALUES (:proper noun, :username, :email, :password)";              $stmt              =              $db              ->              prepare($sql);                      

:name, :username, :e-mail, :password adalah placeholder. Tujuannya agar terhindar dari serangan SQL Injection.

Setelah itu, kita bind parameter atau mengisi placeholder dengan nilai yang kita dapatkan dari hasil filter.

                          // bind parameter ke query                                          $params              =              array(              ":proper noun"              =>              $proper noun,              ":username"              =>              $username,              ":password"              =>              $password,              ":email"              =>              $email              );                      

Selanjutnya, kita eksekusi query-nya:

                          // eksekusi query untuk menyimpan ke database                                          $saved              =              $stmt              ->              execute($params);                      

Eksekusi query akan menghasilkan nilai true jika berhasil.

Sehingga kita bisa membuat sebuah kondisi:

                          // jika query simpan berhasil, maka user sudah terdaftar                            // maka alihkan ke halaman login                                          if($saved) header("Location: login.php");                      

Lalu yang terakhir adalah kode untuk form registernya:

            <form              action              =              ""              method              =              "Mail"> ... </form>                      

Atribut action="" artinya data akan dikirim ke file itu sendiri, yaitu: annals.php.

Mudah bukan?

Selanjutnya kita akan membuat fitur login.

Membuat Fitur Login di PHP

Silahkan buka file login.php lalu isi—ketik! jangan copas—dengan kode berikut:

                          <?php              require_once("config.php");              if(isset($_POST['login'])){              $username              =              filter_input(INPUT_POST,              'username', FILTER_SANITIZE_STRING);              $password              =              filter_input(INPUT_POST,              'password', FILTER_SANITIZE_STRING);              $sql              =              "SELECT * FROM users WHERE username=:username OR e-mail=:email";              $stmt              =              $db              ->              prepare($sql);              // bind parameter ke query                                          $params              =              array(              ":username"              =>              $username,              ":email"              =>              $username              );              $stmt              ->              execute($params);              $user              =              $stmt              ->              fetch(PDO::              FETCH_ASSOC);              // jika user terdaftar                                          if($user){              // verifikasi password                                          if(password_verify($password,              $user["password"])){              // buat Session                                          session_start();              $_SESSION["user"]              =              $user;              // login sukses, alihkan ke halaman timeline                                          header("Location: timeline.php");         }     } }              ?>              <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-viii">     <meta name="viewport" content="width=device-width, initial-scale=i.0">     <meta http-equiv="Ten-UA-Compatible" content="ie=border">     <title>Login Pesbuk</title>      <link rel="stylesheet" href="css/bootstrap.min.css" /> </caput> <torso class="bg-lite">  <div class="container mt-5">     <div course="row">         <div class="col-physician-vi">          <p>&larr; <a href="alphabetize.php">Dwelling house</a>          <h4>Masuk ke Pesbuk</h4>         <p>Belum punya akun? <a href="register.php">Daftar di sini</a></p>          <class action="" method="POST">              <div class="form-group">                 <label for="username">Username</characterization>                 <input class="form-control" type="text" name="username" placeholder="Username atau electronic mail" />             </div>               <div grade="form-grouping">                 <label for="countersign">Password</label>                 <input class="form-command" type="password" proper noun="password" placeholder="Password" />             </div>              <input type="submit" class="btn btn-success btn-block" name="login" value="Masuk" />          </course>                      </div>          <div grade="col-md-half dozen">             <!-- isi dengan sesuatu di sini -->         </div>      </div> </div>      </body> </html>                      

Penjelasan:

Algoritmanya hampir sama seperti register.

Pertama kita mengimpor file config.php:

                          require_once("config.php");                      

Setelah itu, kita cek apakah tombol login sudah ditekan atau belum:

                          if(isset($_POST['login'])){              // ...                            }                      

Lalu melakukan filter:

                          $username              =              filter_input(INPUT_POST,              'username', FILTER_SANITIZE_STRING);              $countersign              =              filter_input(INPUT_POST,              'password', FILTER_SANITIZE_STRING);                      

Selanjutnya melakukan query:

                          $sql              =              "SELECT * FROM users WHERE username=:username OR email=:email";              $stmt              =              $db              ->              prepare($sql);                      

Pada query, kita menggunakan logika OR agar user bisa login dengan e-mail dan username .

Selanjutnya demark parameter dan ekekusi querynya.

                          // bind parameter ke query                                          $params              =              array(              ":username"              =>              $username,              ":email"              =>              $username              );              $stmt              ->              execute($params);                      

Setelah query dieksekusi, kita ambil hasilnya dengan fungsi fetch().

                          $user              =              $stmt              ->              fetch(PDO::              FETCH_ASSOC);                      

Artinya, kita akan mengambil hasil query sebagai array assosiatif.

Fungsi fetch() akan menghasilkan null kalau tidak ada data, maka kita bisa membuat kondisi seperti ini:

                          // jika user terdaftar                                          if($user){              //...                            }                      

Selanjutnya, kita lakukan verifikasi password yang diinputkan oleh user dengan password yang ada di database.

                          if(password_verify($password,              $user["password"])){              //...                            }                      

Fungsi password_verify() akan menghasilkan nilai true kalau password yang diinputkan sama dengan yang di database.

Langkah terakhir adalah membuat session dan mengalihkannya ke halaman timeline.php.

                          // buat Session                            session_start();              $_SESSION["user"]              =              $user;              // login sukses, alihkan ke halaman timeline                            header("Location: timeline.php");                      

Variabel $_SESSION adalah variabel super global yang bisa dibaca dari semua file PHP, karena diingat oleh server.

Untuk dapat menggunakan variabel $_SESSION kita harus memanggil fungsi session_start() terlebih dahulu.

$_SESSION["user"] = $user; artinya kita menyimpan information user ke dalam session.

Ini yang akan kita manfaatkan untuk mengecek apakah user sudah login atau belum.

Membuat Halaman Timeline

Sebelum membuat kode untuk halaman timeline.php, kita buat dulu auth.php.

File auth.php berfungsi untuk mengecek session, apakah user sudah login atau belum.

Silahkan buka file auth.php kemudian isi seperti ini:

                          <?php  session_start();              if(!isset($_SESSION["user"])) header("Location: login.php");                      

Penjelasan:

Seperti penjelasan sebelumnya, saat kita ingin menggunakan variabel $_SESSION, maka kita harus memanggil fungsi session_start() terlebih dahulu.

Setelah itu kita cek dengan:

                          if(!isset($_SESSION["user"])) header("Location: login.php");                      

Artinya, jika variabel $_SESSION["user"] tidak memiliki nilai, maka user belum login… paksa dia untuk login 😄.

Tanda seru (!) di depan isset() artinya tidak. Berarti tidak ter-set (variabel belum dibuat).

Nah barulah sekarang kita buat halaman timeline.php.

Silahkan buka file timeline.php, lalu isi dengan kode berikut:

                          <?php              require_once("auth.php");              ?>              <!DOCTYPE html> <html lang="en"> <caput>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=one.0">     <meta http-equiv="10-UA-Compatible" content="ie=edge">     <title>Pesbuk Timeline</title>      <link rel="stylesheet" href="css/bootstrap.min.css" /> </head> <torso class="bg-light">  <div class="container mt-5">     <div class="row">         <div course="col-md-4">              <div class="card">                 <div course="card-torso text-center">                      <img class="img img-responsive rounded-circle mb-3" width="160" src="img/<?php echo $_SESSION['user']['photograph'] ?>" />                                          <h3><?php repeat  $_SESSION["user"]["proper noun"] ?></h3>                     <p><?php echo $_SESSION["user"]["email"] ?></p>                      <p><a href="logout.php">Logout</a></p>                 </div>             </div>                       </div>           <div class="col-md-8">              <form activeness="" method="mail" />                 <div course="form-grouping">                     <textarea class="form-command" placeholder="Apa yang kamu pikirkan?"></textarea>                 </div>             </form>              <?php for($i=0; $i < vi; $i++){ ?>             <div form="card mb-3">                 <div class="card-body">                 Lorem ipsum dolor sit amet consectetur adipisicing elit. Nobis veritatis nemo ad recusandae labore nihil iure qui eum consequatur, officiis facere quis sunt tempora impedit ullam reprehenderit facilis ex amet!                 </div>             </div>             <?php } ?>                      </div>          </div> </div>  </body> </html>                      

Halaman timeline.php hanya boleh dibuka oleh user yang sudah login saja. Maka kita harus mengeceknya.

Bagaimana caranya?

Cukup dengan mengimpor file auth.php:

                          <?php              require_once("auth.php");              ?>                      

Apa bila user-nya belum login, maka dia akan dialihkan ke halaman login. Sesuai kondisi logika yang kita buat pada file auth.php.

Karena kita sudah mengimpor file auth.php, kita bisa menggunakan variabel $_SESSION di sini.

Mari kita coba ambil nilai yang disimpan di sana:

                          <img class=              "img img-responsive rounded-circle mb-3"              width=              "160"              src=              "img/<?php repeat                            $_SESSION['user']              ['photo'] ?>"              />              <h3><?php              echo              $_SESSION["user"]["proper name"]              ?></h3> <p><?php echo $_SESSION["user"]["email"] ?></p>                      

Lalu membuat sebuah condition dummy "lorem ipsum" sebanyak 6:

                          <?php              for($i              =              0;              $i              <              6;              $i              ++){              ?>              <div class="bill of fare mb-iii">     <div class="carte du jour-torso">     Lorem ipsum dolor sit down amet consectetur adipisicing elit. Nobis veritatis nemo recusandae labore nihil iure qui eum consequatur, officiis facere quis sunt tempoimpedit ullam reprehenderit facilis ex amet!     </div> </div> <?php } ?>                      

Maka hasilnya:

Halaman Timeline

Kereenn… 😍

Terakhir, tinggal buat logout.php saja nih.

Membuat Logout di PHP

Silahkan buka file logout.php, kemudian isi dengan kode berikut:

                          <?php  session_start(); session_unset("user"); header("Location: index.php");                      

Tungas dari file logout.php adalah menghancurkan atau menghapus session yang sudah dibuat.

Pertama-tama, kita harus memanggil fungsi session_start(), karena kita akan menggunakan session di sini.

Setelah itu, kita hancurkan atau hapus variabel $_SESSION['user'] dengan fungsi session_unset("user").

Penghancuran session selesai.

Selanjutnya kita alihkan ke halaman utama.

            header("Location: alphabetize.php");                      

[🎁 Download Source Lawmaking Tutorial ini ]

Apa Selanjutnya?

Kita sudah berhasil membuat fitur login register. Selanjutnya tinggal dikembangkan saja.

Silahkan coba buat fitur:

  • Edit Profile;
  • Update Status;
  • Cari Teman;
  • Follow dan Unfollow;
  • Realtime Chat;
  • dan lain-lain.

Selamat coding…

Bacaan berikutnya:

  • Cara Masuk ke phpMyAdmin Melalui cPanel dan Tanpa Login cPanel