Tolong pilih kategori sesuai, jenis posting (pertanyaan atau bukan) dan sertakan tag/topik yang sesuai misal komputer, php, mysql, dll.
Promosi atau posting tidak pada tempatnya akan kami hapus.
Mencantumkan kode program di posting Anda, tolong ikuti aturan yang sesuai, baca http://diskusiweb.com/discussion/39204/aturan-cara-menyisipkan-kode-program-di-diskusiweb

Baca cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

Help..? Cara Mencari Batasan Akhir Waktu Masa Aktif

Mohon sarannya Mastah...\
Tabel DB
id | user | status
1 | userbaru | 0

contoh script
$tgl = date("Y-m-d");
if(status)=0 { $tgl + 10 } if(status)=1 { $tgl + 10 } ==============disini masalahnya ??

ilustrasinya gini Mastah =
Saya bikin fungsi penambahan user dengan masa aktif yg sudah di tentukan (misal 10 hari).
Jika user baru tersebut belum pernah login maka masa aktif masih tetap 10 hari
Jika user tersebut sdh pernah login sekali, maka masa aktif mulai dihitung mundur

Untuk user belum login tu jalan scriptnya, yg jadi masalah kalu sdh login user waktu ditambah 10 terus setiap hari...??
Mohon sarannya Mastah..?

