Viikkotehtävä 4
Tällä viikolla harjoitellaan PHP:n luokkien ja olioiden käyttämistä. Tehdään 2. viikkotehtävästä tuttu lottoarvontasovellus käyttäen olioita.
Yhteiset vaatimukset:
- Käytetään PHP-kieltä.
- Kommentoikaa koodin oleellisimpia osia!
- Sivujen sisältämä XHTML-koodi tulee olla validia.
- Sivun ulkoasumuotoilut on tehtävä CSS:ää käyttäen. CSS:n on oltava myös validia CSS2:sta.
- Sivun ulkoasu tulee olla layoutin osalta suunnilleen mallikuvien mukainen. Värit sen sijaan saa päättää itse.
- Evästeitä, tallennustiedostoja, tietokantoja tai sessioita ei saa käyttää.
- Valmiin PHP-ohjelman pitää toimia users.jyu.fi:ssä.
Taso 1
- Tee PHP-sivu, joka toimii lottorivin arpojana. Katso mallikuva: taso1.png.
- Ohjeita:
- Arvotaan siis seitsemän numeroa väliltä 1-39.
- Samassa rivissä ei saa olla kahta samaa numeroa.
- Tulostettaessa numerot tulee olla järjestettynä pienimmästä suurimpaan.
- Hyödyllisiä funktioita: rand(), in_array(), sort()
- $_SERVER-, $_POST-, $_GET-, $_REQUEST-taulukoita ei pidä käyttää.
- Oliovaatimukset:
- Lottonumerolle tulee tehdä oma luokka, eli lottonumerot ovat lottonumero-olioita.
- Olion täytyy itse hoitaa tarkistus, että sen numero on välillä 1-39.
- Kaikkien olion attribuuttien tulee olla yksityisiä (private).
- Lottoriville tulee myös tehdä oma luokka, joka sisältää lottonumero-olioita (7 kpl).
- Olion täytyy itse suorittaa arvonta ja osata tulostaa lottorivi ulos (lottonumero-olioita saa toki käyttää apuna).
- Olion täytyy itse hoitaa tarkistus, että se ei sisällä kahta samaa lottonumeroa.
- Kaikkien olion attribuuttien tulee olla yksityisiä (private).
- Lottonumerolle tulee tehdä oma luokka, eli lottonumerot ovat lottonumero-olioita.
Taso 3
- Tee PHP-sivu, joka toimii lottorivin arpojana. Katso mallikuvat: taso3a.png, taso3b.png ja taso3c.png.
- Ohjeita:
- Sovellus tulee toimia siten, että käyttäjä voi itse määrätä koodiin
vakioiden (define) arvoiksi
seuraavat "asetukset":
- Kuinka monta numeroa arvotaan.
- Kuinka monta lisänumeroa arvotaan.
- Miltä väliltä numerot arvotaan.
- $_SERVER-, $_POST-, $_GET-, $_REQUEST-taulukoita ei pidä käyttää.
- Jos käyttäjä on määrännyt arvottavaksi 7 numeroa, tulostetaan sivun alaotsikoksi "Lotto". Kuuden numeron tapauksessa alaotsikoksi tulostetaan "Viking Lotto" ja kaikissa muissa tapauksissa "Tuntematon lottoarvonta".
- Samassa rivissä ei saa olla kahta samaa numeroa. HUOM! Myöskään lisänumerona ei voi olla sellainen numero, joka on jo varsinaisena numerona.
- Tulostettaessa numerot tulee olla järjestettynä pienimmästä suurimpaan.
- Hyödyllisiä funktioita: rand(), in_array(), sort()
- Sovellus tulee toimia siten, että käyttäjä voi itse määrätä koodiin
vakioiden (define) arvoiksi
seuraavat "asetukset":
- Oliovaatimukset:
- Lottonumerolle tulee tehdä oma luokka, eli varsinaiset lottonumerot ovat lottonumero-olioita.
- Olion täytyy itse hoitaa tarkistus, että sen numero on siltä väliltä, joka vakiomuuttujissa on määrätty.
- Kaikkien olion attribuuttien tulee olla vähintään suojattuja (eli joko private tai protected).
- Lisänumerolle tulee tehdä oma luokka, joka peritään lottonumeroluokasta.
- Olion täytyy itse hoitaa tarkistus, että sen numero on siltä väliltä, joka vakiomuuttujissa on määrätty.
- Kaikkien olion attribuuttien tulee olla yksityisiä (private).
- Lottoriville tulee myös tehdä oma luokka, joka sisältää lottonumero-olioita sekä lisänumero-olioita.
- Olion sisältämien lottonumeroiden ja lisänumeroiden määrät tulee olla vakiomuuttujien mukaiset.
- Olion täytyy itse suorittaa arvonta ja osata tulostaa lottorivi oikeine otsikkoineen ulos (lottonumero- ja lisänumero-olioita saa toki käyttää apuna).
- Olion täytyy itse hoitaa tarkistus, että se ei sisällä kahta samaa numeroa (huomioi sekä varsinaiset numerot että lisänumerot).
- Kaikkien olion attribuuttien tulee olla yksityisiä (private).
- Lottonumerolle tulee tehdä oma luokka, eli varsinaiset lottonumerot ovat lottonumero-olioita.
Taso 5
- Tee PHP-sivu, joka toimii lottorivin arpojana. Katso mallikuvat: taso5a.png, taso5b.png ja taso5c.png.
- Ohjeita:
- Sovellus toimii seuraavasti:
- Ensin käyttäjä syöttää lottokoneen asetukset, eli numeroiden määrän, lisänumeroiden määrän ja arvontavälin. Mallikuva
- Seuraavaksi käyttäjä syöttää oman lottorivinsä. Mallikuva
- Kolmannessa vaiheessa arvotaan lottonumerot ja kerrotaan käyttäjälle, montako numeroa hän sai oikein. Tulossivulla näytetään sekä käyttäjän syöttämät numerot että arvonnassa tulleet numerot. Mallikuva
- Jos käyttäjä on määrännyt arvottavaksi 7 numeroa, tulostetaan tulossivulla sivun alaotsikoksi "Lotto". Kuuden numeron tapauksessa alaotsikoksi tulostetaan "Viking Lotto" ja kaikissa muissa tapauksissa "Tuntematon lottoarvonta".
- Arvotussa lottorivissä ei saa olla kahta samaa numeroa. HUOM! Myöskään lisänumerona ei voi olla sellainen numero, joka on jo varsinaisena numerona.
- Tulostettaessa numerot tulee olla järjestettynä pienimmästä suurimpaan.
- Hyödyllisiä funktioita: rand(), in_array(), sort()
- Sovellus toimii seuraavasti:
- Oliovaatimukset:
- Lottonumerolle tulee tehdä oma luokka, eli varsinaiset lottonumerot ovat lottonumero-olioita.
- Olion täytyy itse hoitaa tarkistus, että sen numero on siltä väliltä, jonka käyttäjä on lomakkeella määrännyt.
- Kaikkien olion attribuuttien tulee olla vähintään suojattuja (eli joko private tai protected).
- Lisänumerolle tulee tehdä oma luokka, joka peritään lottonumeroluokasta.
- Olion täytyy itse hoitaa tarkistus, että sen numero on siltä väliltä, jonka käyttäjä on lomakkeella määrännyt.
- Kaikkien olion attribuuttien tulee olla yksityisiä (private).
- Lottoriville tulee myös tehdä oma luokka, joka sisältää lottonumero-olioita sekä mahdollisesti lisänumero-olioita.
- Samasta luokasta voi luoda oliot sekä käyttäjän syöttämälle lottoriville että arvotulle lottoriville. Erona on se, että arvotussa lottorivissä on mukana mahdollisesti myös lisänumeroita, mutta käyttäjän syöttämässä lottorivissä ei.
- Olion sisältämien lottonumeroiden ja lisänumeroiden määrät tulee olla käyttäjän lomakkeella määräämien asetusten mukaisesti.
- Olion täytyy itse suorittaa arvonta ja osata tulostaa lottorivi oikeine otsikkoineen ulos (lottonumero- ja lisänumero-olioita saa toki käyttää apuna).
- Olion tulee osata tulostaa ulos myös arvonnan tulos mallikuvan mukaan.
- Olion täytyy itse hoitaa tarkistus, että arvottu tai syötetty rivi ei sisällä kahta samaa numeroa (huomioi sekä varsinaiset numerot että arvotun rivin osalta myös lisänumerot).
- Kaikkien olion attribuuttien tulee olla yksityisiä (private).
- Lottonumerolle tulee tehdä oma luokka, eli varsinaiset lottonumerot ovat lottonumero-olioita.
- Vinkki: Koska lomake on usealla sivulla eikä tallennustekniikoita (sessiot yms.) saa käyttää, täytyy käyttäjän syöttämiä asetuksia kuljettaa lomakkeella mukana viimeiseen vaiheeseen asti, jotta silloin osataan luoda tarvittavat oliot oikeilla asetuksilla. Mukana kuljettaminen onnistuu lomakkeen hidden-kenttien avulla.

