Skrypt php odliczający trwanie lekcji


(Atwelp) #1

Witam, tworze stronę internetową dla pewnej szkoły, strona w języku html. znalazłem skrypt który wyświetla "trwa lekcja" "trwa przerwa" itd. jednak nie chce on działać, probowałem już wpisać go z pliku z rozszerzeniem php. Prosze nie pisac czy serwer obsługuje php bo jak na razie strona jest na twardym dysku. Nie wiem jak to dokladnie zrobić, po wpisaniu kodu do html wyświetla cały kod zamiast aplikacji, tak samo jest jak wczytam skrypt z pliku php. Prosze o jakies rady, chciałbym aby szkoła miała takie coś na swojej stronie.

A o to skrypt:

<?php 


$godzina = date ("Gi");

$dzwonek_1 = 845 - $godzina;

$dzwonek_2 = 900 - $godzina - 5;

$dzwonek_2_2 = 935 - $godzina;

$dzwonek_3 = 1000 - $godzina - 20;

$dzwonek_3_3 = 1030 - $godzina;

$dzwonek_4 = 1100 - $godzina - 15;

$dzwonek_4_4 = 1125 - $godzina;

$dzwonek_5 = 1200 - $godzina - 25;

$dzwonek_5_5 = 1215 - $godzina;

$dzwonek_6 = 1300 - $godzina - 30;

$dzwonek_6_6 = 1310 - $godzina;

$dzwonek_7 = 1400 - $godzina - 40;

$dzwonek_8 = 1455 - $godzina;

$dzwonek_9 = 1545 - $godzina;

$dzwonek_10 = 1600 - $godzina - 5;

$dzwonek_10_10 = 1635 - $godzina;

$dzwonek_11 = 1725 - $godzina - 40;

$dzwonek_11_11 = 1725 - $godzina;

$dzwonek_12 = 1800 - $godzina - 25;

$dzwonek_12_12 = 1815 - $godzina;

$dzwonek_13 = 1900 - $godzina - 35;

$dzwonek_13_13 = 1910 - $godzina - 5;

$dzwonek_14 = 1955 - $godzina;

$lekcja_1 = 850 - $godzina;

$lekcja_2 = 945 - $godzina;

$lekcja_3 = 1040 - $godzina;

$lekcja_4 = 1130 - $godzina;

$lekcja_5 = 1225 - $godzina;

$lekcja_6 = 1315 - $godzina;

$lekcja_7 = 1410 - $godzina;

$lekcja_8 = 1500 - $godzina - 40;

$lekcja_9 = 1550 - $godzina;

$lekcja_10 = 1640 - $godzina;

$lekcja_11 = 1730 - $godzina;

$lekcja_12 = 1820 - $godzina;

$lekcja_13 = 1910 - $godzina;


/* $min = date ("i");

if ($min <= 60 && $min >= 06) { echo "minut"; }

if ($min <= 05 && $min >= 02) { echo "minuty"; }

if ($min <= 01 && $min >= 00) { echo "minutę"; }*/ 


if ($godzina >= 800 && $godzina <= 845) { echo "Trwa teraz pierwsza godzina lekcyjna. Przerwa za $dzwonek_1 minut/y."; }

if ($godzina > 845 && $godzina < 850) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_1 minut/y"; }


if ($godzina >= 850 && $godzina < 900) { echo "Trwa teraz druga godzina lekcyjna. Przerwa za $dzwonek_2 minut/y."; }

if ($godzina >= 900 && $godzina <= 935) { echo "Trwa teraz druga godzina lekcyjna. Przerwa za $dzwonek_2_2 minut/y."; }

if ($godzina > 935 && $godzina < 945) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_2 minut/y"; }


if ($godzina >= 945 && $godzina < 1000) { echo "Trwa teraz trzecia godzina lekcyjna. Przerwa za $dzwonek_3 minut/y."; }

if ($godzina >= 1000 && $godzina <= 1030) { echo "Trwa teraz trzecia godzina lekcyjna. Przerwa za $dzwonek_3_3 minut/y."; }

