wallace
20.10.2003, 14:14:49
mam taki o to problem ... jest sobie baza danych X i tam tablica A i B... w tablicy A mam identyfikator zdjecia i liczba glosow na nie oddanych, natomiats w tablicy B ip osoby ktora oddala glos... jesli dana osoba odda glos na dane zdjecie w tablicy A zwieksza sie dla danego zdjecia o danym id liczba glosow o 1 ... natomiast do tablicy B dopisywany jest ip danej osoby ktora zaglosowala ... w nastepstwie jesli dana osoba chce zaglosowac jeszcze raz przed oddaniem glosu kolejnego sprawdzam czy w tablicy B istaniej ip danej osoby ... jesli tak to nei powinno to sie jej udac ... a problem tkwi w tym, ze jelsid ana osoba glosuje pierwszy raz i wcisnie po kliknieciu na link 'zaglosuj' kilkanascie razy 'odswierz' to zliczy jej dodatkowe glosy ... jak sie przed tym ustrzec ? mam nadzieje, ze w miare zrozumiele opisalem problem :-) mam cos kombinowac z funkcja flush? dzieki za odpowiedz z gory :-)
PMadej
20.10.2003, 16:31:53
zrób tak że formularz który służy do głosowania będzie w jednym pliku powiedzmy plik1.php a będzie się on odnosił do drugiego powiedzmy plik2.php. W drugim pliku będzie skrypt który ma aktualizować bazę danych i nic nie wyświetlać i tam po aktualizacji bazy danych dodaj linijkę:
[php:1:7ff26e336e]<?php
header('Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/plik1.php");
?>[/php:1:7ff26e336e]
użytkownik nawet nie zauważy tego, że została otworzona nowa strona a głos zostanie naliczony tylko jeden
wallace
20.10.2003, 18:01:27
wlasnie cos w tym rodzaju mam teraz, a i tak nie dziala dokonca tak jak powinno ... mecze siem dalej .. dzieki :-)
jono
21.10.2003, 07:14:57
[php:1:90de7f80ac]<?php
if(!$_COOKIE['juzbyl']){
// wsadzanie do bazy
setcookie('juzbyl', TRUE);
}
header('Location:
http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/plik1.php");
?>[/php:1:90de7f80ac]
Jeżeli korzystasz z sesji, lepiej zapisz w sesji, bo nie każdym ma cookies..
wallace
21.10.2003, 19:56:52
no cookies to nienajlepszy w tym przypadku pomysl ... natomiast sesje? a czy dana sesja nie znika po jakims okreslonym czasie ? hmmm .. poczytam :-)
w kazdym razie po przeslaniu w miejsce docelowe dziala mi juz (chyba ;-)) dzieki za odpowiedz :-)
a nie mozesz przy dodawaniu sprawdzac czy dane ip juz glosowalo i jezeli tak, to nie dodawac glosu?
nie rozumiem problemu...
jono
27.10.2003, 14:26:20
chodzi o ludzi ze zmiennym IP

Ale Myślę, że powinieneś zrobić tak:
1) Zapisz IP do bazy
2) Spróbuj zrobić cookie
No i to powinno załatwić 90% petentów
wallace
28.10.2003, 22:54:46
zle mnie zrozumieliscie ... przy robieniu "flooda" na skrypt zliczajacy glosy wykonujac skrypt za pierwszym razem dodawal glos, a nie zdazyl wpisac do bazy, ze juz taki ktos gloswal jak drugi raz wywolany ten sam skrypt dodawal kolejnby glos ... tak to sobie tlumacze ... lokalnie na kompie cos takiego wsytepowalo ... jak wyslalem w miejsce docelowe juz bylo ok ...
z drugiej strony o ile wiem jak to wszystko dziala nei powinno sie tak dziac... chociaz ...
z innej strony widzialem gdzies w manulu jakas funkcje opozniajaca o x sekund lub milisekund wywolanie skryptu przez danego uzytkownika... ale to bylo dawno i nie ejstem pewien czy nei mam jakis zwidow ... tym bardziej, ze manualu nie moge znalesc tej funkcji... pozdrawiam
adwol
28.10.2003, 23:04:31
[php:1:8bb0cb11c8]<?php
ignore_user_abort(true);
?>[/php:1:8bb0cb11c8]
To Ci spowoduje, że skrypt wykona się do końca nawet jak w połowie przeglądarka rozłączy się z serwerem (co ma miejsce gdy ktoś szybko naciśnie przycisk ,,Refresh''). W tym momencie masz pewność, że skrypt wykona wszytkie instrukcje włącznie z zapisaniem w bazie, że z tego IP już głosowano.
Kinool
28.10.2003, 23:18:58
zasadnicze pytanie czy masz baze userow

tzn czy glosowanie na twojej stronie jest anonimowe czy trzeba sie zalogowac i wtedy glosowac?? jezeli masz baze userow to ja rozwiazalem to tak: w tabeli np. grafika mam kolumne glosy_od i wpisujesz tam np. id uzytkownika jaki oddal glos oddzielasz je np ":" po to zeby potem zrobic exploda i miec tablice z uzytkownikami ktorzy juz glosowali jesli to masz to robisz porownanie z z danymi z formularza tzn. sprawdzasz czy dany id usera (jaki wyslal glos) isnieje w tablicy (np. poprzez in_array() ) jesli tak to wyswietlasz mu stosowny komunikat jasli nie to zaliczas glos i wpisujesz id useraz w glosy_od
no jesli nie uzywasz logowani i kazdy moze glosowac to boze by bylo zeby np. ludzie ze zmninnym IP byli jakos filtrowani to zapisac IP i np. wersje systemu jak uzywa potem porownac IP jesli jest istnieje w bazie to sprawdzic czy wersja przegladrki i systemu jest taka sama jak w bazie jesli tak to jest wieksze prawdopodobienstwo ze ta osoba nie glosowala.
przechowuwani w cooki ma wile wad (usuniecie cooki lub wylaczenie jego w przegladarce) powoduje ze mozna nieskonczenie wiele razy oddawac glos, wiec jesli zalezy ci na tym aby glosy sie nie powtarzaly to nie mozesz tego przechowywac na kompie klienta
wallace
29.10.2003, 08:36:33
adwol dzieki :-) wlasnie o to mi chodzilo :-) pisze chyba zbyt filozoficznym jezykiem aby byc dobrze zrozumianym ;-)
uwazam temat za zamkniety :-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.