Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sprawdzanie zdublowanych danych przed wysłaniem do bazy danych
Forum PHP.pl > Forum > Przedszkole
mirobor
Witam,
Mam tabelę: films
|film_id|user_id|

Która przechowuje głosy oddane przez userów na dany film.
Userzy głosują na 10 pozycji. Jeżeli przy wysłaniu formularza nie wykorzystają 10 głosów mogą jeszcze oddać kolejne do max 10 łącznie.
Nie mogę poradzić sobie ze sprawdzeniem, czy podczas kolejnego głosowania user nie głosuje na te same pozycje, na które zagłosował wcześniej.
Na przykładzie:
Podczas pierwszego wysłania danych z formularza user_id=300 zagłosował na 3 film_id=1,5,6
Formularz ma wciąż aktywny, gdyż może oddać jeszcze 7 głosów. W jaki sposób sprawdzić, czy ponownie nie zagłosuje na te same film_id.

Pozdrawiam
nospor
A w tym polu film_id ty faktycznie trzymasz IDki oddzielone przecinkami czy moze kazdy film to oddzielny rekord?
mirobor
Oczywiście oddzielne rekordy.
|film_id|user_id|
|2 | 320 |
|3 | 320 |
nospor
No to git:
zakladasz klucz uniqe na oba pola i juz sama baza nie pozwoli ci zdublowac filmu dla danego usera.
A od biedy mozesz tez sprawdzac zwyklym zapytaniem czy dla danego usera dany film juz jest czy nie. W czym problem?
mirobor
Faktycznie o uniqe nie pomyślałem, ale tak czysto teoretycznie... jeżeli z formularza wychodzi np 8 głosów(czyli 8*film_id) to w jaki sposób skonstruować zapytanie aby każdy z nich sprawdzić pod kątem dubli z już istniejącymi dla danego usera.
Dziękuję @nospor
ziolo
A nie lepiej przy ponownym glosowaniu wyswietlac tylko te filmy w formularzu na ktore jeszcze uzytkownik nie glosowal ?

@nospor- może ale nie robimy systemu bankowego, a tutaj przy kluczu unique system po prostu takie glosy pominie i nic wielkiego sie nie stanie,
tak czy siak dla user friendly na pewno lepiej bedzie jesli ponownie nie wyswietli filmow juz ocenianych, a dodatkowe zabezpiecznie dla takiego hakera co wysle swoj request mozna zrobic opcjonalnie i wyslac mu informacje zwrotna ze nie moze czegos takiego robic
nospor
Robisz 8 oddzielny zapytan i sprawdzasz po kolei. To zadne obciążenie dla bazy.

@ziolo user moze tak spreparowac dane, ze pomimo twojego "zabezpieczenia" i tak wysle filmy, na ktory juz glosowal. mirobor robi dobrze ze chce sprawdzac.
mirobor
Otóż to. Chcę się także uchronić przed spreparowanym chceckboxem.
Jeżeli do 9 zapytań będzie ok, to w porządku.

Cytat(ziolo @ 26.05.2014, 10:20:05 ) *
A nie lepiej przy ponownym glosowaniu wyswietlac tylko te filmy w formularzu na ktore jeszcze uzytkownik nie glosowal ?

@nospor- może ale nie robimy systemu bankowego, a tutaj przy kluczu unique system po prostu takie glosy pominie i nic wielkiego sie nie stanie,
tak czy siak dla user friendly na pewno lepiej bedzie jesli ponownie nie wyswietli filmow juz ocenianych, a dodatkowe zabezpiecznie dla takiego hakera co wysle swoj request mozna zrobic opcjonalnie i wyslac mu informacje zwrotna ze nie moze czegos takiego robic

W sumie jest podobnie do tego jak napisałeś. W js napisałem prostą funkcję, która po zagłosowaniu powoduje disabled i checked dla filmów na które user już zagłosował.
Jestem mały pikuś, ale myślę sobie tak... normalni userzy zagłosują zwyczajnie i uczciwie i to dla nich powinny być jasne komunikaty. Hackerem o którym piszesz nie ma co się zajmować w kwestii komunikowania mu czegokolwiek. Spreparował chceckboxa, sprawdził, że głosy nie zostały dodane i koniec pieśni. Musi z tym żyć.
Czy może się mylę?
nospor
Cytat
Hackerem o którym piszesz nie ma co się zajmować w kwestii komunikowania mu czegokolwiek. Spreparował chceckboxa, sprawdził, że głosy nie zostały dodane i koniec pieśni. Musi z tym żyć.
No i prawidlowo. Jesli oczywiscie zalozysz te UNIQUE o ktorym pisalem jako pierwszy glowny punkt smile.gif

Sprawdzac tez mozesz jednym zapytaniem: pobierasz wszystkie filmy na jakie glosowal user (to jedno zapytanie) i sprawdzasz potem juz w php czy znajduje sie jakis co user swiezo wyslal
mirobor
Cytat(nospor @ 26.05.2014, 10:41:17 ) *
No i prawidlowo. Jesli oczywiscie zalozysz te UNIQUE o ktorym pisalem jako pierwszy glowny punkt smile.gif

Założyłem UNIQUE i rozwiązało to moje problemy. Wydaję mi się, że to wystarczy. Czy uważasz, że powinienem mimo wszystko sprawdzać to dodatkowym zapytaniem?
nospor
Jesli dla normalnych userow, nie wyswietlasz filmow, na ktore juz glosowali, to wydaje mi sie ze nie musisz.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.