if ($godzina > 1030 && $godzina < 1040) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_3 minut/y"; }


if ($godzina >= 1040 && $godzina < 1100) { echo "Trwa teraz czwarta godzina lekcyjna. Przerwa za $dzwonek_4 minut/y."; }

if ($godzina >= 1100 && $godzina <= 1125) { echo "Trwa teraz czwarta godzina lekcyjna. Przerwa za $dzwonek_4_4 minut/y."; }

if ($godzina > 1125 && $godzina < 1130) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_4 minut/y"; }


if ($godzina >= 1130 && $godzina < 1200) { echo "Trwa teraz pi±ta godzina lekcyjna. Przerwa za $dzwonek_5 minut/y."; }

if ($godzina >= 1200 && $godzina <= 1215) { echo "Trwa teraz pi±ta godzina lekcyjna. Przerwa za $dzwonek_5_5 minut/y."; }

if ($godzina > 1215 && $godzina < 1225) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_5 minut/y"; }


if ($godzina >= 1225 && $godzina < 1300) { echo "Trwa teraz szósta godzina lekcyjna. Przerwa za $dzwonek_6 minut/y."; }

if ($godzina >= 1300 && $godzina <= 1310) { echo "Trwa teraz szósta godzina lekcyjna. Przerwa za $dzwonek_6_6 minut/y."; }

if ($godzina > 1310 && $godzina < 1315) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_6 minut/y"; }


if ($godzina >= 1315 && $godzina < 1400) { echo "Trwa teraz siódma godzina lekcyjna. Przerwa za $dzwonek_7 minut/y."; }

if ($godzina >= 1400 && $godzina < 1410) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_7 minut/y"; }


if ($godzina >= 1410 && $godzina <= 1455) { echo "Trwa teraz ósma godzina lekcyjna. Przerwa za $dzwonek_8 minut/y."; }

if ($godzina > 1455 && $godzina < 1500) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_8 minut/y"; }


if ($godzina >= 1500 && $godzina <= 1545) { echo "Trwa teraz dziewi±ta godzina lekcyjna. Przerwa za $dzwonek_9 minut/y."; }

if ($godzina > 1545 && $godzina < 1550) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_9 minut/y"; }


if ($godzina >= 1550 && $godzina < 1600) { echo "Trwa teraz dziesi±ta godzina lekcyjna. Przerwa za $dzwonek_10 minut/y."; }

if ($godzina >= 1600 && $godzina <= 1635) { echo "Trwa teraz dziesi±ta godzina lekcyjna. Przerwa za $dzwonek_10_10 minut/y."; }

if ($godzina > 1635 && $godzina < 1640) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_10 minut/y"; }


if ($godzina >= 1640 && $godzina < 1700) { echo "Trwa teraz jedenasta godzina lekcyjna. Przerwa za $dzwonek_11 minut/y."; }

if ($godzina >= 1700 && $godzina <= 1725) { echo "Trwa teraz jedenasta godzina lekcyjna. Przerwa za $dzwonek_11_11 minut/y."; }

if ($godzina > 1725 && $godzina < 1730) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_11 minut/y"; }


if ($godzina >= 1730 && $godzina < 1800) { echo "Trwa teraz dwunasta godzina lekcyjna. Przerwa za $dzwonek_12 minut/y."; }

if ($godzina >= 1800 && $godzina <= 1815) { echo "Trwa teraz dwunasta godzina lekcyjna. Przerwa za $dzwonek_12_12 minut/y."; }

if ($godzina > 1815 && $godzina < 1820) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_12 minut/y"; }


if ($godzina >= 1820 && $godzina < 1900) { echo "Trwa teraz trzynasta godzina lekcyjna. Przerwa za $dzwonek_13 minut/y."; }

if ($godzina >= 1900 && $godzina <= 1905) { echo "Trwa teraz trzynasta godzina lekcyjna. Przerwa za $dzwonek_13_13 minut/y."; }

if ($godzina > 1905 && $godzina < 1910) { echo "Wreszcie przerwa! Lekcja rozpoczyna się za $lekcja_13 minut/y"; }


