Laman

Minggu, 01 Maret 2015

PHP Function Mendeteksi Browser dan Sistem Operasi User

Membuat PHP Function untuk Mendeteksi Browser dan Sistem Operasi User

<?php 

// Detect PC 
function info_pc_dan_browser() { 
 $ua = $_SERVER["HTTP_USER_AGENT"];
 return strtolower($ua); 
} 

?>


Semoga bermanfaat
.

PHP Function Mendeteksi IP Address User

Membuat PHP Function untuk mendeteksi IP Address User

<?php 

// Detect IP
function info_client_ip_getenv() {
     $ipaddress = '';
     if (getenv('HTTP_CLIENT_IP'))
         $ipaddress = getenv('HTTP_CLIENT_IP');
     else if(getenv('HTTP_X_FORWARDED_FOR'))
         $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
     else if(getenv('HTTP_X_FORWARDED'))
         $ipaddress = getenv('HTTP_X_FORWARDED');
     else if(getenv('HTTP_FORWARDED_FOR'))
         $ipaddress = getenv('HTTP_FORWARDED_FOR');
     else if(getenv('HTTP_FORWARDED'))
        $ipaddress = getenv('HTTP_FORWARDED');
     else if(getenv('REMOTE_ADDR'))
         $ipaddress = getenv('REMOTE_ADDR');
     else
         $ipaddress = 'UNKNOWN';

     return $ipaddress; 
}

?>


Semoga bermanfaat
.

Senin, 23 Februari 2015

Membuat Login PHP dan Hak Akses Multi User

Berikut ini akan dibahas tentang bagaimana membuat login dengan php, dan membuat tingkatan hak akses user untuk setiap halaman.

Fitur dalam aplikasi :
  • Login dengan PHP
  • Penggunaan Cookie
  • Aplikasi PHP Multi User
  • Hak Akses User 
  • Dasar Pembuatan Theme
  • Dasar Pembuatan Framework

Desain Database
Database berisi dua table, yaitu :
  1. Table s_user, yang berfungsi untuk menampung data user, seperti username dan password.
  2. Table s_login, yang berfungsi untuk mencatat user yang sedang login.

Tampilan Database

Struktur Table User

Struktur Table Login

File-File Aplikasi
Berikut adalah file-file php dan file Database :

File-File



Form Login
Bisa diakses oleh semua orang tanpa login.
Berikut tampilan Form Login

Halaman Login

Source Code Form Login (form_login.php)

<h1>Form Login</h1>

<form name="form1" method="post" action="proses_login.php" >
    <table border="0" cellpadding="2" cellspacing="0">
      <tr>
        <td>Username</td>
        <td>:</td>
        <td><input type="text" name="username" value="" size="30" maxlength="30" /></td>
      </tr>
      <tr>
        <td>Password</td>
        <td>:</td>
        <td><input type="password" name="password" value="" size="30" maxlength="30" /></td>
      </tr>
      <tr>
        <td> </td>
        <td> </td>
        <td><input type="submit" name="submit" value="Login" /></td>
      </tr>
    </table>
</form>


Source Code Proses Login (proses_login.php)

<?php 

// Memuat konfigurasi 
include("konfigurasi.php");

// Cek variable yang dikirim 
if(!isset($_POST['username'])) {
 echo "Tidak ada Username";
} 
if(!isset($_POST['password'])) {
 echo "Tidak ada Password";
}

// Proses variable 
$username = str_replace("'", "", $_POST['username']); 
$password_post_md5 = md5($_POST['password']);  

// Membuat SQL 
$sql_user = "
SELECT * 
FROM s_user 
WHERE 
username LIKE '$username' 
AND password LIKE '$password_post_md5' 
LIMIT 1; 
";

// Proses Query 
$query_user = mysql_query($sql_user); 

