Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt uruchamiający się w dni robocze o 17
Forum PHP.pl > Forum > Gotowe rozwiązania
VirgoPl
Hej pisze fajną stronę dla szkoły i mam zamiar wprowadzić codzienne losowanie na niej numerka niepytanego co zwiększy ruch na stronie. Powiedzmy że skrypt losowania dam radę ogarnąć ale uruchamianie go o danych godzinach średnio. Więc wszystko ma wygladac tak że na stronie dzień wcześniej czyli dla poniedziałku w niedzielę o 17 będą miały być losowane dwa numery z zakresu 1-32 i wyświetlane na stronie do następnego losowania. Jak to ogarnąć ?
Forti
CRON

Lub po prostu gdy strona sie ląduje sprawdzaj godzinę i jezeli 17 to loduj liczbe i ja zapisuj w bazie wraz z data. Sprawdzaj czy data jest dzisiejsza aby jej nie nadpisać inna.
VirgoPl
CRON odpada mam ograniczone możliwości a do tego sprawdzania pomoglbys mi to ogarnąć jakoś ? Jakiś kodzik czy coś i czy jest możliwość by zapis był do pliku i sprawdzanie też z pliku a nie z bazy ? Administrator (tzn nauczyciel infy) w naszej szkole woli proste rozeiazania bez baz
Aqu
  1. Administrator (tzn nauczyciel infy) w naszej szkole woli proste rozeiazania bez baz

Tak, bo robienie takich rzeczy na plikach jest na pewno prostsze. biggrin.gif
No ale:

- określasz następny dzień szkolny: http://stackoverflow.com/questions/5532002...ven-date-in-php
- sprawdzasz czy istnieje plik dd-mm-yyyy.txt : http://php.net/manual/en/function.file-exists.php
- jeżeli nie, to losujesz liczby i zapisujesz do takiego pliku http://php.net/manual/en/function.rand.php + http://php.net/manual/en/function.file-put-contents.php
- pobierasz liczbę z pliku: http://php.net/manual/en/function.file-get-contents.php
- wyświetlasz liczbę
VirgoPl
Okej jest powiedzmy wszystko zaraz się tym zajmę no ale brakuje mi tego iż co ma to uruchomić mamy sprawdzenie czy jest plik mamy stworzenie pliku ale czy jest wywołanie funkcji o danej godzinie ?
Aqu
Wykonujesz ten skrypt za każdym razem jak ktoś wejdzie na stronę. Jeszcze musisz dać warunek, jeżeli jest przed godziną 17, to robisz to wszystko dla aktualnej daty, jeśli po 17, to następnego dnia roboczego.
VirgoPl
Troche to dla mnie nieogarnięte dało by rade byś mi wytłumaczył to na jakimś skype albo ts3 ?
Pyton_000
Masz, w ramach poniedziałkowego rozruszania
Nie gwarantuje 100% działania, bo nawet nie testowałem.
  1. <?php
  2.  
  3. $szczesliwy_numerek = [
  4. 'data' => '2015-03-17',
  5. 'numery' => [11,12]
  6. ];
  7.  
  8. $tablica = json_decode(file_get_contents('szczesliwynumerek.txt'));
  9.  
  10. if(date('H') <= 17 && date('Y-m-d') == $tablica['data'] || !empty($tablica))
  11. {
  12. $numerki = range(1, 31);
  13. $numerki = array_diff($numerki, $tablica['numery']);
  14. $tablica['numery'] = array_slice(array_rand($numerki), 0, 2);
  15.  
  16. file_put_contents('szczesliwynumerek.txt', json_encode($tablica));
  17. }
VirgoPl
Wkleiłem kodzik i taki błąd Parse error: syntax error, unexpected '[' in /home/p427883/public_html/numerek.php
wie ktoś o co chodzi ?
sazian
masz stare php
  1. $szczesliwy_numerek = array(
  2. 'data' => '2015-03-17',
  3. 'numery' => array(11,12)
  4. );

ale ja myślę że lepiej użyć filemtime jeśli od ostatniej aktualizacji upłynęły 24h i jest po 17:00 to losujesz nowy numerek i go zapisujesz
VirgoPl
ok gdy nie było pliku tekstowego to wywalało błąd a teraz gdy go stworzyłem oczywiście pusty to on nic w nim nie zapisuje
Aqu
Robisz to na jakimś serwerze? Jeśli tak, to sprawdź chmody - prawa dostępu do pliku.
VirgoPl
Czyli całość wygląda tak :
Kod
<?php