if ($godzina >= 1910 && $godzina <= 1955) { echo "Trwa teraz czternasta godzina lekcyjna. Przerwa za $dzwonek_14 minut/y."; }

if ($godzina > 1955) { echo "Już po lekcjach. Czas na relaks ... ;-)"; }

if ($godzina >= 0000 && $godzina < 800) { echo "Już po lekcjach. Czas na relaks ... ;-)"; }


 ?> 

[/code]

(Grzelix) #2

jak chcesz uruchomić skrypt php nie posiadając interpretera.

Zanim zacznie się coś robić powinno się poczytać o danej technologii. W skrócie:

kod php jest wykonywany po stronie serwera (który oczywiście posiada interpreter php)

następnie wynik jest zwracany w postaci strony

można uruchomić lokalny serwer np xamp i tam testować kod php


(Atwelp) #3

czyli jak wrzuce pliki (cala zawartośc mojej strony) na serwer to powinno działac?


(Grzelix) #4

na pewno nie będzie się wyświetlała treść skryptu tylko wynik jego pracy.


(Atwelp) #5

dziekuje za pomoc


(Ddiabelekk) #6

Interpreter PHP interpretuje kod napisany w PHP i ostatecznie zwraca wynik w postaci HTML. Bez Interpretera po prostu wyświetla się wszystko jako html.

Tu masz to wyjaśnione

  • instalacja serwera, jakbyś miał problem.

(Pablo_Wawa) #7