Tanggapan

  • edited September 19
    @halidcnet Membuat masa expired dengan durasi 10 hari.

    // set untuk waktu online.
    $time_pre = microtime(true);
    //contoh waktu yang digunakan 1 detik
    usleep(1000000);

    $time_post = microtime(true);
    $exec_time = $time_post - $time_pre;
    echo "millisecond yang telah digunakan adalah = ".$exec_time."";

    // contoh waktu awal pembuatan (sudah di + 10 hari)
    $date = date_create('2017-10-10');
    date_time_set($date, 10, 10, 59);
    $yourdate = date_format($date, 'Y-m-d H:i:s');
    echo "Durasi waktu in date = ".$yourdate."";

    //format date ke millisecond
    $time = strtotime($yourdate);
    $time_in_ms = $time*1000;
    echo " Durasi millisecond awal = ".$time_in_ms."";

    //pengurangan durasi waktu yang tersisa - waktu online
    $diff = ceil($time_in_ms - $exec_time);
    echo " Durasi millisecond yang tersisa = ".$diff."";

    //format millisecond ke date
    $seconds = $diff / 1000;
    $showdate = date('Y:m:d H:i:s', $seconds) ;

    echo "Set durasi millisecond ke date = ".$showdate;
    Dicoba dl sp tau bener
  • m tanya lagi..ini maksudnya apa Mastah - date_time_set($date, 10, 10, 59);
  • @halidcnet date_time_set($date, 10, 10, 59); = set tanggal & waktu, dimana $date sudah di set date_create('2017-10-10');, kemudian di set jamnya jam 10 10 menit 59 detik.
  • Aduh bingung untuk penerapannya Mastah,,,mohon saran yg lebih simple....???maaf
  • @halidcnet Kalo blh tau untuk masa aktif/expired itu bisa melebihi 1 hari atau tidak, apakah ada max expired ? jika bisa melebihi 1 hari lebih baik menggunakan tanggal/date sebagai default startnya, jika max = 24 maka bisa menggunakan INT.

    code yang saya buat default nya adalah 2017-10-10 baru kemudian di tambahkan masa aktif misalnya + 10 hari, menjadi 2017-10-20, kemudian format ini di ubah ke milisecond, yang kemudian dikurangi dari milisecond user online = sisa durasi masa expired.

    Untuk pengechekannya bisa dengan date seperti SELECT * FROM table WHERE start_date between '2017-10-10 00:00:00' AND finish_date now();
  • Tabel DB
    id | user | status
    1 | userbaru | 0

    tabel DB nya cm gitu saja...
    klu dibuat bgn Mastah...?? misal tggl sekarang 2017-09-28

    $date = date_create('2017-10-08');
    date_time_set($date, 10, 10, 59);
    $yourdate = date_format($date, 'Y-m-d H:i:s');
    $tgl = date("Y-m-d");
    if(status)=0 { $yourdate } if(status)=1 {$yourdate } ---maaf klu salah....
  • edited September 28
    @halidcnet Oh baru paham haha sry2.
    // disini saya membuat default, ketika user membuat id baru di set status menjadi 0 di db, dan waktu_online = null,
    //set timezone
    date_default_timezone_set('Asia/Bangkok');
     
    // user login
    if ($user == "log in") {
    // select * from table where user = 'bla bla';
    // set status $status = data_db['status'];
    // set waktu online jika ada, $wk_ol = data_db['waktu_online'];
     
    // Counting down expired (sudah pernah login)
    if((int)$status != 0) {
    $first_login = null;
    // mulai menghitung waktu online
    $time_pre = microtime(true);
     
    } else { //first time login, sehingga waktu tidak di hitung mundur
    $first_login = 1;
    }
     
    // set location to home page
    header("location:home");
     
    } else { // log out
    // check apakah user first time login ?
    if(!empty($first_login)){
    //Get Day & time now, + Expired time (10 hari)
    $date = date("Y-m-d H:i:s", strtotime('+10 days'));
    //2017-09-28 11:55:02 +10 day = 2017-10-08 11:55:02
    update status from table where user = 'bla bla' set status = 1, waktu_online= $date;
    }
     
    // counting down expired
    else {
    $time_post = microtime(true);
    $exec_time = $time_post - $time_pre;
    // hitung waktu sisa online
    $showdate = date('Y:m:d H:i:s', ( (ceil(strtotime($wk_ol) - $exec_time) )/1000) );
    // waktu yang tersisa
    echo $showdate;
    update status from table where user = 'bla bla' set waktu_online= $showdate;
    }
     
    // set location to login page
    header("location:login");
     
    }
  • Terima kasih Mastah...m dicoba .. :/
  • edited September 29
    Waduh,..mantap bangat scriptnya Mastah...terima kasih..cm ad kesalahan di saya nih.
    tabel DB pad field status tu isinya time/waktu (00:00:00)
    Tabel
    id | user | status | date_create
    1 | userbaru | 00:00:00 | 2017-10-08

    Jadi misal gini Mastah, misal tgl sekarang 2017-09-28 - untuk limit 10 hari

    Jika user baru tersebut belum pernah login (status= 00:00:00) maka masa aktif(date_create) 10 hari
    Jika user tersebut sdh pernah login sekali (status > 00:00:00), maka masa aktif (date_create) mulai dihitung mundur

    Permasalahan !
    - hari berjalan terus, sementara user belum login & date_create mulai berkurang

    mo bikin ilustrasinya saja bingung Mastah..???

    Mohon sarannya...Trima kasih

  • @halidcnet lebih mudah kalo di databasenya di set default sebagai NULL untuk datenya.

    | Name | Type | Length | Default | Collation | Attribute | NULL | Index | A_I | dll
    | date | DATE | ------ | NULL | -------- | -------- | YES | ------ |----|
    kemudian ketika membuat id baru seperti ini :
    INSERT INTO TABLE (`id`, `user`, `status`, `date_create`) VALUES ('1', 'Ali', NULL, NULL);
    dan hasilnya : 1 , Ali , NULL , NULL

    jadi tinggal check if($status == NULL) { first_time_login } else { counting down }
    hari berjalan terus, sementara user belum login & date_create mulai berkurang.
    Maksudnya apa yach? sy kurang paham maksudnya ???

  • edited October 2
    Jadi misal gini Mastah, misal tgl sekarang 2017-09-28 - untuk limit 10 hari
    Tabel
    id | user | status | date_create
    1 | userbaru | 00:00:00 | 2017-10-08

    Permasalahan !
    - hari berjalan terus, sementara user belum login & date_create mulai berkurang
    Maksudnya =
    jika dalam 5 hari user belum login, maka jarak hari itu dengan date_create semakin dekat, kemudian user login di hari ke enam ( gimana dengan date_create nya) padahal limitasi harus 10 hari....
    Mohon sarannya,, trima kasih
  • @halidcnet 2017-09-28 -> 2017-10-08 (10 hari)
    User tidak login selama 5 hari = sisa limit 5 hari = 2017-10-03
    hari ke 6 user login = 2017-10-04 ?

    kalo mau di akumulasi dari date_create sebelumnya tinggal di tambah 10 hari aja
    date_create +=10 day, kalo mau max limitnya 10 hari tinggal date now() + 10 day. ?

    lalu casenya kamu gimn ? mau ditambah 10 hari atau gimn sy binggung kasih kondisinya.
  • edited October 3
    yang itu Mastah date_create +=10 day
    misal tgl sekarang 2017-09-28 - untuk limit 10 hari

    $date = date_create('2017-10-08');
    $tgl = date("Y-m-d");
    if(status)=0 { $date_create + 10 } if(status)=1 {$date_create + 10 } ---maaf klu salah....

    ni yg saya bingung...keduanya + 10 ...???
  • @halidcnet apakah time durasinya berjalan terus meskipun user logoff (setelah login yg ke 2)? atau hanya berjalan ketika user online?

    dan untuk durasinya apakah ontime? atau dihitung ketika user logoff?
    contoh durasi sisa 2 jam dan kemudian user online selama 4 jam, setelah user logoff baru di lock idnya atau ketika pas durasi habis yakni tepat 2 jam langsung di lock.
  • -time durasi berjalan ketika user online & berhenti ketika logoff.
    atau gini aja mastah...utuk time dibiarin dulu...cm tu limitasi 10 harinya tu??
  • edited October 4
    @halidcnet berhubung time durasi berjalan ketika user online & berhenti ketika logoff. maka limitnya tidak bisa menggunakan tanggal now sehingga harus menggunakan tgl static sebagai default atau lebih mudah dengan menggunakan INT.

    codenya sama seperti sblmnya hanya saja $date = date("Y-m-d H:i:s", strtotime('+10 days')); diganti menjadi $date = 10*86400;
    	if(!empty($first_login)){
    // @day = 86400 in second
    // set timeleft = 10days
    $timeleft = 10 * 86400;
    }
     
    // counting down expired
    else {
    $time_post = microtime(true);
    $exec_time = floor($time_post - $time_pre);
    //get timeleft from db
    $timeleft = $timeleft['database'] - $exec_time;
    echo $timeleft;
    }

    (ini untuk timeout ketika logoff bukan ontime)
    sy prefer lebih menyarankan menggunakan Int karena lbh mudah di pahami.
    jadi jika timeleft habis = timeout.

    Jika mau ontime harus menggunakan javascript jadi tidak menggunakan $time_post = microtime(true); hanya passing time duration saja untuk contohnya jsfiddle
    untuk case kamu button stop = log off, lalu cukup passing timeleft dr database ke javascriptnya saja yang kemudian di set sebagai timeleft.
  • terima kasih banyak Mastah sangat membantu...m d coba...

    klu saya mau memper simple sistemnya misal setiap user login durasinya di hitung hari saja dari jarak $date_create (mau 1 detik atau 1 menit saja itu sdh awal hitung hari)
  • @halidcnet Bisa di perdetail? maksudnya jika login 1detik saja sudah di kurang 1 hari?
  • maksudnya ..jika user awal login hari mulai d hitung...
    permasalahan
    jika user login di hari ke 2 atau seterusnya, gimana dengan ($date_create)..?
    untuk time sy lagi smntara coba....d biarin dulu

  • @halidcnet sy masih kg paham sama kata2nya awal login hari mulai d hitung maksudnya pertama kali login? dan hari mulai di hitung itu hari apa? date_create?
    jika user login di hari ke 2 atau seterusnya, gimana dengan ($date_create)..? yg ini sy bnr2 ngga paham
  • Jadi misal gini Mastah, misal tgl sekarang 2017-09-28 - untuk limit 10 hari
    Tabel
    id | user | status | date_create
    1 | userbaru | 00:00:00 | 2017-10-08

    jadi jika user awal login ( teserah m dihari ke berapa) limitasi HARI sdh mulai berlaku.
    sementar di tabe DB date_create sdh ditentukan akhir hari limitasi pada (2017-10-08).
    coding yg saya coba sementara ini kaya gini contoh

    $tgl = date("Y-m-d");

    if(status)=0 { $date_create=$tgl + 10 ;
    UPDATE user SET date_create='".$date_create." ; }

    if(status)=1 { $date_create=$tgl + 10 ;
    UPDATE user SET date_create='".$date_create." ; }


    Mohon sarannya,, trima kasih
  • @halidcnet sy masih heran sih kenapa status = 1 tetap di + 10 day ???

    seperti yg sy bil sblmnya jika sistemnya seperti itu (menurut saya) tidak baik menggunakan tglan di karena kan timeleft hanya berkurang ketika user online, dan berhenti ketika user log off, nantinya ketika di database lebih sulit membuat kondisi pengechekannya.

    contoh case :
    start log in = 2017-09-28
    limit time dibuat dari 2017-09-28 + 10 hari = 2017-10-08.
    kemudian user online pada tanggal 2017 -10-01, selama 6 jam.
    limit time - online time = 2017-10-07 18:00:00 ?
    untuk yg seperti ini tidak bisa memeriksa batas limitnya karena tidak ada set defaultnya,
    contoh select data dimana limit time user > 3 hari ??

    jika mau menggunakan tanggalan harus di set default startnya, contoh default start 2017-01-01, dan max limit = 2017-01-11. di database bisa dengan select * from table where date_start BETWEEN 2017-01-04 00:00:00 AND 2017-01-11 00:00:00 = limit time user >3 hari

    maka dari itu saran saya jika memang harus menggunakan tgl maka lebih baik di set defaultnya, jika bisa di ganti lebih baik di ganti dengan second yakni INT.
Sign In or Register to comment.