$szczesliwy_numerek = array(
'data' => '2015-03-17',
'numery' =>  array(11,12)
);

$tablica = json_decode(file_get_contents('szczesliwynumerek.txt'));

if(date('H') <= 17 && date('Y-m-d') == $tablica['data'] || !empty($tablica))
{
    $numerki = range(1, 31);
    $numerki = array_diff($numerki, $tablica['numery']);
    $tablica['numery'] = array_slice(array_rand($numerki), 0, 2);

    file_put_contents('szczesliwynumerek.txt', json_encode($tablica));
}
include('szczesliwynumerek.txt')
?>

Ale dalej nic nie tworzy w tym pliku plik txt ustawiony na 777 ma wszystkie uprawnienia a nadal jest pusty
Pyton_000
wrzuć do pliku:
Kod
{"data":"2015-03-17","numery":[11,12]}
VirgoPl
Teraz takie coś
Fatal error: Cannot use object of type stdClass as array in /home/p427883/public_html/numerek.php on line 10
Pyton_000
a do jakiego pliku o wrzuciłeś ;>
VirgoPl
cały kod mam w osobnym pliku php potem sobie to do stronki zaimplementuje w tym samym folderze jest klik tekstowy szczesliwynumerek a w nim polecenie które kazałeś mi wkleić owy plik tekstowy ma uprawnienia 777
Pyton_000
Ale ty to miałeś wkleić do pliku szczesliwynumerek.txt a nie kodu PHP
VirgoPl
Cytat(VirgoPl @ 17.03.2015, 15:55:37 ) *
w tym samym folderze jest plik tekstowy szczesliwynumerek a w nim polecenie które kazałeś mi wkleić

czyli jest tam to {"data":"2015-03-17","numery":[11,12]}
Pyton_000
wywal to: include('szczesliwynumerek.txt')
przecież to niczego nie wnosi.

Czy Ty znasz w ogóle podstawy PHP ?
VirgoPl
Moje podstawy są nikłe biggrin.gif include ma wyświetlać zawartość pliku ale ok wywaliłem i mam to :
Fatal error: Cannot use object of type stdClass as array in /home/p427883/public_html/numerek.php on line 10
Pyton_000
pokaż kod.
VirgoPl
Plik numerek.php
  1. <?php
  2.  
  3. $szczesliwy_numerek = array(
  4. 'data' => '2015-03-17',
  5. 'numery' => array(11,12)
  6. );
  7.  
  8. $tablica = json_decode(file_get_contents('szczesliwynumerek.txt'));
  9.  
  10. if(date('H') <= 17 && date('Y-m-d') == $tablica['data'] || !empty($tablica))
  11. {
  12. $numerki = range(1, 31);
  13. $numerki = array_diff($numerki, $tablica['numery']);
  14. $tablica['numery'] = array_slice(array_rand($numerki), 0, 2);
  15.  
  16. file_put_contents('szczesliwynumerek.txt', json_encode($tablica));
  17. }
  18. ?>

Plik szczesliwynumerek.txt
  1. {"data":"2015-03-17","numery":[11,12]}

Wybacz ze tłumaczysz mi wszystko jak totalnemu noobowi smile.gif
Pyton_000
  1. $tablica = json_decode(file_get_contents('szczesliwynumerek.txt'), true);
  2.  
  3. if(date('H') >= 17 && date('Y-m-d') == $tablica['data'])
  4. {
  5. $numerki = range(1, 31);
  6. $numerki = array_diff($numerki, $tablica['numery']);
  7. $tablica['numery'] = array_rand($numerki, 2);
  8. $tablica['data'] = date('Y-m-d', time()+(60*60*24));
  9. file_put_contents('szczesliwynumerek.txt', json_encode($tablica));
  10. }
  11.  
  12. echo '<pre>'; var_dump($tablica); echo'</pre>';die(__FILE__ . ': '.__LINE__);
VirgoPl
Okej już działa smile.gif A teraz pytanko jak to wyświetlić wcześniej bym wyświetlał zawartość txt ale teraz jak daje include to on tego nie robi
Pyton_000
przecież masz wyświetlanie :| Wyświetl sobie z tablicy $tablica to co chcesz...
I weź się za podstawy PHP bo daleko nie zajedziesz.
VirgoPl
Gdy wkleiłem cały ten kod to wyświetla mi takie coś
  1. array(2) {
  2. ["data"]=>
  3. string(10) "2015-03-18"
  4. ["numery"]=>
  5. array(2) {
  6. [0]=>
  7. int(4)
  8. [1]=>
  9. int(25)
  10. }
  11. }
  12. /home/p427883/public_html/numerek.php: 13

