Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sprawdzanie co minutę
Forum PHP.pl > Forum > Gotowe rozwiązania > Skrypty forum
Biqs
Witam
Chcę zrobić konkurs w którym wygrywa co minutę jedna osoba. Osoby się zgłaszają, a w momencie wybicia kolejnej minuty 00s wybierana jest osoba która zgłosiła się pierwsza w poprzedniej minucie i tak cały czas. Strona osoby odświeża się co minutę, wystarczy że będzie czekać, aż wszyscy przed nią wygrają i ona będzie kolejna. Do tej pory jest tak, że osoba wygrywa, a kolejna za nią wygrywa w następnej minucie, lecz okazuje się, że nie wszyscy czekają do końca i miejsca rezerwowane dla następnych zostawały bez zwycięzców. Chciałbym by zostało przesuwanie miejsc co minutę o 1 wyżej, ale jakoś by prócz zwycięzcy, te puste też znikały co minutę. Teraz jest użyta baza w której jest zapisywany czas i sesja w momencie startu, a odświeżanie strony co minutę sprawdza, czy wpis jest już pierwszy. Pewnie są lepsze rozwiązania, z góry dzięki.
karolbiegan
To coś na zasadzie za10groszy, czyli im więcej osób tym mniejsze szanse na wygrana
Biqs
Nie. za10groszy, to aukcja i tam prócz kolejności są porównywane wielkości stawek. U mnie każdy będzie wygrany, chcę tylko uniknąć sytuacji aby w tym samym czasie (w danej minucie) nie było 2 osób jednocześnie. Jeśli by coś takiego właśnie było, to pierwsza osoba będzie w tej minucie, a druga (lub więcej) w następnych. Jesteś w stanie mi pomóc?
!*!
Od takich rzeczy są websocety
Biqs
Na tym się nie znam :/
Może coś w stylu;

1. Sprawdź czy jest wpis na liście.
2. Jeśli nie ma - wpisz.
3. Jeśli jest - sprawdź czy jest 1, porównując z ostatnim wygranym (+60s).
4. Jeśli wpis jest 1 - zapisz zwycięzcę i skasuj pozostałe wpisy.
5. Jeśli nie jest 1 - czekaj do kolejnego odświeżenia strony.

Wówczas kasować się też będą wpisy osób, które zrezygnowały z czekania.
Ale jak to zastosować w kodzie najlepiej?
!*!
Tylko tak nie wyeliminujesz osób które przestały czekać, ws załatwia ten problem jak i parę innych. A jeśli ktoś sobie pójdzie, to nawet gdy czas nie będzie się zgadzał, to co w przypadku jak będzie miał laga i nie odpyta serwera?
Biqs
Odświeżenie minutowe każe wszystkim czekać, a kasowanie listy zwalnia miejsca. Gdy ktoś ma laga, wróci i wykryte będzie że nie jest na liście, więc przejdzie wszystko jeszcze raz. Szukana musi być tylko pierwsza osoba, a jej kolejność to porównanie z ostatnią jaka wygrała, inni zostaną skasowani, nawet jak będzie ich 100 nie będzie to miało znaczenia, bo szukana musi być tylko 1 osoba. Cierpliwi doczekają się. Ale do moja wizja, pewnie gdybym się lepiej znał, znalazłbym lepszą
kapslokk
Nie rozumiem jednego - dostałeś info, że najlepiej będzie użyć websocketów, dla czego po prostu ich nie wykorzystasz, tylko brniesz dalej w jakieś cuda?

Argument "Na tym się nie znam :/" mnie osobiście nie przekonuje. Zawsze możesz się "na tym poznać", a serio nie zajmie Ci to dużo czasu.
Biqs
Nie wiem na wet za co się zabrać. Troszkę ciśnie mnie termin, czas do końca m-c mam. Myślałem że tu znajdę jakieś rozwiązanie kodowe. Gdy już to będzie, to będę miał czas na spokojnie się edukować. Jestem samoukiem, moja nauka polega na próbach i błędach, przy tak ograniczonym czasie staram się dopasować swoją wiedzę by zmieścić się z wykonaniem.

