Erinevus lehekülje "ITI0205 2020 3 iseseisev töö" redaktsioonide vahel
(ei näidata sama kasutaja 3 vahepealset redaktsiooni) | |||
69. rida: | 69. rida: | ||
==== Andmebaas ja andmed ==== | ==== 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. | ||
+ | |||
# 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/ | # 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/ | ||
# 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/ | # 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/ | ||
− | # Nüüd saad PHPs | + | # Nüüd saad PHPs andmebaasiga ühenduda ja andmebaasiga toimetada. |
+ | # Tõsta andmebaasiga ühendumise skript eraldi faili, nt. <code>includes/db.php</code>. Nüüd saad selle linkida vaadetese kus andmebaasi on vaja kasutada: <code>include 'includes/db.php</code>. | ||
+ | |||
... | ... | ||
90. rida: | 95. rida: | ||
* Lekkinud Facebooki lähtekood aastast 2007: https://gist.github.com/nikcub/3833406 | * Lekkinud Facebooki lähtekood aastast 2007: https://gist.github.com/nikcub/3833406 | ||
* [[ Linuxi_Käsurida | Linuxi käsurea kasutamine Turingu serveri näitel ]] | * [[ Linuxi_Käsurida | Linuxi käsurea kasutamine Turingu serveri näitel ]] | ||
+ | * MySQL kasutamine serveris varasemate aastate loengunäidete põhjal: http://lambda.ee/wiki/Vorgurakendused_1_SQL_naited_loengust |
Viimane redaktsioon: 16. november 2020, kell 09:34
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
- 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.
- 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.
- Registreeritud kasutaja peab saama sisestada enda kirjeldusteksti, asukoha (linn). Baasversiooni juures fotot ülesse laadima ei pea vaid võib kuvada vaikepilti.
- 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.
- Registreeritud kasutaja saab saata teisele kasutajale sõbrakutse. Baasversioonis aktsepteeritakse sõbraktuse automaatselt.
- Kui kasutaja on juba sisse logitud, siis näeb ta enda uudisvoos oma sõprade postitusi ajalises järjestuses.
- Sisselogitud kasutaja saab lisada postituse milles on tekst. Skripte, embed-elemente, formaaditud teksti ja muud HTMLi seal ei näidata.
- Kasutaja saab sõprade postitusele lisada reaktsiooni (like) Reaktsioone näidatakse iga postituse juures. Kasutaja saab enda antud reaktsiooni tagasi võtta.
- Kasutaja saab lisada oma sõprade postitusele kommentaari. Sarnaselt postitusele seal HTMLi, skripte ja muud ei näidata.
- Kasutaja saab teise kasutaja oma sõbralistist eemaldada
- 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:
- HTML ja CSS peaksid olema eraldi. Nii on sul mugav seda hallata ja muuta.
- Lehtede HTML peaks olema valideeruv ja javascripti kasutamisel ei tohi konsoolis olla veateateid.
- Leht ei tohi välja näha väga jube. Vaata ka: http://lambda.ee/wiki/Htmli_kujunduse_%C3%BCldp%C3%B5him%C3%B5tted
Lisaks rakenduse põhifunktsionaalsusele
Iga realiseeritud nõue annab ühe punkti, kokku 10p.
- 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.
- 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
- 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.
- Registreeritud kasutaja saab postituses lisada ka pildi
- Edasiarendatud sõbrakutsete korral peab enne sõbralisti lisamist see kellele kutse saadeti selle aktsepteerima.
- Kasutaja saab sõprade postitusi oma seinale edasi postitada.
- Rakendus on kasutatav ka mobiilis
- 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
- Realiseeritud ja kujundatud on vealeht, mida näidatakse siis kui soovitud lehte ei leita või süsteem kokku jookseb
- 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:
- Kasutaja saama registreerida ja sisse logida päris-Facebookiga
- 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
- Esimese sammuna mõtle välja millised vaated rakendusse üldse peaksid tulema. Tekita tühjad PHP failid nagu
index.php
,login.php
jaregister.php
- 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.
- Mõtle läbi ühes vaates - näiteks kasutaja uudisvoos - olevad elemendid. Realiseeri see HTMLis/CSSis. Seda saad kasutada alusesks muudes vaadetes.
- 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.
- 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/
- 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/
- Nüüd saad PHPs andmebaasiga ühenduda ja andmebaasiga toimetada.
- 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
.
...
- 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
- Kiire juhend Giti kasutamiseks: https://pydoc.pages.taltech.ee/git/git_ttu.html
- Veidi põhjalikum õpetus: https://pydoc.pages.taltech.ee/git/git_general.html
- Lekkinud Facebooki lähtekood aastast 2007: https://gist.github.com/nikcub/3833406
- Linuxi käsurea kasutamine Turingu serveri näitel
- MySQL kasutamine serveris varasemate aastate loengunäidete põhjal: http://lambda.ee/wiki/Vorgurakendused_1_SQL_naited_loengust