ITI0205 2020 3 iseseisev töö

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti

ITI0205 3. iseseisev töö - andmebaasiga serverirakendus

Mida tuleb teha

Sinu ülesanne on kirjutada mini-Facebook kasutades selleks PHP-d ja MySQL andmebaasi. Kui oskad võid kasutada CSS raamistikke. Puhta Javascripti ja jQuery kasutamine on samuti lubatud.

Rakendus on vaja paigaldada turing.cs.ttu.ee serverisse aadressile http://turing.cs.ttu.ee/~uni-id/prax3 ja rakenduse lähtekood Gitlab.cs.ttu.ee kesskkonda.

Rakenduse põhifunktsionaalsus

Nende nõuete realiseerimine on arvestuse saamiseks kohustuslik ja need annavad 5 punkti

  1. Sarnaselt "päris" Facebookiga pead postituste vaatamiseks või ise postitamiseks olema süsteemi sisse logitud e-posti aadressi parooliga. Minimaalses versioonis võid kasutajad (sh kasutaja võtme ja fotod) otse andmebaasi kirjutada.
  2. Kasutajal on kasutajanimega seotud profiilivaade kus on näha tema profiili andmed ja postitused. Postitusi näidatakse ajalises järjestuses - hilisemad postitused enne ja varasemad hiljem.
  3. Registreeritud kasutaja peab saama sisestada enda kirjeldusteksti, asukoha (linn). Baasversiooni juures fotot ülesse laadima ei pea vaid võib kuvada vaikepilti.
  4. Sisselogitud kasutaja saab otsida teisi kasutajaid nimeosa ja/või asukoha järgi. Otsing ei ole tõstutundlik, s.t. kuidas suur ja väiketähti kasutada ei peaks olema oluline.
  5. Registreeritud kasutaja saab saata teisele kasutajale sõbrakutse. Baasversioonis aktsepteeritakse sõbraktuse automaatselt.
  6. Kui kasutaja on juba sisse logitud, siis näeb ta enda uudisvoos oma sõprade postitusi ajalises järjestuses.
  7. Sisselogitud kasutaja saab lisada postituse milles on tekst. Skripte, embed-elemente, formaaditud teksti ja muud HTMLi seal ei näidata.
  8. Kasutaja saab sõprade postitusele lisada reaktsiooni (like) Reaktsioone näidatakse iga postituse juures. Kasutaja saab enda antud reaktsiooni tagasi võtta.
  9. Kasutaja saab lisada oma sõprade postitusele kommentaari. Sarnaselt postitusele seal HTMLi, skripte ja muud ei näidata.
  10. Kasutaja saab teise kasutaja oma sõbralistist eemaldada
  11. Kasutaja saab süsteemist välja logida.

Lisaks peavad olema täidetud elementaarsed turvanõuded

  • Ei kuvata otse, nö puhastamata välja kasutaja sisestatud tekste (javascript injection ehk XSS takistatud)
  • Ei kasutata otse, nö puhastamata, kasutaja sisestatud tekste SQL päringute kokkupanekul (sql injection takistatud)
  • Parool peab olema salvestatud andmebaasi krüpteeritult

Lisaks:

Lisaks rakenduse põhifunktsionaalsusele

Iga realiseeritud nõue annab ühe punkti, kokku 10p.

  1. Saad registreerida uue kasutaja. Kasutaja registreerimisel pead saama anda enda nime, e-posti ja parooli koos parooli kordusega. E-posti aadress peab olema unikaalne ja parooli valimisel süsteem kontrollima parooli kordust.
  2. Pärisnime põhjal loob süsteem kasutaja võtme - näiteks kui kasutaja nimi on Peeter Kask, siis kasutajanimi on peeter.kask. Lisa: Kui samanimeline aga teise e-posti aadressiga kasutaja juba eksisteerib, siis genereerib süsteem kasutajanime peeter.kask.1
  3. Lisaks kirjeldustekstile ja asukohale saab kastuada ülesse laadida oma foto. Fotot kuvatakse sarnaselt päris-Facebookiga kasutajaprofiili juures. Juhul kui fotot pole lisatud kuvatakse selle asemel vaikepilti.
  4. Registreeritud kasutaja saab postituses lisada ka pildi
  5. Edasiarendatud sõbrakutsete korral peab enne sõbralisti lisamist see kellele kutse saadeti selle aktsepteerima.
  6. Kasutaja saab sõprade postitusi oma seinale edasi postitada.
  7. Rakendus on kasutatav ka mobiilis
  8. Realiseeritud on rakenduse ruutimine, s.t kättesaadav mitte ainult parameetritega antud asukohtadest, s.t profiilivaate jaoks profile.php?user=peeter.kask vaid /profile/peeter.kask
  9. Realiseeritud ja kujundatud on vealeht, mida näidatakse siis kui soovitud lehte ei leita või süsteem kokku jookseb
  10. Kasutatud on üht või enamat Composeri teeki vabal valikul.

Lisapunktid

Lisaks 15 baaspunktile on võimalik saada ülesande eest kaks lisapunkti (kokku 17 punkti)

Selleks peab:

  1. Kasutaja saama registreerida ja sisse logida päris-Facebookiga
  2. Rakenduse vaated olema realieeritud mingil templeidimootoril a'la Twig, Blade vms

Millises järjekorras asju teha

Rakenduse peaksid valmis ehitama oma lokaalses serveris. Kui see lokaalselt töötab ja kõik funktisonaalsus on realiseeritud, siis kõige lihtsam see turing.cs.ttu.ee-sse paigutada on läbi TTÜ Gitlabi.

Üldine rakenduse struktuur ja vaated

  1. Esimese sammuna mõtle välja millised vaated rakendusse üldse peaksid tulema. Tekita tühjad PHP failid nagu index.php, login.php ja register.php
  2. Mõtle läbi millistesse kataloogidesse erinevad failid paigutada. Kui neid ühes kataloogis hoida võib faile tekkida palju ja neid on tülikas leida.
  3. Mõtle läbi ühes vaates - näiteks kasutaja uudisvoos - olevad elemendid. Realiseeri see HTMLis/CSSis. Seda saad kasutada alusesks muudes vaadetes.
  4. Mõtle välja millised oleksid korduvad osad - kindlasti on seda menüü. Tõsta menüü-HTML eraldi faili, näiteks components/menu.php ja lingi see põhivaatesse, näiteks <?php include 'components/menu.php'

Andmebaas ja andmed

Andmebaas ja andmemudel ehita valmis lokaalselt. Arvesta, et andmebaasimuudatuste viimine live-serverisse on tülikam kui koodimuudatuste oma - seepärast proovi see läbi mõelda teha nii valmis et struktuuris enam muudatusi hiljem ei tuleks.

  1. Mõtle välja andmebaasi struktuur. Esialgu joonista see vabas vormis ülesse, kas paberile või mõnda tööriista kasutades. Hea online tööriist on nomnoml: https://nomnoml.com/
  2. Nüüd tee andmetabelid enda arvutis näiteks PhpMyAdminit kasutades valmis. Et päringuid oleks lihtsam kirjutada ja katsetada, siis kirjuta baasi testandmeid. Testandmeid saad genereerida näiteks selle tööriistaga: https://www.generatedata.com/
  3. Nüüd saad PHPs andmebaasiga ühenduda ja andmebaasiga toimetada.
  4. Tõsta andmebaasiga ühendumise skript eraldi faili, nt. includes/db.php. Nüüd saad selle linkida vaadetese kus andmebaasi on vaja kasutada: include 'includes/db.php.


...

  1. Kui kõik on valmis ja sinu lokaalses arvutis töötab, paigalda rakendus Turingu serverisse.

Keskkonnad ja serverid

Selle ülesande jaoks peaksid kasutama 3 serverit:

  • Sinu lokaalne PHP installatsioon (localhost) - kus jooksevad nii Apache veebiserver, PHP rakendusekiht kui MySQL andmebaasiserver.
  • TTU Gitlab (gitlab.cs.ttu.ee) lähtekoodi hoidmiseks ja vahesammuks Turingu serverisse paigutamisel.
  • Turingu server (turing.cs.ttu.ee) kuhu paigaldatakse valmis rakendus.

Abimaterjale ja viiteid