![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 11.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam, w php jestem początkujący i nie znam wielu spraw. Poniższy problem już analizowałem jak sie tylko da i nic. Nie rozumiem gdzie jest błąd.
Chodzi o podwójne wykonanie skryptu. Dotyczy to komentarzy i np. głosowania. Na stronie A jest OBIEKT, który można skomentować i ocenić na + i -. Z bazy danych jest odczytywana odpowiednia wartość i wyświetlana. Głosowanie. Chcąc zagłosować np. na +. Klika się w link www.nazwa.pl/glosuj.php?id=12&akcja=plus Na stronie glosuj.php jest prosty skrypt, który ma tylko zwiększyć wartość o jeden, a czasem zwiększa o 2. Dlaczego? I to tylko zazwyczaj za pierwszym razem, bo dalej poruszając się po stronie, sytuacja się normalizuje i już działa poprawnie. Oto skrypt na stronie glosuj.php:
[/b]Nic prostszego, prawda? Więc dlaczego, gdy skrypt się wykonuje, to zamiast zwiększyć/zmniejszyć wartość w bazie danych o jeden, zmienia ją o dwie jednostki? Przy głosowaniu to tak źle nie wygląda, ale w systemie komentarzy już tak. Ponieważ dodaje mi dodatkowo jeden pusty komentarz, co już nie wygląda zbyt fajnie i estetycznie wizualnie... i go zlicza w bazie jako normalny. O co w tym chodzi? gdzie jest błąd? Przecież ze strony z OBIEKTEM przekazuję wartość id przypisująca obiekt w bazie, oraz akcje, która identyfikuje, co ma być zrobione, a pomimo prostoty, gdzieś jest zapętlenie i czasem skrypt wykonuje się podwójne?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? Dlaczego? Z góry będę wdzięczy za rozjaśnienie tej sprawy. Pozdrawiam Ten post edytował lordvanyuri 1.06.2009, 23:33:14 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 10 Dołączył: 3.09.2006 Skąd: Bishop Auckland Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Cytat CIekawi mnie co tym chcesz osiągnąć w zapytaniu. Chce inkrementować wartość w polu 'glos' o jeden. Wyobraź sobie, że w MySQL to działa. Sprawdź, jeśli nie wierzysz. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 13 Dołączył: 6.07.2008 Skąd: Nowy Sącz Ostrzeżenie: (0%) ![]() ![]() |
@lordvanyuri: kod, więcej kodu.
Tak na marginesie.. http://pl.wikipedia.org/wiki/DRY
Nie ładniej? I zabezpieczone przed sql injection nawet. Pozdrawiam. //edit: jednak godzina 02:54 sprawiła, że zapomniałem jednego cudzysłowu. Już poprawione. Ten post edytował kkuba 1.06.2009, 08:45:37 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 419 Pomógł: 42 Dołączył: 12.08.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Pytanie właściwe jak ma ustawione przekierowania o ile ma i czy ma jakiś filtr antyfloodowy lub powtórnego oddawania głosu.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 11.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
kkuba , dzięki , wkleiłem ten kod, osobiście jeszcze go nie rozumiem w pełni i dużo mi nie mówi, nie na tym etapie, wątpiłem, że będzie działał, ale działa , tylko wciąż, jeśli pierwszy raz klikam w plus, zwiększa mi o 2jednostki, a jeśłi klikam w minus zmniejsza o 2 jednostki, ale dalej już jest ok, działa o jedną, hmm.
Oto kod ze strony, na której są obiekty do oceny:
na stronie glosuj.php jest to co zaproponował kkuba i to co wcześniej zamieściłem - i wciąż przy pierwszym kliknięciu nalicza podwójnie. I jak to wygląda? pewnie zalatuje grafomanią. Ten post edytował lordvanyuri 1.06.2009, 23:34:01 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
weź to daj w tagi php, bo nie idzie tego czytać
co do problemu.... to lepiej zrób sobie na sesjach czyli na samym początku dajesz
i po dodaniu rekordu dajesz
no i rekord ma sie dodawać tylko wtedy gdy time() jest większe od $_SESSION['time'] np o 30 sekund, zrobisz to za pomoca if'a w podobny sposób
Ten post edytował peter13135 1.06.2009, 14:49:21 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 419 Pomógł: 42 Dołączył: 12.08.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Chyba trochę Peter przesadziłeś z wyjaśnieniem tej sesji komuś kto wygląda jakby nic nie rozumiał (co widać po tym jak wstawia kod na forum).
Lord wrzuć oba pliki - tylko CAŁE: 1. ten który wyświetla linki do głosowania czy czego tam 2. to co przyjmuje dane by zagłosować Powtarzam...CAŁE (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 11.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ok, więc nadrabiając zaległości (już wrzucę kod w tagach)
kod na stronie pytanie.php:
wyświetlenie pytania o konkretnym id i poniżej tego dwie akcje, głos na plus i na minus. Poniżej też są komentarze, ale jak się w głosowaniu wyjaśni dlaczego się podwójnie wykonuje, to będzie podobnie w komentarzach. Po kliknięciu na jedną z akcji, plus lub minus przechodzi się na strone glosuj.php, gdzie jest tylko mały fragment w php:
To jest mały portalik, na podstawie którego chce się nauczyć PHP, ale nie mogę przejśc dalej jak ten szczegół siedzi mi na głowie. Najczęściej zdarza się podwójne nabicie, głosu czy też komentarza przy pierwszej podjętej akcji, dalej odbywa się to normalnie. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 17:55 |