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

php Booking Kalendar

Sore Master Dweb,

Mohon bantuannya, pinginnya membuat status booking calendar berdasarkan data reservasi. Misalnya reservasi yang dicatat di database dengan status confirm sebagai berikut :
start_date = 2016-06-01
end_date  = 2016-06-04

Gimana caranya supaya interval tanggal 1 sampai tanggal 4 di calendar warna background menjadi merah. 

Minta saran master : 
kalo misalnya terms checkin dan check out seperti di bawah ini: di Field start_date dan  dan end_date typenya harus dirubah menjadi datetime ya?

Check-in

14:00 - 00:00

Check-out

Until 12:00


Karena script terlalu panjang, berikut link calendar.php dan database tabel nya :

calendar.php

Tabel:


Terima kasih sebelumnya Master...

Tanggapan

  • edited June 2016
    proses di php nya aja
    elo dapat start dan end dari db

    misal 2016-01-03 s/d 2016-01-07
    buat jadi "sesuatu" yg bisa jadi range ...
    langsung di query nya, atau boleh dobel

    SELECT
      DATEDIFF(`start`,"1970-01-01") AS ts_start,
      DATEDIFF(`end`,"1970-01-01") AS ts_end,
      `start`,
      `end`,
      ...
    FROM
      ...

    * field elo sesuaikan sendiri

    kira-kira kalo data start 2016-01-03 dan end 2016-01-07
    16803
    16807

    tinggal bikin range
    range($data['ts_start'],$data['ts_end'])

    hasilnya : array(16803,16804,16805,16806,16807)

    anggap ada $array_booking
    ini kumpulan tanggal booking

    gw kagak tau, tampilan elo berdasar apa
    tapi gw asumsikan itu tampilan booking utk 1 kamar yg sama
    jadi $array_booking itu utk 1 kamar yg dimaksud

    tinggal elo merge
    $array_booking = array_merge($array_booking,range($data['ts_start'],$data['ts_end']));

    kira-kira nantinya ...
    semisal 1 kamar itu di booking tanggal-tanggal ini :
    start | end
    2016-01-03 | 2016-01-07
    2016-01-09 | 2016-01-10
    2016-01-11 | 2016-01-12
    2016-01-21 | 2016-01-23
    2016-01-27 | 2016-01-30

    dari SELECT bakal dapat ts_start dan ts_end
    ts_start | ts_end
    16803 | 16807
    16809 | 16810
    16811 | 16812
    16821 | 16823
    16827 | 16830

    isi $array_booking jadi : $array_booking(16803,16804,16805,16806,16807)
    berikutnya jadi : $array_booking(16803,16804,16805,16806,16807,16809,16810)
    berikutnya jadi : $array_booking(16803,16804,16805,16806,16807,16809,16810,16811,16812)
    dst ...

    itu karena fungsi array_merge() tadi
    yg digabung masuk itu range(ts_start,ts_end)

    sampai di sini paham ?
  • lanjutnya ...

    pas elo bikin table
    itu kan berdasar tanggal

    terserah seperti apa pun bentuk table elo
    tapi gw yakin elo bisa bikin tanggal "YYYY-MM-DD" dari tiap cell nya

    di loop nya tinggal periksa
    if(in_array( unixtojd(date("U",strtotime("YYYY-MM-DD")))-2440588 ,$array_booking) {
      // latar merah
    }
    else {
      // latar lain
    }

    YYYY-MM-DD nya elo ganti dgn tanggal yg bener sesuai tanggal cell yg elo maksud
  • Dear Master Kepiting,

    Sebelumnya terima kasih Master Kepiting, coba aq pelajari dulu dari penjelasan Mas di atas ya, nanti info lagi kalo terkendala...
  • Sore master Kepiting dan Dweb user

    1. Master Kepiting saya coba, di versi php 5.5.15 hasil tidak muncul Master, browser blank, iconya browsernya muter trus. Kira-kira kesalahnya dibagian mana ya?

    Berikut scriptnya saya taruh di pastebin. 
    calendar.php 

    tabel: 

    2. Jika tanggal di tabel konfirm dan setelah tanggal end date tidak ada tanggal booking konfirm maka tanggal cell seperti gambar berikut ini yang saya stroke pada tanggal 14.

    image
  • jadi kok ...

    image

    coba dihidupkan error reporting nya
  • Sudah On display_errors-nya master, browsernya tetap muter2 trus :

    image
  • tuh buka D:\website\php\logs\php_error_log ...
    di waktu terakhir ada error apa ?
  • Ini Master: 
    [28-Jun-2016 16:17:53 Asia/Singapore] PHP Fatal error:  Maximum execution time of 1800 seconds exceeded in D:\website\htdocs\sample_calendar\calendar.php on line 88

    Line 88 isinya: 

    $room = "SELECT * FROM rsv_booking WHERE room_id='1' AND payment_success='1' ORDER BY booking_id ASC";
  • 5 baris terakhir, posting kemari
  • Scriptnya sama persis seperti yang saya paste ke pastebin Master Kepiting, gak ada yang beda, Cuma pemanggilan db connection aja saya pake include, tapi kalo paste bin saya langsung taruh dalam satu file calendar.php
  • 5 baris terakhir error log nya mas'e :D
    bukan koding nya
  • edited June 2016
    Sory master miss kominikasi..

    Ini master seperti last error log :

    [28-Jun-2016 15:34:15 Asia/Singapore] PHP Warning:  mysqli::query(): MySQL server has gone away in D:\website\htdocs\sample_calendar\calendar.php on line 88

    [28-Jun-2016 15:34:16 Asia/Singapore] PHP Warning:  mysqli::query(): Error reading result set's header in D:\website\htdocs\sample_calendar\calendar.php on line 88

    [28-Jun-2016 16:04:23 Asia/Singapore] PHP Fatal error:  Maximum execution time of 1800 seconds exceeded in D:\website\htdocs\sample_calendar\calendar.php on line 88

    [28-Jun-2016 16:15:39 Asia/Singapore] PHP Fatal error:  Maximum execution time of 1800 seconds exceeded in D:\website\htdocs\sample_calendar\calendar.php on line 88

    [28-Jun-2016 16:17:53 Asia/Singapore] PHP Fatal error:  Maximum execution time of 1800 seconds exceeded in D:\website\htdocs\sample_calendar\calendar.php on line 88

    [28-Jun-2016 17:15:20 Asia/Singapore] PHP Fatal error:  Maximum execution time of 1800 seconds exceeded in D:\website\htdocs\sample_calendar\calendar.php on line 88

    [28-Jun-2016 17:20:38 Asia/Singapore] PHP Fatal error:  Maximum execution time of 1800 seconds exceeded in D:\website\htdocs\sample_calendar\calendar.php on line 92
  • edited June 2016
    [28-Jun-2016 15:34:15 Asia/Singapore] PHP Warning:  mysqli::query(): MySQL server has gone away in D:\website\htdocs\sample_calendar\calendar.php on line 88

    [28-Jun-2016 15:34:16 Asia/Singapore] PHP Warning:  mysqli::query(): Error reading result set's header in D:\website\htdocs\sample_calendar\calendar.php on line 88

    elo yakin mysql elo idup ?

    "MySQL server has gone away"
    itu mysql nya tewas

    "Error reading result set's header"
    berikutnya, ya ndak dapet hasil apa-apa

    "Maximum execution time of 1800 seconds exceeded"
    ditunggu sampai kiamat juga ndak bakal ada hasilnya :D
    lha wong mysql nya ndak respon
  • Saya yang salah Master, ternyata payment_success belum saya checked confirm untuk syarat dari line 88.


    * kalo untuk end date biar terbagi background colornya gimana Master Kepiting logikanya seperti gambar di bawah ini :

    image

    Misal data dari tabel : 
    Start : 2016-06-06
    End : 2016-06-08

    Jika confirm di kalendar end date backgroundnya menjadi setengah merah dan setengah hijau atau menjadi full merah. Keterangannya jika :

    1. setengah merah setengah hijau, jika pada tanggal tersebut ada yang check out berdasarkan record tanggal tabel dan memungkinkan untuk di booking setelah jam check out.
    2. full merah jika pada tanggal tersebut ada yang check out dan ada yang check in berdasarkan record tanggal tabel.

  • walah :))

    paling gampang main image buat bg

    awal pake image-6
    tengah (kalo ada) pake image-7
    akhir pake image-14

    default image-1

    yg 20-21-22 ... itu maksudnya apa ?
  • edited June 2016
    Tinggal menyesuaikan isian date ya Master untuk mendapatkan tanggal awal dan akhir?
    Misalnya
    if(in_array( unixtojd(date("U",strtotime("2016-06-06")))-2440588 ,$array_booking) {
      // latar awal 
    }elseif(in_array( unixtojd(date("U",strtotime("2016-06-08")))-2440588 ,$array_booking){
     // latar akhir
    }
    else {
      // latar lain
    }

    Itu artinya ada booking tanggal tersebut tapi belum ada deposite/pembayaran.
  • edited June 2016
    $array_booking mesti di sort dulu, baca fungsi sort()

    lalu pas loop bikin kalendar ... mainan flag
    $f=0; //default pake hijau
    loop sepanjang tangal

    if(
    in_array( unixtojd(date("U",strtotime("$date_manual")))-2440588 ,$array_booking) &&
    ($f==0)
    ){
      //image-6
      $f=1;
    }
    else if(
    in_array( unixtojd(date("U",strtotime("$date_manual")))-2440588 ,$array_booking) &&
    in_array( unixtojd(date("U",strtotime("$date_manual")))-2440587 ,$array_booking) &&
    ($f==1)){
      //red
    }
    else if(
    in_array( unixtojd(date("U",strtotime("$date_manual")))-2440588 ,$array_booking) &&
    !in_array( unixtojd(date("U",strtotime("$date_manual")))-2440587 ,$array_booking) &&
    ($f==1)){
      //image-14
    }
    else if(
    !in_array( unixtojd(date("U",strtotime("$date_manual")))-2440588 ,$array_booking) &&
    ($f==1)){
      //green
      $f=0;
    }
    else {
      //green
    }

    kira-kira gitu
    gw kagak nyoba
    elo test sendiri
  • Makasi Master Kepiting, coba tak pelajari dulu...
Sign In or Register to comment.