123 Komentar

Belajar PHP bagian 3 – Membuat halaman login dan logout menggunakan session

PERHATIAN!! Tutorial ini bersambung, jadi sebelum membaca tutorial ini sebaiknya anda membaca :

  1. Buku tamu – belajar PHP bagian 1
  2. Buku tamu – belajar PHP bagian 2

Pada tutorial buku tamu kali ini kita akan membuat 4 file PHP :

  1. login.php halaman antar-muka login
  2. login_proses.php halaman tujuan setelah menekan tombol Log in, disini akan dilakukan validasi dan pencocokan dengan data di tabel user_nya.
  3. login_lanjut.php jika semua data valid user akan di bawa ke halaman ini, terdapat ucapan selamat datang dan sebuah link Logout.
  4. logout.php merupakan tindak lanjut setelah link Logout di klik.

Halaman login.php

Tidak ada kode PHP disini, hanya HTML untuk membuat form isian login.

login.php

Tampilan login.php

Kode lengkap login.php

<html>
<head><title>Login</title></head>
<body>
<h1>LOGIN</h1>
<table>
<form action="login_proses.php">
<tr>
 <td>User Id</td>
 <td><input type="text" name="user_id" maxlength="255" size="20"></td>
</tr>
<tr>
 <td>Password</td>
 <td><input type="password" name="pass" maxlength="255" size="20"></td>
</tr>
<tr>
 <td></td>
 <td><input type="submit" value="Log in"></td>
</tr>
</form>
</table>
</body>
</html

Seperti yang sudah kita ketahui jika tombol Log in di tekan maka selanjutnya adalah login_proses.php yang akan menangani validasi dan proses selanjutnya.

Alur pengiriman variabel pada proses login

Alur pengiriman variabel pada proses login

Kode lengkap login_proses.php

<?php
session_start(); //kuncinya ada disini, tulis diawal script sebelum menulis yang lain

$server = 'localhost';
$user_db = 'root';
$password_db = '';
$nama_db = 'bukutamu';

/* Koneksi database*/
mysql_connect( $server, $user_db, $password_db ) or die( mysql_error() );
mysql_select_db( $nama_db ) or die( mysql_error() );

/* Ambil variabel */
$user_id = $_REQUEST['user_id'];
$pass = $_REQUEST['pass'];

/* Validasi */
$error = 0;
if( empty( $user_id ) || empty( $pass ) ) {
 echo 'Tidak boleh ada kolom yang kosong.<br>';
 $error++;
} else {
 $sql = 'select * from USER_NYA where USER_ID="' . $user_id . '"';
 $query = mysql_query( $sql );
 $row = mysql_fetch_row( $query );

 if( empty( $row[0] ) ) {
  echo 'User tidak dikenal.<br>';
  $error++;
 } else {
  if( $row[1] != $pass ) {
  echo 'Password salah.<br>';
  $error++;
 } else {
  /*Daftarkan ke server sbg variabel global*/
  /* session_register() Sebaiknya tdk digunakan (Deprecated Function)
  session_register( 'ID', 'PASS' );
  */
  $_SESSION['ID'] = $user_id;
  $_SESSION['PASS'] = $pass;
 } //end else
 } //end else
}

if( $error == 0 ) {
 /* Redirect jika tidak ada error */
 header( 'Location:login_lanjut.php' );
 exit();
} else {
 echo '<a href="login.php">Kembali</a>';
 exit();
}
?>

Perhatikan session_start() harus menjadi kode eksekusi PHP yang harus dibaca pertama kali oleh mesin PHP itu sebabnya  ia berada di urutan paling atas setelah tag PHP. SEDERHANANYA session_start() merupakan penanda bahwa halaman ini akan menggunakan fitur session dari PHP dan ia harus ditulis paling dulu😉

if( empty( $row[0] ) )

 

if( $row[1] != $pass )

Kita sedikit review dari latihan PHP bagian 2 bagi yang masih sedikit bingung dengan variabel $row[0] pada baris ke-27 dan $row[1] pada baris ke-31.