// Cek Query 
if($query_user) {
 
 if(mysql_num_rows($query_user) > 0) {
  $datauser = mysql_fetch_assoc($query_user);
  
  // print_r($datauser); 
  $id_user = $datauser['id'];  
  $waktu_login = date('Y-m-d H:i:s', time());
  $waktu_kadaluarsa = date('Y-m-d H:i:s', time()+(24*3600)); 
  $key_login = time() . rand(1000,9000); // 13820573563348
  
  // Detect IP User 
  $ip = info_client_ip_getenv(); 
  
  // Detect Informasi PC dan Browser 
  $pc_dan_browser = info_pc_dan_browser(); 
  
  // Catat user login dalam database 
  $sql_login = "
  INSERT INTO s_login (key_login, id_user, waktu_login, waktu_kadaluarsa, status, ip, pc_dan_browser) VALUES 
  ('$key_login', '$id_user', '$waktu_login', '$waktu_kadaluarsa', '1', '$ip', '$pc_dan_browser');
  "; 
  
  // Proses catat login 
  $query_login = mysql_query($sql_login); 
  
  // Cek query login 
  if($query_login) { 
   
   // Catat login dalam cookies 
   setcookie("key_login", $key_login, time()+(24*3600),"/");  
   
   // Alihkan ke halaman home 
   header("location:index.php?p=home"); 
   exit; 
   
  } else { 
  
   // Menampilkan pesan 
   echo "Login tidak berhasil. #3"; 
   exit; 
  } 
 } else {
 
  // Menampilkan pesan  
  echo "Username atau Password salah."; 
  exit; 
 } 
} else { 

 // Menampilkan pesan 
 echo "Login tidak berhasil. #1"; 
 exit; 
} 

?>


Halaman Home
Bisa diakses oleh semua user yang sudah login.
Berikut tampilan Halaman Home

Halaman Home

Source Code Halaman Home (home.php)

<?php 

// Untuk mengakses halaman ini, harus login 
if(!$user_sedang_login) {
 echo "Belum Login.";
 exit;  
} 

// Atur hak akses user, untuk halaman ini. 
// Halaman ini bisa diakses oleh semua user login 
if($hak_akses > 0) {
 // Lanjut 
} else {
 echo "Tidak ada hak akses.";
 exit;  
} 

?>

<h1>Home</h1>

<p>
Selamat datang. <br/>
Halaman ini <u>bisa diakses oleh semua user login</u>. 
</p>

<p>
Informasi User yang sedang login (Anda) : 
</p>

<table border="1" cellpadding="4" cellspacing="0">
  <tr >
    <td>ID User</td>
    <td><?php echo $datauserlogin[2]['id_user']; ?></td>
  </tr>
  <tr>
    <td>Username</td>
    <td><b><?php echo $datauserlogin[2]['username']; ?></b></td>
  </tr>
  <tr>
    <td>Nama</td>
    <td><?php echo $datauserlogin[2]['nama']; ?></td>
  </tr>
  <tr >
    <td>Email</td>
    <td><?php echo $datauserlogin[2]['email']; ?></td>
  </tr>
  <tr bgcolor="#FFFF99">
    <td>Hak Akses</td>
    <td><?php echo $datauserlogin[2]['hak_akses']; ?></td>
  </tr>
  <tr >
    <td>Waktu Login</td>
    <td><?php echo $datauserlogin[2]['waktu_login']; ?></td>
  </tr>
  <tr>
    <td>Waktu Kadaluarsa Login</td>
    <td><?php echo $datauserlogin[2]['waktu_kadaluarsa']; ?></td>
  </tr>
  <tr>
    <td>IP Address</td>
    <td><?php echo $datauserlogin[2]['ip']; ?></td>
  </tr>
  <tr>
    <td>PC dan Browser</td>
    <td><?php echo $datauserlogin[2]['pc_dan_browser']; ?></td>
  </tr>
</table>


Tes Halaman, Diberi Nama Halaman Jeruk
Diseting untuk bisa diakses oleh user yang memiliki tingkat hak akses lebih dari sama dengan 3.
Berikut tampilan Halaman Jeruk

Halaman Jeruk

Source Code Halaman Jeruk (jeruk.php)

<?php 

// Untuk mengakses halaman ini, harus login 
if(!$user_sedang_login) {
 echo "Belum Login.";
 exit;  
} 

// Atur hak akses user, untuk halaman ini. 
// Halaman ini bisa diakses oleh semua user sbb :  
if($hak_akses >= 3) {
 // Lanjut 
} else {
 echo "Tidak ada hak akses.";
 exit;  
} 

?>


<h1>Jeruk</h1>

