autoamtyczny terminarz w PHP

0

Witam wszystkich!!!
Bardzo proszę o podpowiedź jak to zrobić.
Buduję stronke w php i mysql, która ma min. umozliwić klientowi zarejestrowanie się przez internet a nastepnie po zalogowaniu zapisanie się na wizytę np. do dyrektora w jakiejś sprawie...
system jednak ma sam zaproponować dzień i godzinę wizyty...
Bardzo proszę o pomoc.
Pozdrawiam

0

Na jakiej podstawie system ma proponowac termin wizyty?

0
johny_bravo napisał(a)

Na jakiej podstawie system ma proponowac termin wizyty?

To ma wygladać tak...
ja zapisuje się przez internet
podaję temat, treść sprawy i wybieram z tabeli mysql rodzaj sprawy

Nastepnie po wcisnięciu przyciusku "zapisz się" chcę aby mi się wyświetlił komunikat, że zostałem zapisany na wizytę w dniu.... o godz. ..... ( np. w godzianch 8.00-16.00)
Nie wiem czy robić to na bazie tabeli w mysql… czy w samym php?
Jestem początkujący w tej dziedzinie niestety

0

Nie o to mi chodzilo. Na jakiej podstawie normalnie wyznaczane sa terminy wizyty? Np. przychodze do firmy, podchodze do pani przy biurku i mowie, ze chcialbym sie umowic. Na jakiej podstawie zaproponuje mi ona odpowiednie godziny?

//edit
Dodatkowe pytania:

  1. Czy czas trwania wizyty jest ustalony?
  2. Jesli nie to jak ustalac czas wizyty?
  3. Czy sa przerwy miedzy wizytami?
0
johny_bravo napisał(a)

Nie o to mi chodzilo. Na jakiej podstawie normalnie wyznaczane sa terminy wizyty? Np. przychodze do firmy, podchodze do pani przy biurku i mowie, ze chcialbym sie umowic. Na jakiej podstawie zaproponuje mi ona odpowiednie godziny?

//edit
Dodatkowe pytania:

  1. Czy czas trwania wizyty jest ustalony?
  2. Jesli nie to jak ustalac czas wizyty?
  3. Czy sa przerwy miedzy wizytami?

czas wizyty 15 min.
przerwy miedzy spotkaniami 5 minut

Tak podchodzę do okienka, mówię, ze chcę się zapisać i Pani mnie zapisuje, podstawą do zaproponowania godzin jest czas otwarcia urzędu... ( nie chce już wchodzic w szczegóły bo to by pewnie bardziej skomplikowalo sprawę, ze np są 3 dni w tygodniu w których interesanci są przyjmowani w godzniach np. 8.00-12.00)

0

No juz w miare jasne.

Ja bym to zrobil tak (mniej wiecej, jest dosc pozno ;) ):

  1. Tabela appointments:
create table appointments
(
  id int primary key auto_increment,
  day date not null,
  start_stamp int not null,
  visitor_id int not null
)
  1. Tabela visitors przechowujaca dane rejestrujacej sie osoby.

Teraz potrzebujesz procedurki, ktora na dany dzien wyciagnie wolne terminy. kolumna start_stamp moglaby byc typem czasowym (bo tak jest naturalnie), ale to komplikowaloby sprawe przy zapytaniach. Usprawnieniem moze byc takie rozwiazanie, korzystajac z tego, ze struktura spotkan jest ustalona:

  • tabela office_hours (godziny urzedowania)
    create table office_hours
    (
    day int not null,
    start_stamp int not null,
    primary key(day, start_stamp)
    )

W tej tabeli zaznaczasz jakie godziny w danym dniu uznawane sa za godziny przyjec. start_stamp oznacza liczbe, ktora mnozysz przez interwal 20 minut (15 minut wizyta + 5 minut przerwy) by uzyskac wlasciwy czas wizyty. Przykladowo:
day | start_stamp
1 24
1 25
1 26

