Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> System rezerwacyjny w PHP, Problem z modułem kalendarza
sebap123
post 2.09.2009, 19:28:58
Post #1





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Witam
Piszę skrypt będący czyms w rodzaju strony do rezerwacji pobytu w domku letniskowym. Chce jednak w tym skrypcie zbudowac cos w rodzaju interaktywnego kalendarza, przy pomocy którego będzie można wybrac wolną date (poczatek pobytu), zaznaczyc ją a potem wybrać kiedy ma sie skończyc pobyt. Zaznaczone by były rownież juz zajęte terminy i ich nie można by było wybrać.
Tak naprawdę nie wiem jakim sposobem można to stworzyć. Na początku chcialem to zrobić przy pomocy zwyklej tabeli ale troche chyba za dużo pisania, a pozatym też ten pomysł ma pare luk.
Dlatego mam nadzieje, że może ktoś będzie mial pomysl lub może cos takiego robił, żeby mi pomóc.
Go to the top of the page
+Quote Post
scanner
post 2.09.2009, 19:50:20
Post #2





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Ty chcesz napisać klikalny kalendarzyk, czy procedury w php, które będą tym zarządzać?


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
sebap123
post 2.09.2009, 19:52:34
Post #3





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


No dobre pytanie zadałeś. Ja myślalem o czyms w rodzaju formularza, ktory będzie przesyłał do bazy danych zaznaczone opcje. Potem je będzie wyświetlał. Ale jak jakaś inna propozycja to bardzo chętnie.
Go to the top of the page
+Quote Post
scanner
post 2.09.2009, 19:58:02
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Zacznij od bazy danych.
Zaprojektuj dwie tablice:
- Lokal
- Rezerwacja
będące w relacji 1 (Lokal) do wielu (Rezerwacja)

W rezerwacji oczywiście musisz pamiętać o dwu polach timestamp - "Od", "Do"

Gdy będziesz miał te tablice, pokaż co zrobiłeś i polecimy dalej.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
sebap123
post 2.09.2009, 19:59:13
Post #5





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Ok. To się zabieram do roboty.
Go to the top of the page
+Quote Post
phpion
post 2.09.2009, 20:02:22
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(scanner @ 2.09.2009, 20:58:02 ) *
Zacznij od bazy danych.
Zaprojektuj dwie tablice:
- Lokal
- Rezerwacja
będące w relacji 1 (Lokal) do wielu (Rezerwacja)

W rezerwacji oczywiście musisz pamiętać o dwu polach timestamp - "Od", "Do"

Gdy będziesz miał te tablice, pokaż co zrobiłeś i polecimy dalej.

Pozwolę sobie wskoczyć z offtopem: kurde, świetne podejście! Bardzo mi się podoba taka forma pomocy, w której mówi się człowiekowi co powinien po kolei zrobić aby osiągnąć swój cel. Może warto brać przykład ze ~scannera i również udzielać pomocy w tej formie?
Go to the top of the page
+Quote Post
sebap123
post 14.09.2009, 14:37:57
Post #7





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Dobra trochę czasu to zajęło ale udalo mi się stworzyc dwie bazy danych które są w zajemnej relacji:
Baza Domy:
składa się z pola id i nazwa

Baza Rezerwacje:
składa się z:

id
login
data od
data do
ilosc miejsc
data rezerwacji
uwagi
id_domu.

Może teraz ktoś mi pomoże z reszta bo też szukałem troche w tym czasie, żeby to samemu stworzyć ale niestety nic nie znalazłem.
Go to the top of the page
+Quote Post
f1xer
post 14.09.2009, 14:51:15
Post #8





Grupa: Zarejestrowani
Postów: 403
Pomógł: 68
Dołączył: 20.03.2008

Ostrzeżenie: (0%)
-----


Ok, to teraz możesz zaprojektować sobie formularz, z polami data przyjazdu i data wyjazdu (czyli rezerwacja od, do ). Możesz do kalendarza użyć tego pluginu do jquery: http://jqueryui.com/demos/datepicker/


--------------------
Pomogłem? wyraź to i kliknij "Pomógł"
Go to the top of the page
+Quote Post
Ociu
post 14.09.2009, 15:16:32
Post #9





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Cytat(phpion @ 2.09.2009, 21:02:22 ) *
Pozwolę sobie wskoczyć z offtopem: kurde, świetne podejście! Bardzo mi się podoba taka forma pomocy, w której mówi się człowiekowi co powinien po kolei zrobić aby osiągnąć swój cel. Może warto brać przykład ze ~scannera i również udzielać pomocy w tej formie?

Tu też brawa dla @sebap123 że nie chce pomocy typu "chce gotowca" tylko sam coś chce stworzyć własnymi siłami. To wyższy poziom niż Przedszkole, że trzeba gotowy kod dawać smile.gif

EOT.
Go to the top of the page
+Quote Post
sebap123
post 14.09.2009, 15:32:57
Post #10





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


No dobra. Dzieki za tego plugina. Tylko wiesz, gdybym wiedział jak to połączyć z php to bym tutaj nie pisał.
A tak to...

To może cos mi byś raczyl podpowiedzieć?
Go to the top of the page
+Quote Post
f1xer
post 14.09.2009, 16:09:03
Post #11





Grupa: Zarejestrowani
Postów: 403
Pomógł: 68
Dołączył: 20.03.2008

Ostrzeżenie: (0%)
-----


mówisz i masz smile.gif Zobacz plugin uzupełni ci pole tekstowe po kliknięciu submit to pole zostanie wysłane do skryptu php a tam musisz odebrać dane. Jeżeli używasz metody POST to kod będzie wyglądał mniej więcej tak:
  1. $dataod=mysql_real_escape_string($_POST['dataod']); // i w tym momencie masz datę przyjazdu
  2. $datado=mysql_real_escape_string($_POST['datado']); // i w tym momencie masz datę odjazdu
  3. // dalsze działania to np. sprawdzanie formatu i realności daty itd. a jak już wszystkie dane są ok to możesz dodać do bazy danych nowy rekork


a teraz jak użyć tego plugina:
przeczytaj dokumentację, jest tam wszystko napisane jest również przykładowy kod źródłowy.
Tak na szybko
  1. <!DOCTYPE html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Rezerwacje</title>
  5. <link type="text/css" href="sciezka/do/ui/css/smoothness/jquery-ui-1.7.2.custom.css" rel="stylesheet" />
  6. <script type="text/javascript" src="sciezka/do/jquery/jquery-1.3.2.min.js"></script>
  7. <script type="text/javascript" src="sciezka/do/ui/jquery-ui-1.7.2.custom.min.js"></script>
  8. <script type="text/javascript">
  9. $(function() {
  10. $("#dataod").datepicker();
  11. $("#datado").datepicker();
  12. });
  13. </head>
  14. <form action="rezerwuj.php">
  15. <label for="dataod">Przyjazd:</label>
  16. <input type="text" id="dataod" />
  17. <label for="datado">Wyjazd:</label>
  18. <input type="text" id="datado" />
  19. <input type="submit" value="rezerwuj" />
  20. </form>
  21. </body>
  22. </html>



--------------------
Pomogłem? wyraź to i kliknij "Pomógł"
Go to the top of the page
+Quote Post
sebap123
post 14.09.2009, 16:15:40
Post #12





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


Dzięki wielkie, narazie.
Biore się do pracy.
Go to the top of the page
+Quote Post
scanner
post 14.09.2009, 17:19:38
Post #13





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Do kalendarza to droga daleka.
IMO teraz powinieneś wrzucić do bazy jakieś lokale, i zacząć tworzyć rezerwacje, jak już będziesz umiał rezerwować lokale, musisz zacząć wprowadzać zabezpieczenia - czyli przygotować zapytania, które zweryfikują, czy dany lokal w podanym zakresie czasu nie jest przypadkiem zajęty. Do tego nie potrzebujesz kalendarzy, wystarczy php/sql i nieco testów.

Jeśli teraz zaczniesz się użerać z htmlem/js i nie daj boże z kolorkami, to polegniesz - gwarantuję.
Powód edycji: [scanner]: [scanner]: [scanner]:


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
sebap123
post 14.09.2009, 20:31:14
Post #14





Grupa: Zarejestrowani
Postów: 253
Pomógł: 1
Dołączył: 26.08.2009
Skąd: Szczecin

Ostrzeżenie: (10%)
X----


No czyli narazie napisać sam skrypt (tak już uogólniam) a potem UI. Dobrze myśle?

I takie jeszcze uwagi:
1.@f1xer
Dzięki za skrypt ale w tym projekcie bardziej mi chodzi o cos takiego, że sam uzytkownik wybiera daty na stałym kalendarzu. zaznacza dae startu i konca. Jest podzial na daty wolne i zajęte. Wiesz np. dwoma kolorami.
2.
W tym skrypcie mam nieco ulatwiona wersję bo jest tylko jeden dom. W wersji finalnej chce dac co najmniej 5. Ale myślę, że mechanizmy stworzone dla jedego (z ip 1) będą takie same jak dla domu o ip np. 4.
Go to the top of the page
+Quote Post
LifeGuard
post 7.12.2009, 07:49:57
Post #15





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 2.05.2007