Możesz też pobrać i zainstalować pakiet XAMPP dla Windows (http://www.apachefriends.org/en/xampp-windows.html).

I jeszcze sugestia względem kodu w PHP - znacznie wygodniej i przejrzyściej byłoby stablicować dane (stałe) programu (dzwonków),np:

$dzwonek = array(845,900,935,1000,1030,1100,...);

a potem w pętli to przetwarzać. Zmniejszy to o 90% wielkość kodu, program stanie się dużo czytelniejszy i bardziej elastyczny (zmiana godziny danego dzwonka to tylko korekta jednej danej w tablicy).


(Atwelp) #8

Pablo_wawa masz racje ale nie bardzo umiem to edytować tak aby działało. Moze umiesz to przetworzyć? byłbym wdzięczny


(Pablo_Wawa) #9

Może nie powinienem Ci podawać gotowca, ale zrobię wyjątek, może będzie miało to jakiś walor edukacyjny.

Założyłem, że każda lekcja ma tyle samo minut (tutaj 45), a przerwy są zmiennej długości, dlatego dla nich zadeklarowałem stosowną tablicę.

Tablica $liczby służy do odmiany numeru kolejnej lekcji (żeby tekst był ładnie wyświetlany), podobny cel ma funkcja odmianaMinut.

By było łatwiej operować na czasie jest on trzymany w zmiennych jako liczba minut - to ułatwia potem obliczanie różnicy czasu.

Od siebie dodałem też wyświetlanie odpowiedniego komunikatu przed i po zajęciach szkolnych. :slight_smile:

<?php


$lekcja = 45; // czas trwania każdej lekcji (w minutach);

$przerwy = array(5,5,10,5,15,5,5,10,5,5,15,5,5); // długość kolejnych przerw

$liczby=array("pierwsza","druga","trzecia","czwarta","piąta","szósta","siódma","ósma","dziewiąta","dziesiąta","jedenasta","dwunasta","trzynasta","czternasta","piętnasta");


$start = 8*60+0; // początek pierwszej lekcji (godz. 8:00)


$czas = date("G")*60 + date("i"); // bieżący czas w minutach


$nr = 0;

while ($nr < count($przerwy) and $start <= $czas)

{

  $koniec = $start + $lekcja; // koniec lekcji

  $start = $koniec + $przerwy[$nr]; // początek kolejnej lekcji

  $nr++;

}


if ($nr == 0)

  echo "Jeszcze nie ma lekcji!
";

else if ($czas < $koniec)

{

  $przerwa = $koniec - $czas;

  echo "Trwa teraz ". $liczby[$nr-1] ." godzina lekcyjna. Przerwa za ". $przerwa ." ". odmianaMinut($przerwa) .".
";

}

else if ($czas < $start)

{

  $przerwa = $start - $czas;

  echo "Wreszcie przerwa! Lekcja rozpoczyna się za ". $przerwa ." ". odmianaMinut($przerwa) .".";

}

else

  echo "Jest już po lekcjach!
";


function odmianaMinut($min) // za $min minut

{

  if ($min <= 01 ) return "minutę";

  if ($min <= 04 ) return "minuty";

  if ($min == 00 or $min >= 05) return "minut";

}

?>

[/code]

(mktos) #10

@Pablowa_Wawa: Funkcja odmianaMinut() jest dość dobra, ale niestety nie do końca. Ale i tak jestem zachwycony, że ktokolwiek o prawidłowej odmianie liczebników pamięta, oprócz mnie :wink:

Problem pojawia się przy: 11 minut, 12 minut... 23 minu ty. W Twoim kodzie oczywiście najdłuższa przerwa ma 15 minut, ale przy ilościach powyżej 20 już nie zadziała. Trzeba wtedy analizować ostatnią cyfrę - kod, który prawidłowo odmienia wszystkie (przynajmniej przy naszych testach) liczebniki będzie wyglądał mniej więcej tak:

function odmiana($count = 0, $string = NULL)

{

	if ($string === NULL)

		$string = array('minutę', 'minuty', 'minut');


	$result = $string[0];


	if ($count == 1)

		$result = $string[0];

	else if ((($count > 1) && ($count < 5)) || (($count > 20) && (($count % 10 > 1) && ($count % 10 < 5))))

		$result = $string[1];

	else

		$result = $string[2];


	return $result;

}

i używa się w postaci:

odmiana(15); // zwraca "minut"

albo:

odmiana(3, array('minutę', 'minuty', 'minut')); // zwraca "minuty"

Moja funkcja odmieniająca jest też nieco bardziej uniwersalna, po przekazaniu tablicy z formami potrafi odmienić wszystko.


(Atwelp) #11

dziekuje Wam bardzo, pomogliscie mi strasznie. Fakt najdłuższa przerwa ma 20 minut, wiec musze cos dopisac tak?

aha dodam jeszcze ze lekcja zaczyna sie o 7:45 wiec jak to zapisac

$start = 8*60+0; // początek pierwszej lekcji (godz. 8:00) ?

a najdłuższa przerwa trwa 20 minut, jak ustawić przerwy ?

a jesli chce zeby w weekendy wyswietlany byl napis to zrobic tak?

if ( (date("D") == 'Sat') || (date("D") == 'Sun') ) { echo 'weekend'; } else {


kod 


}

(Pablo_Wawa) #12

@Nemhein:

Masz rację, mój błąd, pisałem kod na szybko, odmianę minut sprawdziłem w myślach tylko do 20. :slight_smile:

@atwelp:

Coś mi się wydaje, że Ty nie masz bladego pojęcia o programowaniu. Jeśli zamierzasz się tym zajmować to sugeruję zapoznać się z podstawami programowania (tutaj: w PHP). To forum nie służy do podawania komuś gotowego rozwiązania, a jedynie ma pomóc rozwiązać/rozjaśnić jakiś problem.

Myślałem, że dość jasno opisałem działanie mojego kodu, a Ty albo tego nie przeczytałeś, albo zupełnie "nie kumasz czaczy". :frowning:

  1. Mój kod poprawnie odmienia minuty do 20 (włącznie), więc nie musisz go teraz poprawiać.

  2. Opisałem na początku, po co jest tablica $przerwy - tam (w nawiasie) wpisujesz długość (w minutach) kolejnych przerw między lekcjami. Jakiej długość i przerwy są w Twojej szkole - tego nie wiem - sam je musisz tam wpisać. Długość przerw nie ma znaczenia - podajesz tylko liczbę jej minut i tyle. Liczby (czas przerw) rozdzielasz przecinkami.

  3. Czy wiesz, ile minut ma godzina? Tak się akurat złożyło, że 60. Stąd jak mam czas 8:00, to zmiennej $start przypisuję wartość 8*60+0 (czyli 8 godzin i 0 minut). Myślałem, że to jest zupełnie oczywiste. A zatem godzina 7:45 to 7*60+45 (7 godzin i 45 minut).

  4. O weekendach nie pomyślałem (ale to ważne), ten kod który podałeś jest jak najbardziej poprawny. :slight_smile:

I jeszcze najważniejsza w sumie sprawa - informacja, która się wyświetli na ekranie, będzie statyczna. To znaczy jak będzie, że (przykładowo) za 10 minut będzie przerwa, to po załadowaniu strony będzie cały czas ten sam napis (nie będzie się zmieniał). Pomoże odświeżenie strony. Rozwiązania są 2:

  • dodanie w nagłówku HTML strony (

) wpisu

co spowoduje automatyczne odświeżanie strony co 1 minutę (60 sekund) - opis na http://www.i-slownik.pl/10722,meta-refresh/ ;

  • napisanie tego całego kodu w JavaScript (dużo trudniejsze, ale bardziej eleganckie);

(Atwelp) #13

Tworze strony mniej zaawansowane ale chciałem zeby taki skrypt dana szkoła miała na swojej stronie i sprawilo mi to problem bo faktycznie nie znam sie na programowaniu ale dziekuje bardzo za pomoc

jeszcze tylko jedna rzecz, kod ktory podalem aby w weekendy sie wyswietlał napis " trwa weekend" jest poprawny ale jak go wpisze do skryptu to jest blad wiec jesli kolega jeszcze moze pomoc to bardzo prosze, jesli nie to trudno i tak bede wdzieczny za to co juz mi podaliscie bo bym siedzial z tym chyba kilka dni


(Pablo_Wawa) #14
<?php


    $lekcja = 45; // czas trwania każdej lekcji (w minutach);

    $przerwy = array(5,5,10,5,15,5,5,10,5,5,15,5,5); // długość kolejnych przerw

    $liczby=array("pierwsza","druga","trzecia","czwarta","piąta","szósta","siódma","ósma","dziewiąta","dziesiąta","jedenasta","dwunasta","trzynasta","czternasta","piętnasta");


    $start = 7*60+45; // początek pierwszej lekcji (godz. 7:45)


    $czas = date("G")*60 + date("i"); // bieżący czas w minutach


    $nr = 0;

    while ($nr < count($przerwy) and $start <= $czas)

    {

      $koniec = $start + $lekcja; // koniec lekcji

      $start = $koniec + $przerwy[$nr]; // początek kolejnej lekcji

      $nr++;

    }


	if (date("D") == 'Sat' or date("D") == 'Sun')

      echo 'Jest weekend';

	else if ($nr == 0)

      echo "Jeszcze nie ma lekcji!
";

    else if ($czas < $koniec)

    {

      $przerwa = $koniec - $czas;

      echo "Trwa teraz ". $liczby[$nr-1] ." godzina lekcyjna. Przerwa za ". $przerwa ." ". odmianaMinut($przerwa) .".
";

    }

    else if ($czas < $start)

    {

      $przerwa = $start - $czas;

      echo "Wreszcie przerwa! Lekcja rozpoczyna się za ". $przerwa ." ". odmianaMinut($przerwa) .".";

    }

    else

      echo "Jest już po lekcjach!
";


    function odmianaMinut($min) // za $min minut

    {

      if ($min == 01 ) return "minutę";

      if ($min <= 04 or ($min > 20 and $min % 10 > 1 and $min % 10 <= 4)) return "minuty";

      return "minut";

    }

    ?>

[/code]

(Atwelp) #15

wyswietla ze jest weekend ale także wyświetla trwające lekcje ;(

-- Dodane 17.12.2011 (So) 9:06 --

ok juz sobie poradziłemn chyba, okaze sie w poniedziałek :wink: