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