Ostrzeżenie: (0%)
-----


Cytat(scanner @ 14.09.2009, 17:19:38 ) *
Do kalendarza to droga daleka.
IMO teraz powinieneś wrzucić do bazy jakieś lokale, i zacząć tworzyć rezerwacje, jak już będziesz umiał rezerwować lokale, musisz zacząć wprowadzać zabezpieczenia - czyli przygotować zapytania, które zweryfikują, czy dany lokal w podanym zakresie czasu nie jest przypadkiem zajęty. Do tego nie potrzebujesz kalendarzy, wystarczy php/sql i nieco testów.

Jeśli teraz zaczniesz się użerać z htmlem/js i nie daj boże z kolorkami, to polegniesz - gwarantuję.


Witam mam podobny problem
Tylko że u mnie chodzi o prostą rezerwację samochodów z panelu adm.

Zrobiłem dwie tabele w bazie danych:
auta:
id_auta, model, opis
wypozyczenia:
id_wypozyczenia, id_auta, od, do

if data od > teraz - rezerwacja
if data od ≤ teraz ≤ - zajęte
if data do < teraz - wolne

dobrze kombinuję? jak dalej to ugryźć?
Go to the top of the page
+Quote Post
scanner
post 8.12.2009, 00:08:16
Post #16





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Jeśli chcesz sprawdzić, czy "Dzisiaj" jest "w" jakiejś rezerwacji, to jest magiczne "BETWEEN" w SQLu:
  1. NOW() BETWEEN od AND do


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
LifeGuard
post 8.12.2009, 15:53:32
Post #17





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 2.05.2007

Ostrzeżenie: (0%)
-----


Cytat(scanner @ 8.12.2009, 00:08:16 ) *
Jeśli chcesz sprawdzić, czy "Dzisiaj" jest "w" jakiejś rezerwacji, to jest magiczne "BETWEEN" w SQLu:
  1. NOW() BETWEEN od AND do



a w jakim formacie przechowywać daty? TIMESTAMP? zależy mi na tym żeby prócz dnia była też brana pod uwagę godzina
Go to the top of the page
+Quote Post
phpion
post 8.12.2009, 15:55:14
Post #18





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




DATETIME
Go to the top of the page
+Quote Post
LifeGuard
post 13.12.2009, 13:28:55
Post #19





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 2.05.2007

Ostrzeżenie: (0%)
-----



