Membuat Aplikasi Klinik #17 - Membuat Halaman Login

Selanjutnya kita akan membuat halaman login, halaman ini digunakan untuk proses autentifikasi atau identifikasi user yang akan mengakses aplikasi klinik yang telah Anda buat.

Langkah pertama buat sebuah tabel baru pada mysql dengan nama session. Kemudian buat struktur tabelnya menjadi seperti berikut : sid varbinary(192) NOT NULL PRIMARY KEY, created date NULL, session_data longblob NULL.

Selanjutnya buat sebuah file dengan nama Loginclass.php pada folder app/load seperti berikut


<?php 
class Loginclass
{
        protected $obj;
        protected $obj2;
        protected $app;
        public $err;
        public $success;

        public function __construct($app, $obj, $obj2)
        {
                $this->obj=$obj;
                $this->obj2 = $obj2;
                $this->app=$app;
                $this->info = self::getinfoklinik();
        }
        public function getinfoklinik()
        {
                $d = $this->obj->selectTable('profile_klinik',"klinik_id=1");
                $d->execute();
                $this->info = $d->fetch(PDO::FETCH_BOTH);
                return $this->info;
        }

        public function loginheader($path='themes/adminlte')
        {
                ?>
                <!DOCTYPE html>
                        <html lang="en">
                        <head>
                        <meta charset="utf-8">
                        <meta name="viewport" content="width=device-width, initial-scale=1">
                        <title><?=$this->info['klinik_name']?> | Login</title>
                        <link rel="icon" href="content/web/<?=$this->info['klinik_icon']?>">
                        <meta name="description" content="<?=$this->info['klinik_description']?>" />     

                  <!-- Google Font: Source Sans Pro -->
                  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
                  <!-- Font Awesome -->
                  <link rel="stylesheet" href="<?=$path?>/plugins/fontawesome-free/css/all.min.css">
                  <!-- icheck bootstrap -->
                  <link rel="stylesheet" href="<?=$path?>/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
                  <!-- Theme style -->
                  <link rel="stylesheet" href="<?=$path?>/dist/css/adminlte.min.css">
                </head>
                <body class="hold-transition login-page">
                <?php 
        }
        public function loginfooter($path='themes/adminlte')
        {
                ?>
                        <!-- jQuery -->
                        <script src="<?=$path?>/plugins/jquery/jquery.min.js"></script>
                        <!-- Bootstrap 4 -->
                        <script src="<?=$path?>/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
                        <!-- AdminLTE App -->
                        <script src="<?=$path?>/dist/js/adminlte.min.js"></script>
                        </body>
                        </html>

                <?php
        }
        public function loginform()
        {
                ?>

                                <div class="login-box">
                                  <!-- /.login-logo -->
                                  <div class="card card-outline card-primary">
                                    <div class="card-header text-center">
                                      <a href="#" class="h1"><b>Klinik</b> Ansena</a>
                                    </div>
                                    <div class="card-body">
                                      <p class="login-box-msg">Sign in to start your session</p>

                                      <form action="<?php htmlentities($_SERVER['PHP_SELF'])?>" method="post">
                                        <div class="input-group mb-3">
                                          <input type="email" name="email" class="form-control" placeholder="Email">
                                          <div class="input-group-append">
                                            <div class="input-group-text">
                                              <span class="fas fa-envelope"></span>
                                            </div>
                                          </div>
                                        </div>
                                        <div class="input-group mb-3">
                                          <input type="password" name="password" class="form-control" placeholder="Password">
                                          <div class="input-group-append">
                                            <div class="input-group-text">
                                              <span class="fas fa-lock"></span>
                                            </div>
                                          </div>
                                        </div>
                                        <div class="row">
                                          
                                          <div class="col-4">
                                            <button type="submit" class="btn btn-primary btn-block">Sign In</button>
                                          </div>
                                        
                                        </div>
                                      </form>

                                      <div class="social-auth-links text-center mt-2 mb-3">
                                        <?php

                                                echo $this->success;                                      
                                      if(count($this->err)>0)
                                      {
                                        $this->app->getError($this->err);
                                      }
                                        ?>
                                      </div>
                                      <!-- /.social-auth-links -->

                                      <p class="mb-1">
                                        <a href="forgot-password.html">I forgot my password</a>
                                      </p>
                                      <p class="mb-0">
                                        <a href="register.html" class="text-center">Register a new membership</a>
                                      </p>
                                    </div>
                                    <!-- /.card-body -->
                                  </div>
                                  <!-- /.card -->
                                </div>
                <?php 
        }
        public function loginproses()
        {
                $this->err = array();
                if($_SERVER['REQUEST_METHOD']=='POST')
                {
                        
                        if(empty($this->app->post('email')))
                        {
                                array_push($this->err, "Email tidak boleh kosong");
                        }
                        else
                        {
                                $email = $this->app->post('email');

                        }
                        if(empty($_POST['password']))
                        {
                                array_push($this->err, "Password tidak boleh kosong");
                        }
                        else
                        {
                                $password = $_POST['password'];
                        }
                        if(count($this->err)==0)
                        {
                                if($this->obj2->loginAuth($email, $password,'users','email'))
                                {
                                        $this->success = $this->app->alert('success','Login berhasil');
                                        $_SESSION['user_id']=$this->obj2->user_id;
                                        $_SESSION['created']=time();
                                        $this->app->reload(3,'user/?page=home');
                                }
                                else
                                {
                                        $this->success = $this->app->alert('danger','Gagal melakukan login');
                                        $this->app->noresubmit();
                                }
                        }
                        else
                        {
                                $this->app->noresubmit();
                        }
                }
        }
        public function login_index()
        {
                Loginclass::loginheader();
                Loginclass::loginproses();
                Loginclass::loginform();
                Loginclass::loginfooter();
        }
        public function __destruct()
        {
                return true;
        }
}