<p>
Halaman Jeruk.<br>
Halaman ini <u>bisa diakses oleh user, dengan hak akses >= 3</u>. <br>
<span style="background-color:#FF9;" >Hak akses user yang sedang login adalah <b><?php echo $hak_akses; ?></b></span>.
</p>


Tes Halaman, Diberi Nama Halaman Manggis
Diseting untuk bisa diakses oleh user yang memiliki tingkat hak akses lebih dari sama dengan 2.
Berikut tampilan Halaman Manggis

Halaman Manggis

Source Code Halaman Manggis (manggis.php)

<?php 

// Untuk mengakses halaman ini, harus login 
if(!$user_sedang_login) {
 echo "Belum Login.";
 exit;  
} 

// Atur hak akses user, untuk halaman ini. 
// Halaman ini bisa diakses oleh semua user sbb :  
if($hak_akses >= 2) {
 // Lanjut 
} else {
 echo "Tidak ada hak akses.";
 exit;  
} 

?>


<h1>Manggis</h1>

<p>
Halaman Manggis.<br>
Halaman ini <u>bisa diakses oleh user, dengan hak akses >= 2</u>. <br>
<span style="background-color:#FF9;" >Hak akses user yang sedang login adalah <b><?php echo $hak_akses; ?></b></span>.
</p>


Halaman Catatan Login (Log User Login)
Diseting untuk bisa diakses oleh user yang memiliki tingkat hak akses sama dengan 10 (super user)).
Berikut tampilan Halaman Catatan Login

Halaman Catatan Login

Source Code Halaman Catatan Login (catatan_login.php)

<?php 

// Untuk mengakses halaman ini, harus login 
if(!$user_sedang_login) {
 echo "Belum Login.";
 exit;  
} 

// Atur hak akses user, untuk halaman ini. 
// Halaman ini bisa diakses oleh semua user sbb :  
if($hak_akses == 10) {
 // Lanjut 
} else {
 echo "Tidak ada hak akses.";
 exit;  
} 

?>


<h1>Catatan Login (Log)</h1>

Berikut ini ditampilkan 1000 catatan login terakhir : <br/> <br/> 


<table border="1" cellpadding="4" cellspacing="0">
  <tr>
    <th nowrap scope="col">ID Login</th>
    <th nowrap scope="col">Waktu Login</th>
    <th nowrap scope="col">Waktu Kadaluarsa</th>
    <th nowrap scope="col">ID User</th>
    <th nowrap scope="col">Username</th>
    <th nowrap scope="col">Hak Akses</th>
    <th nowrap scope="col">IP Address</th>
    <th nowrap scope="col">PC dan Browser</th>
    <th nowrap scope="col">Status Logout</th>
    <th nowrap scope="col">Aktif/Online</th>
  </tr>
<?php 

$sql_clogin = "

SELECT 

l.id AS id_login, 
l.waktu_login, 
l.waktu_kadaluarsa, 
l.id_user, 
u.username, 
u.hak_akses, 
l.ip,
l.pc_dan_browser, 
l.status AS ketstatus 

FROM s_login l 
LEFT JOIN s_user u ON l.id_user = u.id 

ORDER BY 
l.waktu_login DESC

LIMIT 1000; 

"; 

$query_clogin = mysql_query($sql_clogin); 

if(!$query_clogin) { 
 echo "Tidak berhasil query.";
 exit; 
 
} else { 

 while ($baris_clogin = mysql_fetch_assoc($query_clogin)) { 
 
 if($waktu_server <= $baris_clogin['waktu_kadaluarsa'] && $baris_clogin['ketstatus'] == '1') {
  $online = "Online";
  $bg = "#66FF99";
 } else {
  $online = "---";
  $bg = "#FFFFFF";
 }

?>

  <tr bgcolor="<?php echo $bg; ?>">
    <td nowrap ><?php echo $baris_clogin['id_login']; ?></td>
    <td nowrap ><?php echo $baris_clogin['waktu_login']; ?></td>
    <td nowrap ><?php echo $baris_clogin['waktu_kadaluarsa']; ?></td>
    <td nowrap ><?php echo $baris_clogin['id_user']; ?></td>
    <td nowrap ><?php echo $baris_clogin['username']; ?></td>
    <td nowrap ><?php echo $baris_clogin['hak_akses']; ?></td>
    <td nowrap ><?php echo $baris_clogin['ip']; ?></td>
    <td nowrap ><?php echo $baris_clogin['pc_dan_browser']; ?></td>
    <td nowrap >
 <?php 
 if($baris_clogin['ketstatus'] == '0') { 
  echo "Telah melakukan Logout"; 
 } else {
  echo "---"; 
 }
 
 ?>
    </td>
    <td nowrap style="font-weight:bold;" ><?php echo $online; ?></td>
  </tr>
  
<?php 
 } 
} 
?> 
  