Käyttäjien kommentit
Tervehdys! Tuli tuosta mieleeni, jotta miksi $_POST tai $_GET taulukoita saa käyttää? Niitä tarvitaan kuitenkin, koska tiedot eivät siirry hidden kenttään kuitenkaan itsestään. Mielestäni turhaa ohjelmoijan kiusaamista kieltää järkevien tekniikoiden käyttäminen, vai voitteko perustella mielekkään tilanteen, jossa kyseisten muuttujien käyttö olisi erityisen ongelmallista?
Tasolla 5 $_POST tai $_GET -taulukoiden käyttöä ei olekaan kielletty, koska niitä tarvitaan hidden-kenttien käytössä. Mutta alemmilla tasoilla hiddeniä ei tarvita, joten ei tarvita myöskään $_POST tai $_GET -taulukoita. Välillä tehtäviin joutuu tekemään hiukan teennäisiä rajoituksia, jotta niiden vaikeustaso saadaan sopivaksi tai jotta ne "joutuu" tekemään juuri sillä tekniikalla, jota tehtävässä halutaan testata. Jos oikein hakemalla hakisi $_POST tai $_GET -taulukoiden ongelmia, niin yksi voisi olla se, että pätevä käyttäjä voi syöttää niiden arvoiksi mitä tahansa esim. selaimen lisäosan avulla ja näin lomakkeen käsittelijää voidaan "huijata". Mutta tässä tehtävässä käyttöä ei siis kielletty tuon syyn takia. ;-)
Moro! 5-tason vaatimuksissa sanotaan: "arvotussa lottorivissä on mukana mahdollisesti myös lisänumeroita, mutta käyttäjän syöttämässä lottorivissä ei". Ilmeisesti toisin päin?
Kyllä se on juuri nuin, kun sivulla sanotaan. Eli lotossa se arvontakone arpoo niitä lisänumeroita, mutta käyttäjä täyttää riviinsä vain sen määrätyn määrän numeroita (lotossa 7, eli ne "varsinaiset numerot"). :-)