![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie. Chciałbym napisać skrypt, który mógłbym używać podczas sędziowania pojedynków w armwrestlingu. Rozpisywanie wszystkiego na papierze jest męczące, a poza tym chciałbym poćwiczyć trochę PHP. Sam skrypt powinien losować pary do walki i uwzględniać możliwe błędy i zliczać punkty. Po kliknięciu przy nazwisku danego zawodnika skrypt powinien przyznać mu punkt i dokonać kolejnego losowania. Problem jest jednak zupełnie inny.
Chyba najbardziej oczywistym rozwiązaniem jest utowrzenie pętli, która będzie losowała pary, jednak nie chcę, żeby wylosowane pary pojawiły jako lista, a pojawiła się jedynie wylosowana para. Po walce klikałbym na przycink obok nazwiska zwycięscy. Skrypt dodałby punkt tej osobie a następnie dokonywałby ponownego losowania. Mógłby ktoś udzielić mi jakiś wskazówek, jak to zrobić? Ten post edytował Testosteron 9.02.2014, 15:12:18 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 731 Pomógł: 141 Dołączył: 9.05.2011 Skąd: śląskie Ostrzeżenie: (0%) ![]() ![]() |
Jeśli mają być wylosowane pary spośród wszystkich zawodników przed rozpoczęciem rozgrywek, to wykonujesz takie losowanie raz na początku a następnie każde kolejne odświeżenie strony podaje Ci kolejna parę. W przypadku, gdy ma być wylosowana tylko jedna para to losowanie powtarzasz z każdym odświeżeniem strony.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
A czy za każdym odświerzeniem strony nie będzie trzeba potwierdzać ponownego wysłania formularza? Wolałbym tego uniknąć. Poza tym jak w takim przypadku różnicować dane, wysyłane po naciśnięciu przycisku? Tzn. w zależności od tego kto wygrał walkę, klikam inny button i wysyłane są inne wartości. Myślałem, że można to zadanie rozwiązać ręcznie, tzn. zamiast submita dać jakąś grafikę i kolejna para byłaby losowana od razu po wyświetleniu pierwszej pary a skrypt modyfikowałby jedynie adres do którego odsyła strona, np. jeden adres mógłby wyglądać tak:
Drugi natomiast
Skrypt na samym początku sprawdzałby kto wygrał i zapisywał wyniki w pliku, a następnie losował kolejną parę. Wydaje mi się, że takie rozwiązanie mogłoby przejść, chociaż raczej nie jest optymalne i jednak wolałbym wysyłać dane metodą POST. Tym bardziej, że ze skryptu będą prawdopodobnie korzystać też inne osoby. Ten post edytował Testosteron 9.02.2014, 18:17:37 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 731 Pomógł: 141 Dołączył: 9.05.2011 Skąd: śląskie Ostrzeżenie: (0%) ![]() ![]() |
A czy za każdym odświeżeniem strony nie będzie trzeba potwierdzać ponownego wysłania formularza? Wszystko zależy od tego jak to technicznie zrobisz (oprogramujesz), jak chcesz aby działało. Generalnie, nie jest to konieczne. Cytat(Testosteron) Poza tym jak w takim przypadku różnicować dane, wysyłane po naciśnięciu przycisku? Tzn. w zależności od tego kto wygrał walkę, klikam inny button i wysyłane są inne wartości. Np.: korzystając z $_GET, w zależności kto wygrał link będzie miał inną zawartość. Używając $_POST z formularzem, możesz użyć radio button. Cytat(Testosteron) Myślałem, że można to zadanie rozwiązać ręcznie, tzn. zamiast submita dać jakąś grafikę i kolejna para byłaby losowana od razu po wyświetleniu pierwszej pary a skrypt modyfikowałby jedynie adres do którego odsyła strona... AJAX, i będzie jak sobie życzysz (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Po co AJAX? Skleciłem prosty skrypt. Może zawierać błędy, ponieważ napisałem go na szybko, ale sam zamysł powinien być widoczny:
Co myślisz o takim sposobie rozwiązania tego problemu? Zda egzamin w praktyce? @Edit Jednak coś nie gra. Dopisałem jedną linijkę, która wyświetla imię zwycięscy. Skrypt zachowuje się jak chce. Czasami wszystko jest ok, a za chwilę pomija linijkę dotyczącą wyświetlenia imienia zwycięscy. Wtedy też przy odświeżaniu strony, imiona zawodników zmieniają się. Nie powinno do tego dochodzić, jeśli adres jest ten sam. Wie ktoś jaka może być przyczyna? Ten post edytował Testosteron 9.02.2014, 20:22:27 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 3 Dołączył: 23.07.2009 Ostrzeżenie: (10%) ![]() ![]() |
To losowanie nie jest zbyt poprawne np. możesz wylosować kilka razy tego samego zawodnika. W najgorszym przypadku będziesz miał pary typu Sylwek z Sylwek i Sylwek z Sylwek. Ja bym ustalił na sztywno, że 0 gra z 1, 2 z 3 itpd. I mieszał tablicę. Że raz Sylwek jest jeden, a innym razem Kacper.
Kod <?php for( $i = 0; $i <rand(0, 5); $i++ ) { $wylosowanyindeks=rand(0,4) $wstawdo=rand(0,4) $bufor=$pary[$wstawdo]; $pary[$wstawdo]=$pary[$wylosowanyindeks]; $pary[$wylosowanyindeks]=$bufor } ?> System punktowania też można w formie tablicy. Gracz | punkty | czy wygral? ------------------ Sylwek | 0 | tak (+1) -------------------- Ten post edytował Martin-ZG 10.02.2014, 19:14:49 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Tak jak pisałem, to był jedynie szkielet skryptu. Problem był zupełnie inny - w momencie, kiedy został wylosowany zawodnik o indeksie 0, skrypt zaczynał się sypać, np. podczas odświeżania strony następowało ponowne losowanie zawodników co nie powinno mieć miejsca. Nie mam pojęcia dlaczego skrypt reagował w ten sposób, ale trochę go przebudowałem. Tylko, że podczas uruchamiania pliku walka.php pojawiało się ostrzeżenie, że zmienna $win nie ma przypisanej wartości. Dlatego stłumiłem to ostrzeżenie, chociaż nie wiem, czy nie będzie to miało wpływ na stabilność skryptu, kiedy zostanie udostępniony.
Ten post edytował Testosteron 10.02.2014, 19:32:22 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 3 Dołączył: 23.07.2009 Ostrzeżenie: (10%) ![]() ![]() |
Przy odświeżaniu strony skrypt zaczyna się od nowa. Takie uroki php. Żeby zapamiętać stany zmiennych trzeba użyć cookies, albo sesji, no albo bazy danych. Jeżeli chodzi o to ostrzeżenie, to nie powinno być kłopotów, ale dobry zwyczajem jest ustalać wartości początkowe.
Ten post edytował Martin-ZG 10.02.2014, 19:33:28 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jak mogę ustalić wartość początkową, skoro jeszcze nikt nie wygrał walki?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 3 Dołączył: 23.07.2009 Ostrzeżenie: (10%) ![]() ![]() |
W uproszczeniu skrypt php przy wejściu na stronę uruchamia się i zaczyna wykonywać instrukcję i po ostatniej się kończy i przestaje działać. To nie jest program działający, aż do chwili zamknięcia go przez użytkownika.
Jak mogę ustalić wartość początkową, skoro jeszcze nikt nie wygrał walki? Jak rozumiem $win wskazuje kto wygrał. Na początku nikt nie wygrał, więc $win='', a później $win='a' albo $win='b'. "Nikt " to też jest jakiś początkowy stan. Ten post edytował Martin-ZG 10.02.2014, 19:44:15 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Cytat W uproszczeniu skrypt php przy wejściu na stronę uruchamia się i zaczyna wykonywać instrukcję i po ostatniej się kończy i przestaje działać. To nie jest program działający, aż do chwili zamknięcia go przez użytkownika. Nie za bardzo rozumiem Twoją wypowiedź. Na wejściu skrypt wyświetla zawodników i generuje odpowiedni odnośnik. Kiedy jeden z zawodników wygra, klikam na link i skrypt wykonywany jest ponownie, czyli w tym zakresie spełnia swoje zadanie. Cytat "Nikt " to też jest jakiś początkowy stan. No w sumie tak, ale pierwsza instrukcja warunkowa rozwiązuje ten problem. Sprawdza, czy zmienna $a i $b są puste, czyli nie zostali jeszcze wylosowany zawodnicy (co ma miejsce jeśli żadne walki nie zostały jeszcze przeprowadzone). Jeżeli taka sytuacja ma miejsce, losuje się zawodników i rozpoczyna swoje właściwe działanie. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 3 Dołączył: 23.07.2009 Ostrzeżenie: (10%) ![]() ![]() |
Cytat Nie za bardzo rozumiem Twoją wypowiedź. Na wejściu skrypt wyświetla zawodników i generuje odpowiedni odnośnik. Kiedy jeden z zawodników wygra, klikam na link i skrypt wykonywany jest ponownie, czyli w tym zakresie spełnia swoje zadanie. No w sumie tak, ale pierwsza instrukcja warunkowa rozwiązuje ten problem. Sprawdza, czy zmienna $a i $b są puste, czyli nie zostali jeszcze wylosowany zawodnicy (co ma miejsce jeśli żadne walki nie zostały jeszcze przeprowadzone). Jeżeli taka sytuacja ma miejsce, losuje się zawodników i rozpoczyna swoje właściwe działanie. Po prostu pisałeś, że po odświeżeniu strony następowało losowanie zawodników. Dzieje się tak ponieważ skrypt rozpoczął się od nowa. To jest dobry przykład dlaczego dobrym zwyczajem jest wpisywanie wartości początkowych. Mnie uczono, że nigdy nie ma pustych zmiennych. Zmienna bez wartości początkowej przechowuje nie wiadomo co. I jak to sprawdzasz np w if, to mogą dziać się dziwne rzeczy. Zadziała mimo, że nie powinien. Ten post edytował Martin-ZG 10.02.2014, 20:09:20 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Tak, ale skrypt losuje jedynie zawodników do następnej rundy, a wyświetla tych z pasku adresu. Tak więc, jeśli adres jest ten sam to przy odświeżaniu nie powinno się nic dziać. Zresztą problem występował WYŁĄCZNIE, kiedy został wylosowany zawodnik o identyfikatorze 0. W innym przypadku wszystko działało w porządku. Przerobiłem skrypt (kod podawałem wyżej) tak, żeby zawodnicy mieli identyfikatory wyłącznie powyżej zera i wszystko śmiga (IMG:style_emoticons/default/oneeyedsmiley02.png) . Z czego to może wynikać?
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 3 Dołączył: 23.07.2009 Ostrzeżenie: (10%) ![]() ![]() |
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 2 Dołączył: 15.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Faktycznie, dzięki
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 17:43 |