</table>



Source Code Logout (logout.php)

<?php 

// Memuat konfigurasi 
include("konfigurasi.php");

// Hapus Cookie 
setcookie("key_login", "0", time()-(24*3600*30),"/");  

if(isset($_COOKIE['key_login'])) {
  
 $key_login = $_COOKIE['key_login']; 
 
 // Update catatan login 
 $sql_logout = "
 UPDATE s_login SET status = '0' 
 WHERE key_login = '$key_login'  
 LIMIT 1;
 ";
 
 $query_logout = mysql_query($sql_logout); 
 
 if($query_logout) { 
  alihkan_halaman('index.php?p=form_login'); 
 } else {
  echo "Tidak sempurna logout."; 
 }
}

?>



Source Code Index (index.php)
index.php berfungsi untuk meng-include halaman-halaman yang lain.
index.php juga berfungsi sebagai Theme, juga berfungsi sebagai Framework.

<?php 

// Theme 

// Memuat konfigurasi 
include("konfigurasi.php");


?><!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Salim Basic Login PHP</title>
<style type="text/css" >

body {
 margin: 30px 60px 30px 60px; 
}

</style>
</head>
<body>

<!-- Menu --> 
<?php 
include("menu.php");
?>
<hr size="1" color="#CCCCCC" />


<?php 

// Membaca variable p dalam URL 

if(isset($_GET['p'])) {
 if(strlen($_GET['p']) == 0) {
  $p = "form_login"; 
 } else {
  $p = $_GET['p']; 
 } 
} else { 
 $p = "form_login"; 
} 

// Memuat file 

if(file_exists($p . ".php")) {
 include($p . ".php"); 
} else {
 echo "Halaman tidak ditemukan.";
}

?>

<!-- Footer -->
<br/>

<hr size="1" color="#CCCCCC" />
<center>
 © Frombanda 
</center>

</body>
</html>


Source Code Menu (menu.php)
menu.php berisi menu-menu.
Dalam menu.php diatur kapan tampil menu sesuai hak akses user

<?php 

// Menu 

if($user_sedang_login != true) {
 echo '<a href="index.php?p=form_login" >Login</a> | ';
}

if($user_sedang_login == true) {
 echo '<a href="index.php?p=home" >Home</a> | ';
}

if($user_sedang_login == true) {
 if($hak_akses >= 3) {
  echo '<a href="index.php?p=jeruk" >Jeruk</a> | ';
 }
}

if($user_sedang_login == true) {
 if($hak_akses >= 2) {
  echo '<a href="index.php?p=manggis" >Manggis</a> | ';
 }
} 

if($user_sedang_login == true) {
 if($hak_akses == 10) {
  echo '<a href="index.php?p=catatan_login" >Catatan Login</a> | ';
 }
}

if($user_sedang_login == true) {
 echo '<a href="logout.php" >Logout</a> '; 
    echo '( <b>'.$datauserlogin[2]["username"].'</b> )'; 
}

?>


Source Code Konfigurasi (konfigurasi.php)
Konfigurasi berisi konfigurasi, seperti password database.

<?php 

// Variable Koneksi ke Database 
// ===================================================== 

$host = 'localhost';
$user = 'salim_basiclogin';
$pass = 'U5DHb6F2v9vuz6ah';
$db = 'salim_basiclogin';

// ===================================================== 

// Setting Time zone
date_default_timezone_set('Asia/Jakarta'); 
$waktu_server = date('Y-m-d H:i:s', time());

// Setting tidak menampilkan error 
error_reporting(0); 

// Membuat Koneksi ke database 
$con = mysql_connect($host,$user,$pass);

// Menangani kondisi koneksi 
if (!$con) {
 die('Tidak ada koneksi ke Database : ' . mysql_error());
} 

// Memilih Database 
mysql_select_db($db, $con); 