Setelahnya cetak objek Loginclass tersebut pada Splautoload.php lalu jangan lupa tambahkan atau panggil handler untuk proses autentifikasinya, sehingga pada file Splautoload.php secara keseluruhan akan terlihat seperti berikut :


<?php
/**
        * File ini merupakan bagian fungsi untuk meload file - file / module aplikasi,
        * dan ini merupakan bagian penyederhanaan untuk penggunaan require once
        * yang terlihat agak sedikit kurang epektif, karena kita harus mengulang
        * - ngulang perintah tersebuh saat ingin memanggil suatu module.
        * Sehingga dengan menggunakan spl_auto_load_register, fungsi pemanggilan
        * file akan disederhanakan, namun setiap module perlu dikelompokan kedalam class
        * dimana setiap kelas perlu diberi nama yang sama dengan nama filenya.
        * Ketika class dicetak ke objek, maka secara otomatis file berdasarkan nama class
        * akan dipanggil.
        * Anda bisa bermain dengan banyak file pada direktori yang berbeda, Anda hanya cukup
        * membuat fungsinya, dan mengatur dimana letak/path module yang ingin Anda gunakan
        * 
        * Anda juga bisa membuat auto loader ini bekerja sebagai sebuah kelas, dalam auto loader
        * Anda hanya perlu menuliskannya seperti berikut 
        * spl_autoload_register(array('namaclass','nama_method'))
        * atau Anda membuat daftar path module didalam array dengan looping.
        * Contoh :
**/
        
                spl_autoload_register(function($className)
                {

                        $list_direktori = array
                        (
                                '/',
                                '/../../database/',                     
                                '/../load/',
                                '/../auth/',
                                '/../load/admin/',
                                '/../auth/',
                                

                        );
                        foreach($list_direktori as $list)
                        {
                                if(is_readable(__DIR__.$list.$className.'.php'))                        {
                
                                        require_once(__DIR__.$list.$className.'.php');
                                }
                                
                        }

                });