A chodziło by mi o to by wyświetliło sam nr i date za podstawy php wezmę się po maturze teraz nie mam zbyt na to czasu :/
Aqu
  1. echo $tablica['data'];
  2. echo 'Numer 1: ' . $tablica['numery'][0];
  3. echo 'Numer 2: ' . $tablica['numery'][1];
  4.  
VirgoPl
Okej ogarnięte dzięki wielkie Panowie mam nadzieje że w końcu się wezmę za podstawy i nigdy nie będę wam tu zaśmiecał. Pozdrawiam

Jednak jest mały problem przetestowałem kilkakrotnie kod i niestety czasem wywala mi zero a przedział liczb jaki jest w kodzie to 1, 31 jakiś pomysł ? Może losowanie z liczb 0,31 i do wartości ++ wtedy przedział będzie 1,32 a to mnie interesuje pewnie mała zmiana w kodzie ale jak widać wcześniej nie znam się
Pyton_000
I frytki do tego? Dostałeś gotowca i jeszcze marudzisz? Sorry, ale nie. TO już za dużo.
VirgoPl
Dobra wybacz że wg zapytałem
ikssde
array_rand i kawałek opisu z php.net:

"Picks one or more random entries out of an array, and returns the key (or keys) of the random entries."

Zatem dostajesz czasami 0 bo funkcja array_rand zwraca klucze, a nie wartości.
mensajero
Odbiegając od tematu - fajne rozwiązanie. Pamiętam, że jak ja jeszcze chodziłem do szkoły, to odbywało się w jeden dzień losowanie przez członków samorządu i wydrukowane wyniki ze szczęśliwym numerkiem na dany dzień były wywieszane na korytarzu, na tablicy ogłoszeń. Nikt nie wpadł na to żeby zautomatyzować proces i jednocześnie zmniejszyć ryzyko przekrętów. Inna sprawa, że dla komputera pojęcie przypadkowości nie istnieje, więc ktoś nadgorliwy mógłby się przyczepić, że losowanie jest niesprawiedliwe, ale to tylko taka głupkowata dygresja wink.gif
VirgoPl
ogółem fakt u mnie było prowadzone to tak że wypisywali numerki ludzie z samorządu ale jako iż robię tą stronę to chciałem coś takiego wprowadzić. Rozmawiałem już z przewodniczącym i wyraził zgodę ale jak to zazwyczaj jest trzeba spojrzenia kogoś kto nie ma z tym nic wspólnego by pokazać błąd i powiedział mi że fajnie by było gdyby numerki się nie powtarzały więc sprawdziłem w przykładowym losowaniu na 40 numerków dana liczba z przedziału 1-30 potrafiła powtórzyć się 30 razy więc hmmmm.... zaczynam przerabiać skrypt by zapisywał ostatnie losowania ale i potem je usuwał by liczby zbyt sie nie powtarzały ale cholera myślę potem że to bez sensu powiedzmy ze mamy 30 liczb czyli po 2 na dzień to 15 losowań czyli jak będzie już te 15 losowanie a 14 będzie w pamięci więc może teoretycznie wylosować tylko 2 liczby a prawdopodobieństwo tego zdarzenia jest bardzo bardzo bardzo nikłe więc powiedziałem tak "Szczęśliwy numerek kojarzy mi się z lotto a w lotto w kolejnych losowaniach liczby się mogą powtórzyć więc raz masz numerek 3 razy w miesiącu raz w cale zależy od szczęścia trzeba to zautomatyzować i wykluczyć działania osób trzecich"
b4rt3kk
Cytat(VirgoPl @ 20.03.2015, 16:15:13 ) *
ogółem fakt u mnie było prowadzone to tak że wypisywali numerki ludzie z samorządu ale jako iż robię tą stronę to chciałem coś takiego wprowadzić. Rozmawiałem już z przewodniczącym i wyraził zgodę ale jak to zazwyczaj jest trzeba spojrzenia kogoś kto nie ma z tym nic wspólnego by pokazać błąd i powiedział mi że fajnie by było gdyby numerki się nie powtarzały więc sprawdziłem w przykładowym losowaniu na 40 numerków dana liczba z przedziału 1-30 potrafiła powtórzyć się 30 razy więc hmmmm.... zaczynam przerabiać skrypt by zapisywał ostatnie losowania ale i potem je usuwał by liczby zbyt sie nie powtarzały ale cholera myślę potem że to bez sensu powiedzmy ze mamy 30 liczb czyli po 2 na dzień to 15 losowań czyli jak będzie już te 15 losowanie a 14 będzie w pamięci więc może teoretycznie wylosować tylko 2 liczby a prawdopodobieństwo tego zdarzenia jest bardzo bardzo bardzo nikłe więc powiedziałem tak "Szczęśliwy numerek kojarzy mi się z lotto a w lotto w kolejnych losowaniach liczby się mogą powtórzyć więc raz masz numerek 3 razy w miesiącu raz w cale zależy od szczęścia trzeba to zautomatyzować i wykluczyć działania osób trzecich"


