Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skryptu wpisywania jednokrotnie liczby
slawekjocker
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 28.03.2011
Skąd: Krk

Ostrzeżenie: (0%)
-----


Czesc prosil bym was abyscie ten skrypt: <?php
echo rand(1,100);
?>

zamienili na taki że można tylko z jednego ip 1 raz dziennie wylosować liczbę.


Pomoże ktoś?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Napisz to polsku i wykaż się wiekszą inicjatywną to na pewno ktoś Ci pomoże.

Jak można z adresu IP wylosować liczbę? Wyciągnąć losową cyfre ze stringu?


--------------------
Go to the top of the page
+Quote Post
Szymciosek
post
Post #3





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Myślę, że chodzi mu o jakieś losowanie, ale żeby nie oszukiwać za bardzo to sprawdzanie ip i dopiero wtedy wstęp na dalszy ciąg losowania:
Załóżmy, że masz przycisk LOSUJ, który po naciśnięciu wylosuje Ci daną liczbę, czyli przed tym wszystkim na początku sprawdzał bym IP, czyli za każdym razem, gdy ktoś przycisk LOSUJ sprawdzasz i zapisujesz gdzieś jego IP np do pliku, gdy IP danego użytkownika jest już na liście blokujesz mu wtedy przycisk LOSUJ, a gdy nie ma zostawiasz przycisk odblokowany. Później trzeba byłoby pomyśleć nad czymś co skasuje zawartość pliku np o godzinie 0:00.
Go to the top of the page
+Quote Post
markonix
post
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Od innej strony próbowałem rozszyfrować jego zdanie.

Szymciosek blokowanie przycisku jak najbardziej - ale tylko jako pierwsza linia ochorny.
Co do najlepszego rozwiązania zależy czy mamy do dyspozycji bazę?


--------------------
Go to the top of the page
+Quote Post
slawekjocker
post
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 28.03.2011
Skąd: Krk

Ostrzeżenie: (0%)
-----


Mysql? Tak mamy smile.gif
Go to the top of the page
+Quote Post
Sephirus
post
Post #6





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Z uwagi na to, że szukasz jakiegoś gotowego skryptu to proszę:

  1.  
  2. /* Funkcja zwraca losowy numer z zakresu 1-100. Jeśli z danego IP już otrzymano tego dnia numer - zwraca false
  3.  * (działa na zasadzie plików. Pliki te mogą służyć także jako LOG */
  4. function getRandomNumber() {
  5. $date = new DateTime();
  6. $file = 'jakis/folder/tymczasowy/' . $date->format('Ymd') . '.txt'; // nazwa pliku na podstawie danego dnia (z określonym folderem)
  7.  
  8. $number = rand(1,100); // losujemy liczbę
  9.  
  10. if(file_exists($file)) { // jeśli tego dnia ktoś już losował liczbę
  11. if(strstr(file_get_contents($file),'*' . $_SERVER['REMOTE_ADDR'] . '*') !== false) // sprawdzamy czy aktualne IP już losowało
  12. return false; // zwracamy false jeśli losowało lub zapisujemy IP aby przy następnej próbie było wiadomo że ten IP losował
  13. file_put_contents($file,'*' . $_SERVER['REMOTE_ADDR'] . '* - wylosowana liczba: ' . $number . "\n",FILE_APPEND);
  14. } else { // jesli nie ma pliku zapisujemy IP
  15. file_put_contents($file,'*' . $_SERVER['REMOTE_ADDR'] . '* - wylosowana liczba: ' . $number . "\n");
  16. }
  17.  
  18. // Zwracamy wylosowaną liczbę
  19. return $number;
  20. }
  21.  
  22. $number = getRandomNumber();
  23.  
  24. if($number === false)
  25. echo 'Losowałeś już w tym dniu liczbę!';
  26. else
  27. echo 'Twoja wylosowana liczba to: '.$number;