// Memuat functions 
include("functions.php");

// Memuat informasi User Login 
// Mendeteksi informasi tentang user login 
$datauserlogin = fb_cek_user_login(); 

// Data berikut ini ada saat user login 
// Memuat informasi Sudah Login atau Belum 
// $user_sedang_login bernilai true saat user sedang login 
if(isset($datauserlogin[0])) {
 $user_sedang_login = $datauserlogin[0]; 
} else {
 $user_sedang_login = false; 
}

// Data berikut ini ada saat user login 
// Memuat informasi Hak Akses 
// $hak_akses bernilai 1 sampai 10, jika user sedang login 
if(isset($datauserlogin[2]['hak_akses'])) {
 $hak_akses = $datauserlogin[2]['hak_akses']; 
} else {
 $hak_akses = 0; 
}

?>


Source Code Functions (functions.php)
functions.php berisi functions cek user login, cek ip user, cek browser user, cek sistem operasi user, dll.

<?php 

// Cek user login 
function fb_cek_user_login() { 
 if(isset($_COOKIE['key_login'])) {
  
  $key_login = $_COOKIE['key_login']; 
  $waktu_sekarang = date('Y-m-d H:i:s', time());
  
  $sql_userlogin = "
  SELECT 

  u.id AS id_user, 
  u.username, 
  u.nama, 
  u.email, 
  u.hak_akses,  
  l.waktu_login, 
  l.waktu_kadaluarsa, 
  l.ip, 
  l.pc_dan_browser 
  
  FROM s_login l 
  LEFT JOIN s_user u ON l.id_user = u.id 
  
  WHERE 
  l.key_login = '$key_login' AND  
  u.status = 1 AND 
  l.status = 1 AND 
  '$waktu_sekarang' <= l.waktu_kadaluarsa
  
  LIMIT 1; 
  "; 
  
  $query_ceklogin = mysql_query($sql_userlogin);
  
  if($query_ceklogin) {
   if(mysql_num_rows($query_ceklogin) > 0) {
    
    $data_ceklogin = mysql_fetch_assoc($query_ceklogin);
    // print_r($data_ceklogin); 
    
    return array(true, 'berhasil', $data_ceklogin);
    
   } else {
    return array(false, '#3');  
   }
  } else {
   return array(false, '#2'); 
  }
  
 } else {
  return array(false, '#1');  
 } 
} 

// redirect 
function alihkan_halaman($halaman_tujuan) { 
 error_reporting(0); 
 header("location:".$halaman_tujuan);
 echo '<meta http-equiv="refresh" content="0; url='.$halaman_tujuan.'">'; 
 echo '<script type="text/javascript"> window.location = "'.$halaman_tujuan.'";  </script>'; 
 echo '<a href="'.$halaman_tujuan.'" >Redirect</a>...';
 exit; 
} 

// Detect IP
function info_client_ip_getenv() {
     $ipaddress = '';
     if (getenv('HTTP_CLIENT_IP'))
         $ipaddress = getenv('HTTP_CLIENT_IP');
     else if(getenv('HTTP_X_FORWARDED_FOR'))
         $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
     else if(getenv('HTTP_X_FORWARDED'))
         $ipaddress = getenv('HTTP_X_FORWARDED');
     else if(getenv('HTTP_FORWARDED_FOR'))
         $ipaddress = getenv('HTTP_FORWARDED_FOR');
     else if(getenv('HTTP_FORWARDED'))
        $ipaddress = getenv('HTTP_FORWARDED');
     else if(getenv('REMOTE_ADDR'))
         $ipaddress = getenv('REMOTE_ADDR');
     else
         $ipaddress = 'UNKNOWN';

     return $ipaddress; 
}

// Detect PC 
function info_pc_dan_browser() { 
 $ua = $_SERVER["HTTP_USER_AGENT"];
 return strtolower($ua); 
} 

?>


----------------------------------------------------
----------------------------------------------------

Contoh dan Uji Coba Aplikasi 
Anda dapat mengunjungi salah satu link di bawah ini yang konek :

      Download Full Source Code PHP dan Database MySQL
      Download : Source Code Salim Basic Login PHP

      Semoga bermanfaat.
      Jika ada pertanyaan boleh email ke agussalim.us@gmail.com

      .