A nie pomyślałeś o tym, żeby tworzyć pulę numerów, z których losujesz, tylko z tych, które nie były wylosowane, załóżmy przez 7 dni?

Poza tym jako admin powinieneś mieć możliwość "wylosowania" swojego nr w razie potrzeby. Nie po to jesteś adminem, żeby z tego nie korzystać.
VirgoPl
Był pomysł by zapisywać ostatnie 10 dni i ich nie losować ale stwierdziłem że wole zostać przy tym by faktycznie były to pseudolosowe liczby możliwość wylosowania mojego numerka jest taka iż moge go podmienić w pliku albo zrobić skrypt który od razu mi nadpisze plik wstawiając tam mój numerek ale to ostatni miesiąc nie wykorzystam tego biggrin.gif

Dziś mam przekazać stronę do dodania na serwer szkoły więc ostatecznie podzielę się skryptem jak wygląda ostetecznie a mianowicie problem też wyszedł taki że skrypt działał w weekendy niby co to kogo i ostatecznie banalne do rozwiązania nawet dla takiego laika jak ja również zmieniłem że losowanie nie odbywa się od 1 do 34 tylko losuje element tablicy i tablica ma zapisane elementy od 1 do 34 oto kod:
  1. <?php
  2. $tablica = json_decode(file_get_contents('szczesliwynumerek.txt'), true);
  3.  
  4. if(date('H') >= 12 && date('Y-m-d') == $tablica['data'])
  5. {
  6. $numerki = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34);
  7. $numerki = range(1, 31);
  8. $numerki = array_diff($numerki, $tablica['numery']);
  9. $tablica['numery'] = array_rand($numerki, 2);
  10. $tablica['data'] = date('Y-m-d', time()+(60*60*24));
  11. file_put_contents('szczesliwynumerek.txt', json_encode($tablica));
  12. }
  13.  
  14. if(date( "N" ) == 1 || date( "N" ) == 2 || date( "N" ) == 3 || date( "N" ) == 4)
  15. {
  16. echo '<br>Numerki na dzień: ' . $tablica['data'];
  17. echo '</br> To: ' . $tablica['numery'][0];
  18. echo ' i ' . $tablica['numery'][1];
  19. }
  20. if(date( "N" ) == 5 && date('H') <= 17)
  21. {
  22. echo '<br>Numerki na dzień: ' . $tablica['data'];
  23. echo '</br> To: ' . $tablica['numery'][0];
  24. echo ' i ' . $tablica['numery'][1];
  25. }
  26. if(date( "N" ) == 5 && date('H') >= 17 )
  27. {
  28. echo '<br>Dziś rozpoczyna się weekend</br>';
  29. echo '<br>Wyszalej się!</br>';
  30. }
  31. if(date( "N" ) == 6)
  32. {
  33. echo '<br>Dziś odpoczywaj</br>';
  34. echo '<br>Jest dopiero sobota numerki jutro</br>';
  35. }
  36. if(date( "N" ) == 7 && date('H') <= 17)
  37. {
  38. echo '<br>Już o 17 numerki niepytane na poniedziałek!</br>';
  39. echo '<br>Wiemy że czekasz!</br>';
  40. }
  41. if(date( "N" ) == 7 && date('H') >= 17)
  42. {
  43. echo '<br>Numerki na dzień: ' . $tablica['data'];
  44. echo '</br> To: ' . $tablica['numery'][0];
  45. echo ' i ' . $tablica['numery'][1];
  46. }
  47. ?>
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.