mam taki kod:
  1. function form_dodaj_wypozyczenie()
  2. {
  3.  
  4. echo "<p align=center><u>Samochody obecnie wypożyczone:</u><br>";
  5. $cccs = mysql_query("SELECT w.id_auta, DATE_FORMAT(w.do, '%Y-%m-%d %H:%i') AS do, a.id_auta, a.model FROM w_wypozyczenia as w INNER JOIN w_auta as a ON a.id_auta = w.id_auta WHERE NOW() BETWEEN w.od AND w.do ");
  6. while ($cccsrow = mysql_fetch_array($cccs, MYSQL_ASSOC)) {
  7. $s_id_auta = $cccsrow["id_auta"];
  8. $s_do = $cccsrow["do"];
  9. $s_model = $cccsrow["model"];
  10. echo "<p id=aktualnie align=center>";
  11. echo "<b>".$s_model."</b>";
  12. echo " aktualnie wypożyczony do ";
  13. echo "<b> ".$s_do." </b><br>";
  14. }
  15. echo "<br><p align=center><u>Samochody obecnie zarezerwowane:</u><br>";
  16. $cccs = mysql_query("SELECT w.id_auta, DATE_FORMAT(w.od, '%Y-%m-%d %H:%i') AS od, DATE_FORMAT(w.do, '%Y-%m-%d %H:%i') AS do, a.id_auta, a.model FROM w_wypozyczenia as w INNER JOIN w_auta as a ON a.id_auta = w.id_auta WHERE NOW() < w.od");
  17. while ($cccsrow = mysql_fetch_array($cccs, MYSQL_ASSOC)) {
  18. $s_id_auta = $cccsrow["id_auta"];
  19. $s_do = $cccsrow["do"];
  20. $s_od = $cccsrow["od"];
  21. $s_model = $cccsrow["model"];
  22. echo "<p id=rezerwacja align=center>";
  23. echo "<b>".$s_model."</b>";
  24. echo " zarezerwowany od ";
  25. echo "<b> ".$s_od." </b>";
  26. echo " do ";
  27. echo "<b> ".$s_do." </b><br>";
  28. }
  29.  
  30. echo "<br /><form action=\"xxx.php?a=dodaj_wypozyczenie\" method=\"post\">";
  31. echo "<br><p align=\"center\"><b><u>Dodaj rezerwację:</u><b></p><br>";
  32. echo "<table table border=\"0\" width=\"500\" border=\"1\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">";
  33.  
  34. $query = mysql_query("SELECT * FROM `w_auta` ORDER BY `id_auta` DESC");
  35. echo "<tr><td width=\"200\" align=\"right\">Nazwa samochodu: </td><td width=\"300\"><select name=\"s_id_auta\">";
  36. echo "<option value=''> --- Wybierz auto --- </option>";
  37.  
  38. while ($data = mysql_fetch_array($query, MYSQL_ASSOC))
  39. {
  40. echo " <option value=\"{$data['id_auta']}\">{$data['model']}</option>\n";
  41. }
  42.  
  43. echo "</select></td></tr>";
  44. echo "<tr><td width=\"200\" align=\"right\">rezerwacja od: </td><td width=\"300\"><input id=\"date\" type=\"text\" name=\"s_od\" size=\"20\"></td></tr>";
  45. echo "<tr><td width=\"200\" align=\"right\">rezerwacja do: </td><td width=\"300\"><input id=\"date2\" type=\"text\" name=\"s_do\" size=\"20\"></td></tr>";
  46. echo "<tr><td width=\"200\" align=\"right\">klient: </td><td width=\"300\"><input type=\"text\" name=\"s_klient\" size=\"20\"></td></tr>";
  47. echo "<tr><td width=\"200\" align=\"right\">tel. do klienta: </td><td width=\"300\"><input type=\"text\" name=\"s_telefon\" size=\"20\"></td></tr>";
  48. echo "<tr><td width=\"200\" align=\"right\">uwagi: </td><td width=\"300\"><textarea rows=\"7\" name=\"s_uwagi\" cols=\"30\"></textarea></td></tr>";
  49. echo "<tr><td width=\"100%\" colspan=\"2\"><br><input type=\"submit\" value=\"Zapisz\" name=\"submit\" style=\"float: right\"></td></tr>";
  50. echo "</form>";
  51. echo "<br />";
  52.  
  53.  
  54. }
  55.  
  56. function dodaj_wypozyczenie()
  57. {
  58.  
  59. $s_id_auta = $_POST['s_id_auta'];
  60. $s_od = $_POST['s_od'];
  61. $s_do = $_POST['s_do'];
  62. $s_klient = $_POST['s_klient'];
  63. $s_telefon = $_POST['s_telefon'];
  64. $s_uwagi = $_POST['s_uwagi'];
  65.  
  66. echo "<p align=\"center\"><b>Wybierz samochod!</b><br><br><a href=\"java script:history.go(-1);\"><u>....powrót...</u></a></p>";
  67. }
  68. else {
  69.  
  70. $query = "INSERT INTO `w_wypozyczenia` ( `id_wyp`, `id_auta`, `od`, `do`, `klient`, `telefon`, `uwagi` ) VALUES ('', '$s_id_auta', '$s_od', '$s_do', '$s_klient', '$s_telefon', '$s_uwagi')";
  71. mysql_query($query);
  72. $s_id = mysql_insert_id();
  73. echo "<p align=\"center\"><b>Rezerwacja dodana do bazy</b> (".$s_id.")</p>";
  74. }
  75. }



wszystko pięknie działa, tylko chciałem stworzyć walidację zajętości danego auta w danym terminie...
tzn jeśli "id_auta" w okresie "od" do "do" jest zajęte ostrzeż i nie idź dalej...

jak to najlepiej zrobić?

Ten post edytował LifeGuard 13.12.2009, 13:31:31
Go to the top of the page
+Quote Post
piotr94
post 13.12.2009, 14:03:18
Post #20





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


a nie lepiej poprostu do bazy zapisywać do bazy datę z funkcji mktime(); -> http://pl.php.net/manual/pl/function.mktime.phpi sprawdzać poprzez ... WHERE $data_poczatku>data_poczatku AND $data_konca ... questionmark.gif


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2025 - 08:48