$sql = 'select * from USER_NYA where USER_ID="' . $user_id . '"';
$query = mysql_query( $sql );
$row = mysql_fetch_row( $query );

Kode mulai baris 26 sampai 28 menunjukan bahwa terjadi pemanggilan data ke tabel USER_NYA yang memiliki USER_ID sama dengan nilai yang dikandung dari variabel $user_id.

Index 0 1
Kolom USER_ID PASS

Tabel USER_NYA

Mulai ada pencerahan mengenai $row[0] dan $row[1] ? nilai 0 dan 1 menunjukan index dari kolom pada tabel USER_NYA sehingga pemanggilan $row[0] sama dengan pemanggilan nilai pada kolom USER_ID dan $row[1] sama dengan nilai dari kolom PASS, begitu seterusnya.

Didalam if() saya menggunakan beberapa operator pembanding berikut penjelasannya :

Operator Keterangan syntax
EQUAL TRUE, jika $a Sama dengan $b $a == $b
IDENTICAL TRUE, jika sama nilai dan tipe variabel-nya antara $a dan $b $a === $b
AND TRUE, jika $a bernilai true dan $b juga true $a AND $b atau $a && $b
OR TRUE, jika $a atau $b bernilai true $a OR $b atau $a || $b
NOT negasi !
NOT EQUAL TRUE, jika $a tidak sama dengan $b $a != $b atau $a <> $b
NOT IDENTICAL TRUE, jika $a tidak identik dengan $b $a !== $b
LESS THAN TRUE, jika $a kurang dari $b $a < $b
GREATER THAN TRUE, jika $a lebih dari $b $a > $b
LESS THAN or EQUAL TO TRUE, jika $a kurang dari sama dengan $b $a <= $b
GREATER THAN or EQUAL TO TRUE, jika $a lebih dari sama dengan $b $a >= $b

Operator pembanding

Jika variabel lolos validasi maka username dan password akan di daftarkan menjadi variabel global dalam session artinya variabel tersebut akan dapat diakses dari halaman manapun yang menggunakan session_start().

Pendaftaran dan assignment variabel SESSION ditangani oleh blok kode :

$_SESSION['ID'] = $user_id;
$_SESSION['PASS'] = $pass;

Setelah variabel terdaftar user akan di-redirect ke halaman yang hanya bisa dibuka jika loginnya berhasil, blok redirect ditangani oleh kode,

/* Redirect jika tidak ada error */
 header('Location:login_lanjut.php');
 exit(); //hentikan eksekusi kode di login_proses.php

Pembahasan login_lanjut.php ada di halaman 2 >>