jest to przykładowa funkcja, która będzie Ci takie liczby generować. To jest podstawa (idea), którą możesz sobie przerabiać i rozbudowywać.

Działa na plikach, zapisuje do plików adresy IP, które już losowały i dodatkowo jaką liczbę wylosowano - tak więc mogą służyć jako coś w rodzaju LOGa. Jest to oczywiście tylko moja propozycja "na szybko" wink.gif

Skrypt można przerobić tak, że danego dnia po pierwszym wylosowaniu liczby, funkcja będzie zwracała potem dokładnie tą liczbę czyli:

1. pierwsze wejście z danego IP - losowana jest i zwracana liczba - na przykład 88
2. drugie i każde kolejne wejście tego samego dnia - zwracana jest liczba 88 (zapisana dla danego IP)

Można to także zrobić na bazie danych jak wspominali moi przedmówcy


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Szymciosek
post
Post #7





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


A jak rozwiązać kwestię czyszczenie pliku z adresów IP ?
Mi przychodzi do głowy tylko cron, albo za każdym wejściem na losowanie sprawdzanie daty ostatniego losowania i na tej podstawie czyszczenie.
Go to the top of the page
+Quote Post
Orzeszekk
post
Post #8





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


za kazdym wejsciem sprawdzanie kazdego losowania to moze troche zbyt czasochlonne.

ja bym to tak widzial. Obsluguj ten caly proces za pomocą jakiegos obiektu (i nie uzyskuj do niego dostepu innymi metodami niz ten obiekt). W konstruktorze obiektu daj takie cos (pseudokod)

if (obecnaData - dataOstatniegoCzyszczenia > 24)
{
$this->proceduraCzyszczaca();
}

i bedziesz miał takiego lazy-load crona.jesli nikt nie wejdzie na strone caly dzien to sie nie wyczysci.
ja mialem u siebie statystyki turniejów ktore wyswietlaly sie w kilku miejscach, i jesli minął czas wybrany na turniej to powinny się powyłączac - mialem do wyboru crona obslugujacego turnieje w tle lub taki lazy-loading, wybralem lazy-loading i sprawdzalo sie ok.

po prostu dane do wyswietlenia statystyk zbieralem obiektem obslugujacym caly ten proces turniejowy, i jesli przy tworzeniu obiektu proces wykryl ze jakis turniej juz sie zakonczyl to szybko dokanczal proces turniejowy itd i statystyka wyswietlala sie aktualna.

Ten post edytował Orzeszekk 10.04.2012, 23:08:45


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
slawekjocker
post
Post #9





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 28.03.2011
Skąd: Krk

Ostrzeżenie: (0%)
-----


A dalo by sie jeszce do tego skryptu dodac aby jak sie wylosuje liczbe to wyslac maila i zrobic tak aby nie mozna bylo zmienic wybranej liczby?
Go to the top of the page
+Quote Post
Szymciosek
post
Post #10





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Pewnie by się dało, do wysłania maila poszukaj formularza w php i go przerób, a jak mam rozumieć, że nie można zmienić liczby ? Przecież po naciśnięciu w przycisk LOSUJ automatycznie zostanie zrobione przekierowanie, adres IP zostanie zapisany i nikt z tego adresu nie będzie mógł losować znowu.
Go to the top of the page
+Quote Post
slawekjocker
post
Post #11





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 28.03.2011
Skąd: Krk

Ostrzeżenie: (0%)
-----


Chodzi o to ze gdy ktos wysyla mailem tą liczbę to zeby nie mogł jej w tresci maila zmienic
Go to the top of the page
+Quote Post
Szymciosek
post
Post #12





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


Myślę, że wystarczy wysłać plik czyli go wykonać z metodą POST, wtedy wszystkie zmienne przekazywane są wewnątrz skryptu (programu), może i jest na to jakaś metoda... ale zwykły Kowalski nie da rady.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 03:56