Tu zwyczajnie są lepsi ode mnie i dlatego się do nich zwracamy, ci którzy zadają pytania. Są tacy jak ja, co się uczą, ale napotykają problem i szukają lepszych rozwiązań od tego co wymyślili smile.gif A są tacy, co chcą mieć tylko gotowce za każdym razem. Jeśli ktoś chciałby przetłumaczyć coś z japońskiego, można mu powiedzieć, naucz się go smile.gif I nawet jak jest w trakcie nauki, to jeszcze nie doszła do tych słów, a mimo to potrzebuje to wiedzieć wcześniej. Staram się coś zrobić, by działało, a później w między czasie zmieniać, ulepszać, dodawać. Więc jeśli są chętni by podać instrukcję do zastosowania, to chętnie skorzystam z ich wiedzy, ale jeśli nic tu nie osiągnę, nie będę miał wyjścia i będę musiał użyć tej mojej "prymitywnej" dla niektórych wiedzy. Każdy w czymś jest dobry i każdy może pomóc.

----------

Poradziłem sobie z tym problem, choć zakładałem że jest tu zapisanych więcej niż 3 osoby. Ale podejmę jeszcze jedną próbę uzyskania pomocy i sprawdzę czy fora są pomocne. Mam teraz problem z "nowszą wersją PHP", a dokładnie chodzi o logowanie mysql, a mysqli
Do tej pory stosowałem np.
$connection = mysql_connect('server','osoba','hasło'); $db = mysql_select_db('baza', $connection);
Muszę to przekształcić na mysqli, tak by działało w tej formie j/w. Na tą chwilę działa, ale jak jest więcej połączeń, czy pętli, to wyświetla, brak połączenia z serwerem.
Serwer mam darmowy i będę brał płatny, jeśli to wina serwa, to ok, ale jeśli wezmę płatny, a będzie ten sam problem, to chcę mieć go wcześniej z głowy.
Od wersji 5 to chyba jest, a ja mam już min. 5.2 wstecz do ustawienia.

Najlepiej będzie chyba zastosować nową komendę, ale tak by to działało. Owszem próbowałem ją użyć, ale uczę się na błędach i nie mogę tego przeskoczyć, przy nowej komendzie wyskakuje mi albo brak dostępu do serwera, albo bazy sad.gif

Ktoś pomoże, czy mój wpis nada się tylko do skasowania?
mlawnik
Darmowy serwer wystarczy. Mysqli_* używa się podobnie jak mysql_*, przy czym parametry trochę się różnią.

Tutaj manual, wraz z przykładami:
http://php.net/manual/en/book.mysqli.php

A na później masz jeszcze hasło "PDO" (inny sposób łączenia się z bazą, trochę bardziej rozwinięty).
Biqs
U siebie stosowałem 3 parametry w 1, tam są 4 i jak je używam to ciągle coś nie tak działa. Mógłbyś mi "przekształcić" tą komęde połączenia co podałem na tą nową? Proszę
Zwykle stosuję zapytanie połączone z pętlą, np.
$wynik = mysql_query('select * from tabela');
while ($txt = mysql_fetch_assoc($wynik))
i tu siadam bo zapytanie jest w starej formie i nie umiem wpleść nowej.
Ja wiem że to amatorsko brzmi, ale geniuszem nie jestem i się przyznaję smile.gif
Pyton_000
Na początek zrób replace "mysql_" na "mysqli_" i popraw to co się wysypało.
Biqs
Nie umiem sad.gif
Warning: require_once(EasyMySQLi.inc.php): failed to open stream
Fatal error: require_once(): Failed opening required 'EasyMySQLi.inc.php' (include_path='.:/opt/php-5.5/pear')
Warning: mysqli_connect(): (HY000/2005): Unknown MySQL server host
Fatal error: Call to a member function querySingleRow() on a non-object
Fatal error: Class 'EasyMySQLi' not found
Na serwie ustawione jest 5.5
Chcę tylko by to połączenie było i umieć zadać zapytanie, bo pewnie też jest w jakiejś innej formie teraz. Aktualnie mam tak
$connection = mysql_connect('host','user','pass');
$db = mysql_select_db('baza', $connection);
i potem jest zapytanie w pętli, np.
$wynik = mysql_query('select * from tabela');
while ($txt = mysql_fetch_assoc($wynik)) {...}
Czy mógłbyś to zamienić po nowemu, wtedy bym wstawił i może by zadziałało, bo moje próby nie idą
viking
Wszystkie jest dokładnie opisane w komunikatach.
Nie można wczytać pliku EasyMySQLi.inc.php
Dalej niepoprawny host mysql.
Reszta to następstwo tych dwóch.

Tutaj masz jak to zrobić w PDO.
com
I jak mamy Ci pomóc to potrzebujemy kod, ale lepiej już jak masz to pisać od nowa użyć sugerowanego PDO smile.gif
Biqs
Chcę tylko przekształcić ten kod który podałem, reszta to standardowe komendy. Z tych dotyczących bazy jest tylko INSERT, DELETE, itp., np.
mysql_query("INSERT INTO tabela SET .....");
Jak to będzie działać, to będę robił nową stronę, już na spokojnie i wtedy będę się uczył zastosować PDO, tak jak piszesz - zrobię od nowa. Wciąż dołączają się osoby i to stale chodzi ( jak jest dostęp smile.gif ), dlatego chcę tylko to utrzymać zanim się nauczę na swoich błędach. Proszę tylko zamienić samo połączenie, bo zanim zrobię nowe, to trochę zajmie, a nie chcę pracy półrocznej zaprzepaścić teraz swoją niewiedzą. Ale już od tego m-c zajmę się uczeniem tego, by zrozumieć to przekształcenie, jeżeli je dostanę od was.
mlawnik
Cytat(Biqs)
Proszę tylko zamienić samo połączenie, bo zanim zrobię nowe, to trochę zajmie, a nie chcę pracy półrocznej zaprzepaścić teraz swoją niewiedzą. Ale już od tego m-c zajmę się uczeniem tego, by zrozumieć to przekształcenie, jeżeli je dostanę od was.


Dział zlecenia może będzie bardziej odpowiedni?


Kod "mysql_*":
  1. <?php
  2.  
  3. $connection = mysql_connect('host','user','pass');
  4. $db = mysql_select_db('baza', $connection);
  5. $wynik = mysql_query('select * from tabela');
  6. while ($txt = mysql_fetch_assoc($wynik)) {...}
  7.  


Kod "mysqli_*":

  1. <?php
  2.  
  3. $conn = mysqli_connect("ip serwera", "użytkownik", "hasło", "nazwabazy");
  4. $query = mysqli_query ( $conn , 'select * from tabela');
  5. $wynik = mysqli_fetch_assoc ($query);
  6. while ($txt = mysqli_fetch_assoc($wynik)) {...}
Biqs
Wybrałem Gotowe rozwiązania>Skrypty, bo myślałem że to dobre.
Dziękuję Ci bardzo za pomoc, teraz nawet jak mi nie zadziała, będę miał już podstawy by kombinować, ale sądzę że wszystko będzie dobrze.
Jak się to widzi, to wydaje się logiczne i proste. Jeszcze raz dziękuję.
mlawnik
Cytat
Wybrałem Gotowe rozwiązania>Skrypty, bo myślałem że to dobre.


Nie zauważyłem, mój błąd. :/
Twoja wypowiedź została przeze mnie odczytana jako chęć otrzymania gotowca.
Polecam czytanie manuala, tam wszystko jest wytłumaczone.
Najbardziej pasujący byłby dział Przedszkole albo PHP wink.gif


Masz rację, jak się zobaczy przykład to lepiej niż kombinować samemu, ale takie kombinowanie samemu też uczy, zwłaszcza jeżeli dostajesz hasła-wskazówki gdzie szukać.
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-2024 Invision Power Services, Inc.