123 comments on “Belajar PHP bagian 3 – Membuat halaman login dan logout menggunakan session

  1. Dasar gaptek nih saya, maunya komentar eh malah cuma manggut-manggut nggak mudheng heheheh..
    Salam.

  2. lanjutkan mass… jarang” peneranganya yg sejelas mungkin…
    semangatttttt….^.^’

  3. walah, bang,,,,,
    ni koq susah bangget, ya, bang…
    tiap kali di submit pasti komentarnya password salah,,,
    padahal udah bener passswordnya

    • Kalau file phpnya yang di-zip di atas sudah saya tes dan jalan. Kalau Ghaane nulis kodenya dari awal coba saya dikirim kode yang udah ditulisnya, barangkali bisa dicari salahnya dimana.
      * filenya di zip upload ke ifile.it atau file sharing seperti box.net nanti link-nya kasi ke saya
      Atau bisa di kirim ke email saya : muslim[[DOT]]pribadi[[AT]]hotmail[[DOT]]co[[DOT]]id

  4. ikut belajar mas…..mudah2an barokal ilmunya…..

  5. makasih bgt mas…mudah2an ilmunya bermanfaat…

  6. dsadasds

  7. nice…… moga ilmunya bermabfaat bagi semua….:D

  8. tanya dong.
    kalo mau bikin login pake Fb gmn?
    kaya waktu mau komen bisa login pake akun FB bwat komen.??

  9. wah ente dosen y gan??? jlas bget penjelasan ente…. hhe… bca artikel ini langsung mak ting ada lampu menyala di atas kepala q…. hahah thx bgt gan… buat artikelnya… ttp semngat gan buat artikel” baru lg….😀

    oh iya ane ada usul gan…gmn kalo ngebahas pembuatan form login dengan validasi captcha di dalamnya , tp captchane buat sendiri bukan bawaan dari google,,,, hhe (request)

    • Ane pernah ditawarin jadi dosen, syukur kalo jelas penjelasan ane jadi ga pade kesasar. Lampu dikepalanya bohlam apa neon? hehe.
      Usul yang bagus, ditampung dulu yak, soalnya lagi sibuk kuliah lagi ama lagi nyiapin event besar.

      Thanks😉

  10. numpang belajar mas…
    saya kok bingung tuk yang ni

  11. mas itu bikintable nya dari mysql atau bikin modul php

  12. om , sebelumnya terima kasih buat tutornya tapi ko saya pas coba login ada pesan ginian:

    Deprecated: Function session_is_registered() is deprecated in C:\xampp\htdocs\percobaanlogin\login_lanjut.php on line 11

    tapi pesan “selamat datang” nya muncul jadi ada pesan kaya di atas kalo dah login itu kenapa ya?

    • Deprecated berarti fungsi tersebut kemungkinan besar tidak akan didukung (dihapus) di versi PHP yang akan datang. Cross-check lagi dengan php manual terbaru untuk mendapatkan fungsi penggantinya di PHP yang baru😉
      Selamat coding

  13. ini pke php versi brp

  14. Terus kalo yang baru gmna malah Deprecated: Function session_is_registered() is deprecated in

  15. makasih ya mas sudah menulis artikel ini.
    sangat membantu..
    thanks =)

  16. mksh bung info’y sungguh sngt membantu sy sbg org yg awam php.
    Hehe. Salam

  17. thenkiyu mas…
    artikelnya sangat membantu. Kbetulan Sy dan beberapa teman lagi buat proyek PHP untuk komunitas. social network kya’ pesbuk gitu, tapi basicnya intranet. Kira-kira mas punya referensi nda’. Bls di email sy aj. Thx B4.

  18. Sangat membantu sekali … bisa saya kembangin lagi, thanks ya mas.

  19. @aksa : cek email
    @nita : sama-sama nita

  20. @mardhikaputra Begini bentuk modifikasi lengkapnya untuk login_lanjut.php, dari:

    if(!session_is_registered('ID') || !session_is_registered('PASS'))

    Menjadi:

    if( !isset($_SESSION['ID']) || !isset($_SESSION['PASS']) )

    Sudah saya coba dan berjalan seperti semestinya, Selamat datang lengkap dengan namanya.

    Silahkan dicoba, kalau misalnya masih belum muncul kirim aja sourcecode-kamu ke email saya muslim_[dot]_pribadi_[at]_gmail_[dot]_com
    Nanti kita pecahkan sama-sama. Kabari terus perkembanganya yak😉

  21. Selamat siang, saya mau tanya nih mas?
    Ilustrasi pertanyaan adalah sebagai berikut :
    Jika menu A di klik, Maka kolom “Halaman anak” akan muncul Halaman untuk Menu A. Begitu seterusnya dengan menu B dan C! Tetapi Masih dalam satu file php yaitu “halaman Induk (isi.php)!”. Itu namanya apa ya mas? Terus kodenya bagaimana ya?
    (Maaf Sebelumnya, saya belum tau itu namanya apa? jadi saya jelaskan pertanyaan saya melalui ilustrasi diatas! )
    Mohon Bantuannya ! Terimakasih…..

  22. Terimakasih mas…saya akan coba! Thanks…
    Oiya…nyasar sedikit gak papa ni ya?hehehe….
    Masalah postingan mas tentang Versi Firefox yang berlebih,aku ngerasain dampaknya ni? Layout web jadi ancur. Solusinya gimana ya mas agar bisa mengikuti perkembangan firefox? Kalau saya coba install firefox ke versi sebelumnya aman-aman aja tuh mas??? Jadi bingung nih?

  23. ada solusi gak mas biar tampilan gak berubah-ubah di setiap browser mas?
    Oiya…tutorial tentang switch udah beres mas? Makasih bgt ya?hehehe…..

  24. bang mau tanyak, ane sudah membuat form login, home dan logout ketika ane logout terus ane back,kembali ke halaman home, namun kalau di refresh dia bisa.. ane menggunakan setcookie..
    bagaimana bang solusinya agar gak bisa di back lagi…

    • Umumnya login dan logout menggunakan session. Karena variabel disimpan di server, berbeda dengan cookie yang disimpan di komputer client. Namun jika ingin tetap menggunakan cookie konsepnya, setelah berhasil login jangan lupa lakukan pengecekan terhadap variabel cookie. Bisa menggunakan variabel IF, dan ketika logout pastikan cookie dihapus dari browser, karena jika tidak maka tetap bisa di back

  25. mantab mas. mau nanya nih tapi diluar topik, ga pa2 kan.
    jadi gini mas kalo saya mau buat validasi di dua tabel kayak gini,
    jika kode pemilih tidak ada ditabel “pemilih” maka
    ket “anda tidak terdaftar”
    atau jika kode pemilih sudah ada ditabel “pemilihan”
    ket “anda sudah memilih”
    bagaimana teknik pengkodeannya ya mas?
    bantuin donk.makasih….

    • hehehe. gimana nih maksudnya? agak kurang jelas, tapi aku coba jawab deh.
      Proses yang kesatu lakukakan SELECT terhadap kode pemilih ke tabel pemilih, hasilnya lakukan validasi dengan operator if() dan fungsi empty()

      jika memang ada 2 tabel bikin saja if() bersarang dengan elseif()

      Selamat bereksperimen😉

  26. gan mau tanya, bisa ajari menggunakan database postgresql ga?

  27. Mas muslim, untuk login logout ini menggunakan batasan waktu bagaimana ya? Jadi misalkan jika 5 menit komputer tidak digunakan, maka dia akan logout otomatis? itu bagaimana ya mas?
    Terimakasih…

  28. Selamat sore mas Muslim,
    Mas jika ditambahin waktu gimana ya mas kodingnya? Jadi misalkan komputer dalam waktu 5 menit gak di utak-atik maka otomatis dia akan log out otomatis? Itu gimana ya mas kodingnya?Mohon bantuannya…
    Terimakasih…..

  29. mas, mohon bantuannya,.Gimana caranya buat kartu siswa online yang bisa diprint/download langsung oleh siswa

    • Aga panjang nih jawabnya, bisa jadi bahan tutorial baru🙂
      Untuk pembuatan kartu siswa online yang bisa diprint caranya sama saja dengan membuat form atau paragraf, hanya saja memang CSS-nya harus disesuaikan lagi karena tampilan print dengan layar ada kemungkinan berbeda.

      Dan setelah selesai user tinggal tekan CTRL+P untuk memulai proses pencetakan.

      Ada metode lain yaitu kartu diubah menjadi bentuk PDF, cara yang paling mudah gunakan layanan pihak ketiga, coba baca disini

      Metode yang independen, bisa dengan bikin fungsi convert to pdf sendiri di PHP

      Semoga membantu🙂

  30. Terimakasih atas infonya.. v masih kalua seandainya halaman user g bisa d buka selain harus login dlu gmn caranya mas… terimakasih

    • Ada banyak cara, karena sebenarnya programing itu seperti bikin kue. Kamu sudah punya bahannya tinggal cara mengolahnya. Bahan yang sama dengan teknik yang berbeda akan jadi kue yang berbeda juga.
      Misalnya kamu bisa pakai validasi variabel di halaman user via URL. Contoh,
      Url login: http://user.php?key=kunci_rahasia
      Jadi halaman user.php hanya bisa diakses jika “kunci_rahasia” -nya benar. Dan masih banyak kemungkinan lainnya

  31. […] Kode lengkap login_proses.php perlihatkan sumber […]

  32. bang makasih banyak tutorialnya ini sangat membantu. orang2 pinter juga baik kayak abang ini yg harus di banyakin di indonesia biar negara kita maju dan gak serakah harta juga ilmu😀

  33. kak,,ak ngk ngrti huft,,bkanya mudeng tmbah mubeng,,,hiikss ajri dong gmn kalo gues book ny ad insert,up date,delete.ak coba ga2l trus.include slh trus

  34. begitu logout, terus teken back, masih bisa masuk ke menu yang seharusnya kita mesti login dulu, kira – kira saya salah di bagian mana yah??(O__o)a
    mohon pencerahannya.

    • Ada banyak kemungkinan.
      1. Di variabel sessionnya ada yg ga konsisten cek disemua halaman, nama variabelnya sama semua.
      2. Di halaman logout.php ada variabel yang tidak terhapus, cek variabel dan fungsi, jika ada if() periksa lagi logikanya
      3. Validasi if() -nya ada yang salah
      4. dll

      Selamat memeriksa🙂

  35. nanya dong mas,,
    itu kan passwwordnya dikosongin
    pas udah saya bikin , passwordnya dikosongin, yg keluar “Tidak boleh ada kolom yang kosong.”
    nah kalo password nya diisi katanya “Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\login\login_proses.php on line 21
    User tidak dikenal.”

    nah kan,, saya nya bingung
    olong secepatnya di bls yaah
    makasi

  36. udah dibikin sesuai petunjuk nya
    ttep aja “Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\daftar\login_proses.php on line 21
    User tidak dikenal.”

    kenapa yaah ? padahal dafttar udah bisa,, apa yg salah dari database nya ?

  37. alhamdulillah,, stelah diulang,, semuanya udah bisa
    makasi yaa mas ^^

  38. Sungguh luar biasa…. saya betul-betul harus banyak belajar….

  39. mengikuti step by step dengan seksama postingannya.. makasih udah sharing mas.

  40. saya mau tanya dong, kalo misalnya mau bikin login dengan ketentuan, 1 username tidak bisa login di 2 device pada waktu yang bersamaan, gimana caranya ya? terimakasih🙂

    • Saya jelaskan konsepnya secara sederhana.
      Di databasenya bisa ditambahkan field check-out dg tipe data boolean TRUE/FALSE dg nilai default FALSE. Waktu login pertama kali berhasil ubah check-out menjadi TRUE. Dan gunakan fungsi pengecekan check-out

      If( !check-out ) {ubah nilai check-out jadi TRUE. login belum terjadi } else {jika login sudah terjadi 2x}

      Waktu logout ubah nilai check-out jadi FALSE lg.

  41. mas bro contoh kita pingin pnya halmaan utama pengunjung tapi ada beberapa menu yg hanya bisa diakses oleh member pengunjung biasa tidak bisa gmna scriptnya via php

  42. mantep lah……,’

  43. mas muslim scrip di atas pakai dreamwraver atau php? kalau phpnya versi brp?
    maaf mas jadi ikutan belajar nihh

  44. Sangat …sangat bermanfaat , membantu tambahan pengetahuan bagi yang berminat mempelajari website atau blog dan sejenisnya. seperti saya ini. trims, Admin

  45. wah saya udah coba.. makasih ya tutornya..🙂

  46. Ane bingung setelah instal script tapi tak dapat loging ke panel admin kalau halaman webnya sih sudah muncul sempurna (sebelum saya ganti agan bisa lihat di http://bisnismudah.p.ht/admin , id admin,passs admin ) tak apalah wong masih buat latihan….. Halaman login muncul tapi tiap x uer id dan pasword di masukkan halaman tetap saja di situ. dan tak ada peringatan muncul….kenapa yah kiranya…apa yang harus di rubah…..

    Gan bila tahu solusinya..tolong doong…

  47. kalau ngoneksi nya ke postgre tau ndak ?
    makasi

  48. thanks gan, sangat membantu. saya pemula😀 harap maklum,
    sedikit nanya boleh ngga?
    klo halaman daftarnya gmna gan? trus, gmna bikin halaman login tp di halaman tertentu mis : E-Learning? mohon penjelasannya,

  49. makasih banyak gan atas infonya, saya mau nanya ni untuk pemilihan koneksi ke tabel databasenya gan, saya masih bingung maklum pendatang baru…
    kita buat database tapi kita mau tujuh tabel tertentu aja simpannya gmana ya gan caramya, karena satu database bisa banyak tabel jadi mau disimpan dalam tabel tertentu aja saya masih bingung cara link ke tabel nya
    Maaf panjang lebar jadinya, mohon bantuannya trimakasih.

  50. bang bisa kasih tips belajar ga,gimana cara memahami semua koding php agar bisa buat koding php sendiri yang kita inginkan.
    sblmnya makasih buat codong log’inya😀

  51. mas bro…
    jelasin dong di bagian /* Validasi */
    waktu saya saya jalankan, saya klik Login nya
    tiba-tiba muncul text
    Parse error: syntax error, unexpected ‘$row’ (T_VARIABLE) in C:\xampp\htdocs\login_proses.php on line 28
    tolong bantuan nya ya🙂

  52. masbrow mau tanya nih tapi diluar tema gpp yaaaa…..

    gimana menampilkan data berdasarkan ID dari user login, jadi pas kita login dengan user id kita, data detail kita akan tampil..

    terimakasih atas pencerahannya

  53. mantap thx… telat ni gw…. gkpp, dari pada ndak… hehe… thx yeh…

  54. terima kasih banyak kk membantu banget,,

  55. nais inpo Gan, nanti ane mampir lagi. belum sempat baca.
    kebetelan lagi pengen bergelut di dunia per-web-an he he he

  56. kak tanya donk, gimana caranya bikin website e-learning pake php??
    soalnya ad tugas bikin e-learning tapi saya ga tw apa-apa tentang php…
    bsa bantuin ga??
    baleske email aj yaa kak…
    makasii sebelumnya…

  57. kalo illegal acces, salahnya dimana ya??
    padahal rasanya udah bener..

  58. Maaf master, Cara bikin halaman profil gmana?
    Misalnya : jika klik http://www.websaya.com/profil.php akan menuju ke halaman profilnya sedangkan kalo klik http://www.websaya.com/profil.php?id=100002014 akan menuju ke profil user lain yang idnya tertera diatas.
    Mohon bantuannya

    • di profil.php pakai if untuk me $id = $_REQUEST[‘id’] kalau $id tdk kosong, tinggal di SELECT * FROM USER_TABLE WHERE id=’$id’. jadi nanti profile.php akan memanggil berdasarkan PRIMARY KEY tabel USER (sebagai contoh). Semoga bisa di mengerti🙂

  59. gmn cara membuat form registrasi dgn validasi tanpa harus meninggalkan halaman dan tanpa mengetik ulang data yg sudah diisi sebelumnya, mirip seperti registrasi yahoo, jika ada yg salah kt cukup memperbaiki data yg salah saja, tanpa kehilangan data lain yg telah kita ketik sebelumnya saat mengisi biodata. terima kasih

  60. Mantap mas tutorialnya… saya lumayan faham cara membuatnya walaupun saya menggunakan dreamweaver.

    Cuman kalau waktu loginnya dibatasi dengan durasi bagian mana ya saya harus merubah atau menambah source code nya?

  61. terima kasih buat ilmu nya moga dibalas tuhan dengan pahala yang berlipat ganda

  62. Mas Muslim makasih banget loh penjelasan nya….. keren banget!

Menurut anda bacaan ini bermanfaat? Ada tambahan? Atau mungkin mencari jawaban lain? Tulis disini Ok (:

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: