Viikkotehtävä 5
Tällä viikolla harjoitellaan PHP:n sessioiden ja evästeiden käyttämistä sekä tiedostojen käsittelyä ja tiedoston latausta palvelimelle lomakkeen avulla. Tehtäville yhteiset vaatimukset:
- Tehtävä on palautettava maanantaina 31.3.2008 klo 12.00 mennessä.
- Käytetään PHP-kieltä.
- Kommentoikaa koodin oleellisimpia osia!
- Kaikkien sivujen on oltava validia XHTML 1.0 Strictiä.
- Valmiin PHP-ohjelman pitää toimia users.jyu.fi:ssä.
Taso 1
Toteuta sessioilla pieni verkkokauppa:
- Toteuta suunnilleen mallikuvan tyyppinen WWW-sivu verkkokauppaa varten.
- Tuotteiden nimet haetaan tuotteet.txt-tiedostosta (kopioi tiedosto omaan hakemistoosi). Tiedostossa on siis yksi tuote per rivi toisesta rivistä alkaen.
- Tallenna ostoskorissa olevien tuotteiden määrät sessioihin.
- Kun käyttäjä klikkaa jonkun tuotteen kohdalla Lisää koriin -painiketta, kasvaa kyseisen tuotteen määrä yhdellä. OHJE: Laita kaikkien painikkeiden name-ominaisuuksiin yksilölliset arvot ja tarkasta sivua ladatessa $_REQUEST-taulukosta, tuleeko jonkun tuotteen lukumäärää kasvattaa. Mallikuva, kun käyttäjä on lisännyt tuotteita.
- Kun käyttäjä klikkaa Tilaa!-painiketta, käyttäjä ohjataan sivulle, jossa luetellaan tilattujen tuotteiden määrät. Katso mallikuva. Niitä tuotteita ei luetella, joiden määrää käyttäjä ei kasvattanut.
- Kun on painettu Tilaa!-painiketta, tulee myös tyhjentää sessiot, jotta seuraavan kerran verkkokaupan sivua ladatessa kaikkien tuotteiden määrä on taas 0.
Taso 3
Laajenna 1. tason verkkokauppaa (toteutus edelleen sessioilla):
- Tee uusi sivu, jossa käyttäjällä on mahdollista muokata verkkokaupan tuotelistaa.
Verkkokaupan sivulta tulee olla linkki muokkaussivulle. Muokkaus tapahtuu seuraavasti:
- Sivulla on lomake, jossa on textarea-kenttä.
- Kenttään ladataan pohjatiedoiksi tuotteet.txt-tiedoston sisältämät tuotteet (ei ensimmäistä otsikkoriviä).
- Tämän jälkeen käyttäjä voi muokata tuotelistaa (poistaa tuotteita, muokata tuotteiden nimiä, lisätä tuotteita jne.). Lopuksi käyttäjä painaa Muokkaa-painiketta, jolloin tuotelista päivittyy (tuotteet.txt-tiedosto tulee kirjoittaa uudelleen vastaamaan muokkauksia) ja käyttäjä siirretään automaattisesti takaisin verkkokaupan tilaussivulle. Katso mallikuva muokkaussivusta. OHJE: Etsi PHP.netistä sopivia merkkijonojen käsittelyfunktioita, jotta saat parsittua textarea-kentän sisällön oikein.
- Käyttäjän siirryttyä automaattisesti tilaussivulle, siellä täytyy näkyä päivitetty tuotelista. Aiemmin käyttäjän mahdollisesti lisäämät tuotteiden lukumäärät tulee olla entisellään. Jos jonkun tuotteen nimi on kuitenkin muuttunut, muutetaan tämän tuotteen lukumäärä arvoon 0. Huomioi myös se, että käyttäjä on voinut muuttaa tuotteiden järjestystä. Myös siinä tapauksessa aiemmin valitut tuotteiden lukumäärät täytyy pysyä ennallaan.
- Tuotteiden muokkaamisessa pitää huomioida se, että jos käyttäjä kirjoittaa tuotteen nimeksi esimerkiksi XHTML-koodia, tuotesivun ulkoasu ei saa silti muuttua (toki tuotteiden nimet saavat muuttua). Lisäksi tulee huomioida se, että kahta saman nimistä tuotetta ei saa olla.
- Tee lisäksi evästeillä verkkokaupan sivulle toiminto, joka näyttää kauppaa käyttävän henkilön nimen:
- Kun käyttäjä tulee ensimmäistä kertaa tilaussivulle, hänellä on mahdollisuus antaa nimensä lomakkeelle ja painaa Tunnistaudu-painiketta.
- Tällöin käyttäjän nimi tallennetaan evästeeseen ja näytetään tilaussivulla tunnistautumislomakkeen tilalla.
- Tunnista-painikkeen tilalla on tällöin Lopeta-painike, jota painamalla käyttäjän tiedot tuhotaan evästeestä. Tällöin tilaussivulla näkyy taas lomake nimen antamista varten ja Tunnistaudu-painike.
- Käyttäjän tiedot tuhotaan myös silloin, jos tilaussivua ladatessa käyttäjän edellisestä tilaussivun lataamisesta oli kulunut yli 20 sekuntia.
- Aina jos käyttäjän tietoja ei löydy evästeestä, tilaussivulla näytetään lomake nimen antamista varten ja Tunnistaudu-painike.
- Tuotteiden lukumääriä ei tarvitse muuttaa, vaikka käyttäjä painaa Lopeta-painiketta tai Tunnistaudu-painiketta.
- Katso mallikuvat: taso3b.png ja taso3c.png.
Taso 5
Tee 3. tason tehtävät seuraavilla lisäyksillä ja muutoksilla:
- Verkkokaupan tuotteiden määrää voi myös pienentää. Eli kun käyttäjä klikkaa jonkun tuotteen kohdalla Vähennä-painiketta, vähentyy kyseisen tuotteen määrä yhdellä. Huomioi, että tuotteen määrä ei saa mennä negatiiviseksi. Katso mallikuva.
- Verkkokauppaan tulee myös tuotteiden hinnat. Tilaussivulla näytetään sekä tuotteiden yksikköhinnat että kokonaishinnat. Lisäksi näytetään tilauksen kokonaissumma. Katso mallikuva.
- Tuotteiden hinnat tallennetaan tuotteet.txt-tiedostoon. Yksikköhinta tulee siis tuotteen nimen jälkeen ilman euron merkkiä. Erottelumerkkinä on ?-merkki.
- Tuotelistan muokkaustoiminnossa tulee voida muokata luonnollisesti myös tuotteiden yksikköhintoja.
Tarkista ennen muokkausten tallentamista tiedostoon, että seuraavat vaatimukset täyttyvät:
- Käyttäjän antamat hinnat ovat numeroita ja suurempia kuin 0.
- Käyttäjä ei ole syöttänyt ?-merkkiä muualle kuin tuotenimen ja tuotehinnan väliin.
- Käyttäjä on syöttänyt hinnan jokaiselle tuotteelle.
- Lisäksi 3. tasolla olleet vaatimukset tuotenimeen liittyen tulee täyttyä.
- Tee lisäksi sivu (laita linkki sivulle tilaussivulta), jossa on lomake, jonka avulla käyttäjä
voi ladata oman tekstitiedoston entisen tuotelistan tilalle:
- Lomakkeella voidaan ladata minkä niminen tekstitiedosto tahansa, mutta se tallennetaan palvelimelle aina nimelle tuotteet.txt, jotta verkkokauppa toimii.
- Tarkista tiedostoa vastaanotettaessa seuraavat seikat:
- Tiedoston maksimikoko 10 kt.
- Tiedostossa on otsikkorivi oikeassa formaatissa.
- Tiedostossa pitää olla vähintään yksi tuote ja hinta oikeassa formaatissa.
- Hyväksytään vain txt-muotoisia tiedostoja.
- Käyttäjä on syöttänyt hinnan jokaiselle tuotteelle.
- Lisäksi 3. tasolla olleet vaatimukset tuotenimeen liittyen tulee täyttyä.
- Tulosta lisäksi näkyville selkokielisenä mahdolliset $_FILES['tiedosto']['error']-taulukkoon tiedoston siirrossa tallentuneet virheet (joku virhe tulee aina silloin kyseiseen muuttujaan, kun tiedoston siirto epäonnistuu).
- Jos tiedoston lataus onnistui, poista kaikki aiemmin sessioihin mahdollisesti tallennetut tuotemäärät. Käyttäjän mahdollinen nimi evästeessä tulee sen sijaan säilyttää.
- Katso mallikuva lataussivulta.

Käyttäjien kommentit