oznacza, ze w poniedzialek (umowny 1 dzien) godziny przyjec ustalone sa na 8.00-9.00. 24 oznacza 24 z kolei interwal 20 minutowy (liczone dla ulatwienia od polnocy - czyli 8*3 interwaly mieszczace sie w godzinie). Zatem 24 to godzina 8.00-8.15, 25 to 8.20-8.35, 26 to 8.40-8.55.

Ten sam start_stamp wstawiasz do tabeli appointments by oznaczyc termin jako zajety.

Teraz sprawa jest prosta - wyciagniecie wolnych terminow na dany dzien to:

select start_stamp from office_hours where day = x and start_stamp not in (select start_stamp from appointments where date = date(now()))

W ten sposob otrzymujesz numery oznaczajace wolne terminy, w tym formacie liczbowym, ktory opisalem powyzej. Poniewaz interwal to 20 minut czyli 1/3 godziny latwo przeliczyc: liczba/3 to godzina, liczba%3*20 to minuta rozpoczecia wizyty.

Sposob troche zagmatwany, ale umozliwia duza swobode. Jesli bedziesz tworzyl do tego administracje godzin urzedowania to dostajesz gotowe narzedzie do reki - wystarczy wpisac odpowiednie wartosci w tabele office_hours i jestes w domu.

//edit
Jezeli rejestracja odbywa sie do roznych gabinetow wystarczy lekka modyfikacja tabel (dodanie np. room_id).

Disclaimer - podany kod moze byc niezgodny z dialektem MySQL, nie chcialo mi sie dokladnie sprawdzac ;) Zapytania nie musza zatem dzialac od razu po wklejeniu, ale idea powinna byc wlasciwa.

0
johny_bravo napisał(a)

No juz w miare jasne.

Bardzo dziekuję za poświęcony mi czas i za jakis punkt zaczepienia... posiedze nad tym i mam nadzieję, że mi się uda... potrzebne mi to do pracy mgr... a do oddania już tylko miesiąc... Wiszę Ci piwo :-) (jesli lubisz)
pozdrawiam
M.

0
johny_bravo napisał(a)

...

  • tabela office_hours (godziny urzedowania)
    create table office_hours
    (
    day int not null,
    start_stamp int not null,
    primary key(day, start_stamp)
    )

W tej tabeli zaznaczasz jakie godziny w danym dniu uznawane sa za godziny przyjec. start_stamp oznacza liczbe, ktora mnozysz przez interwal 20 minut (15 minut wizyta + 5 minut przerwy) by uzyskac wlasciwy czas wizyty. Przykladowo:
day | start_stamp
1 24
1 25
1 26

oznacza, ze w poniedzialek (umowny 1 dzien) godziny przyjec ustalone sa na 8.00-9.00. 24 oznacza 24 z kolei interwal 20 minutowy (liczone dla ulatwienia od polnocy - czyli 8*3 interwaly mieszczace sie w godzinie). Zatem 24 to godzina 8.00-8.15, 25 to 8.20-8.35, 26 to 8.40-8.55.

....

Nie rozumiem tego fragmentu. Może ktoś mi wytłumaczy, bo wydaje się to być fajne i ciekawe rowiazanie.
Co to znaczy:

  • start_stamp oznacza liczbe, ktora mnozysz przez interwal 20 minut ?
  • 24 oznacza 24 z kolei interwal 20 minutowy ?
0

Innymi slowy start_stamp to numer wyrazu takiego ciagu:
{00:00, 00:20, 00:40, 01:00, ...}. Czyli 24 wyraz tego ciagu to godzina 8:00. 3 kolejne wyrazy to odstep godziny, 1 to 20 minut. Dzieki temu KAZDY mozliwy termin wizyty (co 20 minut) ma naturalnie przyporzadkowany numer. Co znacznie ulatwia wyznaczenie nieprzyporzadkowanych nigdzie numerow - czyli wolnych terminow.

1 użytkowników online, w tym zalogowanych: 0, gości: 1