![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 20.11.2003 Skąd: Chicago Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Zabralem sie za dosc duzy projekt i jak dotychczas - bedac prawie na ukonczeniu - zazyla 8O mnie jedna sprawa. Przedstawie w skrucie dzialanie skryptu. Skrypt to tzw. 'Workbook'. Klient dzwoni - pracownik umawia go na robote i wpisuje do bazy poprzez formularz php w czasie rozmowy lub zaraz po niej. I tu problem - chce zablokowac mozliwosc wpisania 2 rekordow w tym samym czasie - gdy jedna osoba jest w trakcie pisania (nie musi jeszcze wykonywac sie proces w sql - bo to przeciez sa najwyzej sekundy), ale jezeli juz wejdzie na strone z formularzem - inna osoba dostaje komunikat (chcac cos wdytowac) ,ze jest w kolejce... Mam nadzieje, ze dobrze to wyjasnilem. Myslalem o tym, zeby zrobic to od strony MySqla - mianowicie zablokowac max procesow do 1, ale to sie wiaze z tym co opisalem powyzej - ciezko trafic na aktywny tym bardziej chcac, zeby 2 osoba zauwazyla co zostalo przed chwila wpisane. Licze na pomoc. Wielkie dzieki. ![]() -------------------- "Zadaniem zolnierza jest walczyc i wykonywac rozkazy.Zadne inne umiejetnosci nie sa od niego wymagane"
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 315 Pomógł: 1 Dołączył: 6.08.2003 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Ja bym to pokombinował z flock();
Chodzi mi o to że by formularz był w oddzielnym pliku i teraz kiedy ktoś wpisuje to zlecenie to plik ma włączony flock(), a kiedy już naciśnie wyślij i przeniesie się na następną stronę to wyłancza blokade. Ale lepiej sprawdź w manualu to co wymodziłem bo wygląda na dość niepewne rozwiązanie zwłaszcza pod win98. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 20.11.2003 Skąd: Chicago Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ja bym to pokombinował z flock();
Hmmm. Nie bardzo pasuje mi takie rozwiazanie. Wsystkie dane ida prosto do SQL, mo co kolejkowac je do pliku? Mozna wyprobowac, ale nie o to mi chodzilo.. ![]() Ma ktos jakis pomysl ciekawszy. s_w_ir - dzieki za checi. Pozdrawiam -------------------- "Zadaniem zolnierza jest walczyc i wykonywac rozkazy.Zadne inne umiejetnosci nie sa od niego wymagane"
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 315 Pomógł: 1 Dołączył: 6.08.2003 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Cytat s_w_ir - dzieki za checi.
No spoko nie ma sprawy, po prostu nic innego narazie nie przyszło mi do głowy, a pamiętam że takie rozwiązanie dał koleś w liczniku tekstowym, żeby dwie osoby naraz nie mogły otworzyć tego samego pliku a przez to "przypadkowo" nie skopać w nim czegoś(np. nie skasować wartości w nim zapisanej). Dobra mniejsza o to jeszcze coś pokminie. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 315 Pomógł: 1 Dołączył: 6.08.2003 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Mam lepszy pomysł opartry na tym co wcześniej, ale z wykorzystaniem bazy...
No to robisz sobie jedną tabele która będzie miała jeden wpis. I tak jeżeli ktoś otwiera skrypt ankiety to robisz update wpisu na dajmy na to "close" gdy ktoś kończy lub rezygnuje z wpisu robisz znowu update tym razem na "open"(albo to samo tylko że z flagą). No i chyba wiadomo że jeśli kolo wchodzi a w bazie mamy close to wyświetli mu się "poczekaj jesteś w kolejce". Wydaje mi sie to o wiele wydajniejsze, od tamtego pomysłu. Pozdro. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 20.11.2003 Skąd: Chicago Ostrzeżenie: (0%) ![]() ![]() |
Nono.To juz brzmi lepiej - nawet o tym myslalem, ale zastanawialem sie czy rozwiaze to sprawe multi-userow.Ale przeciez wszyscy korzystaja z tego samego wiec nie bedzie problemu.Siade za chwile i napisze, zobaczymy jak bedzie funkcjonowalo...
Caly czas prosze o jakies "sprawdzone" pomysly - moze ktos pisal cos takiego i jest w stanie podpowiedzies swoj - wlasnie sprawdzony sposob.Dochodzi tu jeszcze sprawa, zeby zaraz po wpisaniu przytrzymac jeszcze 20 sekunf zanim odblokujemy flage.Ale to juz chyba sprawa w sql TIME(), he ? Pozdrawiam. BTW: caly czas mecze sprawe automatycznego odswiezenia gdy ktos naciska BACK w przegladarce.Wystarczy zwykle polecenie html "content refresh"? OK. Wielkie dzieki. Podpowiadajcie ! -------------------- "Zadaniem zolnierza jest walczyc i wykonywac rozkazy.Zadne inne umiejetnosci nie sa od niego wymagane"
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Pytanie w kwestii logiczne: Dlaczego dwie osoby nie maja miec prawa do rownoczesnej pracy? W takim przypadku lepszym wydawalby sie notes (papierowy) przekazywany z rąk do rąk.
-------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 20.11.2003 Skąd: Chicago Ostrzeżenie: (0%) ![]() ![]() |
Cytat Pytanie w kwestii logiczne: Dlaczego dwie osoby nie maja miec prawa do rownoczesnej pracy?
Postaram Ci sie to jakos zrozumiale przedstawic. Co do zeszytu - to wlasnie zamieniam ten standardowy kartkowy na ten ![]() -------------------- "Zadaniem zolnierza jest walczyc i wykonywac rozkazy.Zadne inne umiejetnosci nie sa od niego wymagane"
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
Blokowanie mozliwosci pracy moze okazac sie z czasem troche niewygodnawe . Zrob moze tak: w momencie rozpoczecia pracy wpisuj do bazy rezerwacje danego terminu o ile jest wolny i nie zarezerwowany przez kogos innego, potem wypelniasz formularz i po zakonczniu wypwlniania uzupelniasz ten wiersz danymi w formularza lub kasujesz ten wiersz jak klient nagle zrezygnowal. Z kolei wada tego moze sie okazac fat robienia dziur w terminach. Innym pomyslem moze byc najpierw pobranie danych bez okreslonego terminu, i dopiero po tym przydzielenie terminu.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 20.11.2003 Skąd: Chicago Ostrzeżenie: (0%) ![]() ![]() |
OK ! Wielkie dzieki za podpowiedzi. Po zlozeniu tego co mi napisaliscie i swoim przemysleniom - opracowalem niezawodny sposob (i hope so
![]() Mniej wiecej cos takiego (prosto ale skutecznie) [php:1:0bf2df9e76]<?php $sql = mysql_query("SELECT * FROM wb_edited WHERE locked='1'"); $locked_check = mysql_num_rows($sql); if($locked_check == 0) { $sql1 = mysql_query("SELECT * FROM wb_edited WHERE data='$data' AND isEdited='0'"); $data_check = mysql_num_rows($sql1); if($data_check == 0) { mysql_query("UPDATE wb_edited SET data='$data', isEdited='1'"); mysql_query("UPDATE wb_edited SET locked='1'"); } } else { print "BUSY"; die; } ?>[/php:1:0bf2df9e76] Pozdrawiam i dzieki ![]() -------------------- "Zadaniem zolnierza jest walczyc i wykonywac rozkazy.Zadne inne umiejetnosci nie sa od niego wymagane"
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 29.06.2025 - 02:21 |