![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 15.01.2012 Ostrzeżenie: (0%) ![]() ![]() |
Problem jest taki. W jaki sposób mogę zabezpieczyć taka sytuacje:
Mam tabele z produktami i przypisane do nich ID. Dodatkowo mam tabele z rezerwacjami gdzie kluczem obcym jest ID Produktów. Jak rozwiązać sytuacje, żeby można było wykonać rezerwacje na dany produkt maksymalnie raz w miesiącu. Cos na zasadzie, że jeśli pójdzie INSERT do tabeli z Rezerwacjami to należy sprawdzić czy przypadkiem w tym miesiącu dany produkt nie był już rezerwowany i w razie konieczności zwrócic odpowiedni komunikat. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Trzeba zapisać datę rezerwacji, a przed dodaniem nowego rekordu dla tego produktu sprawdzać, czy dany miesiąc się już skończył, czy jeszcze nie.
Oczywiście wcześniej trzeba sprawdzić, czy określony produkt był dodany w danym miesiącu. Ten post edytował mortus 19.12.2012, 13:53:27 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 15.01.2012 Ostrzeżenie: (0%) ![]() ![]() |
No tak w tabeli Rezerwacji przechowuje data. Pytanie brzmi JAK to sprawdzać. Jakaś procedura po stronie bazy czy może po stronie kodu php.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Zapytaniem z poziomu PHP:
gdzie: :ID - id produktu, :YEAR - date('Y', time()) :MONTH - date('m', time()) Jeżeli powyższe zapytanie zwróci cokolwiek, to w danym miesiącu produkt o id :ID był już rezerwowany. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 15.01.2012 Ostrzeżenie: (0%) ![]() ![]() |
Zapytaniem z poziomu PHP:
gdzie: :ID - id produktu, :YEAR - date('Y', time()) :MONTH - date('m', time()) Jeżeli powyższe zapytanie zwróci cokolwiek, to w danym miesiącu produkt o id :ID był już rezerwowany. Rozwiązanie wydawało się być ok. Ale w "praniu" wyszła jego niedoskonałość. Problem się pojawia jak ktoś rezerwuje datę z nie aktualnego na daną chwilę miesiąca. A więc przykładowo jeśli ktoś nie rezerwował daty w grudniu, to może tak na prawdę zarezerwować mi cały styczeń. Mi zależy na tym aby konkretna osoba mogła w miesiącu dokonać tylko JEDNEJ rezerwacji. Niezależnie na jaki termin (aktualny czy bardzo odległy). Takie zabezpieczenie do nietworzenia fikcyjnych rezerwacji. Ma ktoś jakieś pomysł na modyfikacje tego zapytania do bazy? Bądź może jakaś sugestia co do napisania jakieś procedury po stronie bazy (niestety nigdy tego nie robiłem). |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem, w jakim formacie przesyłasz datę, ale w powyższym zapytaniu wiąże się to jedynie z zastąpieniem funkcji time(). Zatem:
:MONTH - date('m', strtotime(DATA_REZERWACJI)) :YEAR - date('Y', strtotime(DATA_REZERWACJI)) DATA_REZERWACJI - $_POST['data_rezerwacji'] |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 15.01.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie, ten sposób jest ok. Wczoraj już na niego wpadłem i działa w porządku.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 11:26 |