$db = new Database($databases);
$handler = new Auth($databases);
$obj = new Apps($databases);
$obj2 = new Appscostum($databases);
$app = new Property;
$upload = new Uploadclass;
$themes = new Template($app, $obj);
$crud = new Mainmodule($app, $obj, $obj2, $upload);
$login = new Loginclass($app,$obj, $obj2);
$module = new Moduleload($app, $obj, $themes,$crud);

Kemudian buka file index.php, rubah filenya menjadi seperti berikut


<?php
require "database/Settings.php";
require "app/core/Splautoload.php";
session_set_save_handler($handler,true);
session_start();
if(!empty($handler->read(session_id())))header("location:user/?page=home");
$handler->gc(200000);
$login->login_index();
?>




Lalu buat folder baru dengan nama user pada main direktori aplikasi kemudian tambahkan file index.php kedalamnya.


<?php
require "../database/Settings.php";
require "../app/core/Splautoload.php";
session_set_save_handler($handler,true);
session_start();
if(empty($handler->read(session_id())))
{
        header("location:../");
}
else
{
        $_SESSION['created']=time();
        $modul->ModuleAdmin('../',$_SESSION['user_id']);
}
?>




Terakhir modifikasi fungsi LoginAuth pada file Appcostum.php menjadi seperti berikut


        public function loginAuth($username, $password, $table, $where, $salt=null)
        {
                try
                {
                        $sql = "SELECT user_id, email, password FROM $table WHERE $where=:$where";
                        $stmt = $this->link->prepare($sql);
                        $stmt->bindParam(":$where", $username);
                        $stmt->execute();
                        $stmt->bindColumn("user_id",$this->user_id);                      
                        $stmt->bindColumn("password",$this->hash);
                        $stmt->fetch(PDO::FETCH_BOUND);
                        if($stmt->rowCount()==1)
                        {
                                if(password_verify($password, $this->hash))
                                {
                                        return true;
                                }
                                else
                                {
                                        return false;
                                }
                        }

                }
                catch(PDOException $e)
                {
                        echo $e->getMessage();
                }
        }




Selanjutnya : Membuat Aplikasi Klinik #18 - Membuat Halaman Logout


0 Response to "Membuat Aplikasi Klinik #17 - Membuat Halaman Login"

Post a Comment

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin

nagabet76slot gacorslot online1213141516Slot Online Menghadirkan Pengalaman Digital Yang Didukung Pemrosesan Data Secara Real TimeMahjongways Menganalisis Pola Visual Dan Dinamika Simbol Berdasarkan Pemrosesan Data DigitalMahjongways Mengembangkan Dinamika Permainan Melalui Pengelolaan Data Dan Elemen Visual TerintegrasiAnalisis Komputasi Modern Membantu Memetakan Dinamika Sistem Digital Berdasarkan Data ObservasiMember Baru Mendorong Dinamika Komunitas Digital Menuju Pengalaman Yang Lebih Aktif Dan Menarikslot onlinemahjongwayasarsitektur layananpemrosesan data adaptifmember baruSlot Online Terbaru Menghadirkan AnalisisScatter Hitam Dianalisis Melalui PemetaanPola Scatter Hitam Membentuk Distribusi Visual Yang Dapat Dikaji Menggunakan Komputasi AdaptifArsitektur Teknologi TerdistribusiTeknologi Visualisasi DataMahjongways Mengembangkan Interaksi Visual Melalui Integrasi Simbol Digital Yang DinamisAnalisis Mahjongways Memetakan Dinamika Visual Dan Respons Antarmuka Berbasis DataScatter Hitam Dianalisis Melalui Pemetaan Struktur Simbol Digital Berbasis Komputasi AdaptifAlgoritma Scatter Hitam Membantu Mengidentifikasi Dinamika Pola Melalui Analisis Data ObservasiPg Soft Mengembangkan Sistem Rendering Adaptif Untuk Mendukung Visualisasi Digital ModernTeknologi Pg Soft Mengoptimalkan Pemrosesan Grafis Melalui Arsitektur Rendering TerintegrasiTeknologi Pemodelan Data Membantu Menganalisis Dinamika Informasi Pada Ekosistem Digital ModernArsitektur Komputasi Terdistribusi Meningkatkan Keandalan Pengelolaan Data Pada Platform DigitalTeknologi Kecerdasan Komputasional Mendorong Pengembangan Sistem Digital Yang Lebih AdaptifPemrosesan Data Modern Membantu Memetakan Pola Informasi Melalui Pendekatan Komputasi TerukurTeknologi Integrasi Data Mempermudah Sinkronisasi Informasi Dalam Lingkungan Digital TerpaduVisualisasi Komputasi Modern Membantu Menginterpretasikan Perubahan Pola Pada Sistem Digital KompleksTeknologi Otomasi Data Meningkatkan Efisiensi Pengelolaan Informasi Pada Infrastruktur DigitalModel Komputasi Adaptif Mendukung Pengembangan Teknologi Digital Melalui Analisis Data BerkelanjutanPengembangan Pg Soft Mengintegrasikan Teknologi Rendering Dengan Interaksi Visual Yang ResponsifPg Soft Menerapkan Komputasi Visual Untuk Meningkatkan Efisiensi Pengolahan Elemen DigitalEksplorasi Scatter Hitam Memetakan Distribusi Simbol Melalui Model Analitik Digital TerintegrasiPola Scatter Hitam Dikaji Menggunakan Pendekatan Visualisasi Data Dan Pemodelan StatistikMahjongways Menghadirkan Pendekatan Visual Interaktif Melalui Pemrosesan Simbol Yang AdaptifEksplorasi Mahjongways Mengungkap Perubahan Pola Visual Dalam Lingkungan Digital Terintegrasigame online dan perubahan kebiasaan di tengah budaya internetkomunitas digital menjadi bagian dari perjalanan game onlinegame online dalam potret interaksi sosial di era platform modernjejak mobile membawa game online ke pengalaman yang semakin beragamketika game online bertemu dengan kreativitas dan komunitas digitalgame online dan pergeseran cara menikmati hiburan interaktifdari komunitas ke platform menyusuri perkembangan game onlinedesain visual membentuk identitas baru dalam dunia game onlinegame online di tengah perubahan teknologi dan budaya populerperjalanan game online mengikuti arah baru ekosistem digitalgame digital mulai masuk dalam sorotan budaya hiburan modernperkembangan game digital menjadi bahasan di tengah perubahan teknologimedia mengulas perjalanan game digital dari konsol menuju platform modernfenomena game digital muncul dalam perbincangan industri hiburangame digital dan perubahan kebiasaan menjadi catatan di era internetsorotan terkini membahas arah baru perkembangan game digitalteknologi interaktif membawa game digital ke percakapan media yang lebih luasgame digital menjadi bagian dari pergeseran budaya hiburan masa kinicatatan media menyoroti perubahan wajah game digital dari waktu ke waktuplatform baru membuka babak berbeda dalam perjalanan game digitalandi pratama dan cerita keberuntungan 8 juta di mahjong waysrizky membahas pengalaman 17 juta dalam permainan mahjong wayskisah dimas berawal dari game online hingga hasil 25 jutafajar menjadi perbincangan usai mendapat hasil 12 jutacerita bayu muncul di tengah tren mahjong ways masa kinirio mengulas pengalaman bermain dengan hasil sekitar 19 jutayoga dan perjalanan singkat menuju hasil permainan 7 jutaarif membagikan catatan pribadi soal hasil 14 jutabima dan pengalaman 28 juta yang ramai dibicarakandoni mengungkap cerita di balik hasil 22 juta mahjong wayscerita rendi dengan hasil 7 juta dari mahjong ways18 juta jadi pengalaman baru bagi rafli di game onlinemahjong wins menghadirkan cerita hasil 27 juta bagi hendrapengalaman dion dan perolehan 13 juta dalam game digitalhasil 22 juta diceritakan arya setelah memainkan mahjong ways 2fikri mengulas permainan online dengan hasil sekitar 16 jutamahjong online dan kisah ilham soal perolehan 10 jutasatria mengungkap pengalaman 24 juta dalam game mahjonggame online menjadi catatan baru bagi wahyu dengan hasil 15 jutaperolehan 30 juta dikaitkan dengan cerita rehan di mahjong winsmengenal perubahan visual dalam game mahjong di era digitalgame mahjong muncul dalam perbincangan budaya digital masa kinijejak klasik dan desain modern pada permainan mahjongperkembangan game mahjong dari konsep tradisional menuju platform digitalsimbol dan visual menjadi bagian menarik dalam game mahjonggame mahjong dan pergeseran gaya hiburan di platform modernmembaca perjalanan mahjong dalam perkembangan game digitaldesain interaktif membawa game mahjong ke format hiburan berbedafenomena game mahjong dalam percakapan media digital terkinidari tradisi ke digital melihat wajah baru game mahjongmahjong ways 2 muncul dalam perbincangan game digital masa kinijejak visual modern dalam perkembangan mahjong ways 2media digital mengulas perubahan tampilan mahjong ways 2mahjong ways 2 dan pergeseran gaya game online moderncatatan baru seputar desain dan fitur mahjong ways 2perjalanan mahjong ways 2 dalam ekosistem hiburan digitalruang digital membawa mahjong ways 2 ke perbincangan barumengenal karakter visual mahjong ways 2 di platform game modernfenomena mahjong ways 2 dalam perkembangan game online terkiniperspektif berbeda melihat mahjong ways 2 di era digitalmahjong ways 2 menghadirkan sisi berbeda dalam game digitalperbincangan baru seputar mahjong ways 2 di platform modernjejak budaya digital dalam perjalanan mahjong ways 2mahjong ways 2 dan perubahan gaya hiburan interaktifruang media menyoroti kehadiran mahjong ways 2 masa kinidesain visual mahjong ways 2 menjadi bagian dari game moderncatatan teknologi membawa mahjong ways 2 ke era digitalmengenal perkembangan mahjong ways 2 dalam ekosistem game onlinemahjong ways 2 muncul di tengah tren platform hiburan digitalsorotan media digital membahas format baru mahjong ways 2mahjong wins muncul dalam perbincangan game digital terkinijejak visual klasik menjadi bagian dari mahjong winsmedia digital mengulas perjalanan mahjong wins di platform modernmahjong wins dan perubahan gaya hiburan interaktif masa kinicatatan teknologi mengenal konsep visual dalam mahjong winsruang budaya digital membawa mahjong wins ke perspektif berbedaperkembangan platform game online menyertakan mahjong wins dalam perbincanganmengenal desain simbol dan tampilan pada mahjong winsfenomena mahjong wins dalam perubahan wajah hiburan digitalsisi berbeda mahjong wins dalam ekosistem game modernkasino online dan perubahan wajah hiburan di era digitalmedia digital membahas perkembangan platform kasino onlinejejak teknologi mengubah tampilan kasino online masa kinikasino online dalam perbincangan seputar budaya internet modernmengenal format interaktif pada platform kasino online digitalperubahan desain platform membawa kasino online ke arah berbedafenomena kasino online dan pergeseran kebiasaan hiburan digitalruang media menyoroti kehadiran kasino online di platform modernperkembangan teknologi menjadi bagian dari ekosistem kasino onlineperspektif baru melihat kasino online dalam lanskap digital