ITV0110 4. töö: Andmebaasiga serverakendus: erinevus redaktsioonide vahel
Resümee puudub |
|||
| 56. rida: | 56. rida: | ||
* Vaata [[Vorgurakendused 1 SQL naited loengust]]. Uus 2011 andmebaas on nimega reddit, kasutajanimi on rstudent ja parool on student: see on kõigile ühine. | * Vaata [[Vorgurakendused 1 SQL naited loengust]]. Uus 2011 andmebaas on nimega reddit, kasutajanimi on rstudent ja parool on student: see on kõigile ühine. | ||
* Vaata [[lihtsaid php ja mysql näiteid]] loengust. Siin kasutatakse vana andmebaasi nimega facebook ja andmebaasi kasutajat fstudent, mis sel aastal enam kasutusel pole. | * Vaata [[lihtsaid php ja mysql näiteid]] loengust. Siin kasutatakse vana andmebaasi nimega facebook ja andmebaasi kasutajat fstudent, mis sel aastal enam kasutusel pole. | ||
Ideid ja näpunäiteid: | |||
* Kõige lihtsam on teha kogu rakendus üheainsa php failina. Keerulisemate programmide puhul ei ole see hea mõte, meie lihtsal juhul aga on päris mugav. | |||
* Kui tahad siiski oma php faili struktureerida (näiteks hoida eraldi failis päis ja jalus) siis selleks on php [http://php.net/manual/en/function.include.php include] käsk. | |||
* Erinevad tegevused (a la lingi lisamine, votemine, sisse logimine) saad realiseerida nii, et php lehel vaadatakse, mis argumendid on antud (näiteks reddit.php?username=xx&password=yy peale tehakse sisse logimine, reddit.php?op=logout peale väljalogimine, reddit.php?link=www.ttu.ee peale tehakse vote jne). Alati on võimalik võtta ka kasutusele eraldi parameeter, ntx op, mille väärtus ütleb siis, et mis tegevus tuleb ette võtta. | |||
* Debugimise jaoks on lihtsam kasutada vormidel method="get", siis näed brauserist, et mis parameetrid saadeti. | |||
* Sisselogimise jaoks (tee seda alles siis, kui baasfunktsionaalsus olemas!) on mõistlik kasutada php session funktsiooni (lihtsa tutoriali [http://www.tizag.com/phpT/phpsessions.php leiad siit]) ja seada sessioonis sisselogimisel $_SESSION['username'] ja edaspidi alati kontrollida, kas on isset($_SESSION['username']) ja kui jah, siis kasutada seda väärtust, kui ei, siis kuvada sisselogimise vorm. Väljalogimisel piisab siis session_destroy() kasutamisest. | |||
Sobivad õpetused lugemiseks, umbes selles järjekorras: | |||
; PHP | ; PHP | ||
| 83. rida: | 94. rida: | ||
* [http://www.learnphp-tutorial.com/HtmlForms.cfm suhteliselt ok vorminäide php kontekstis] | * [http://www.learnphp-tutorial.com/HtmlForms.cfm suhteliselt ok vorminäide php kontekstis] | ||
Siit leiad eelmise aasta versiooni: [[ITV0110 4. töö 2010]] | Siit leiad eelmise aasta versiooni: [[ITV0110 4. töö 2010]] | ||
Redaktsioon: 3. detsember 2011, kell 16:16
Andmebaasi kasutajanimi, parool ja näiteid
Kõik need leiad hiljuti uuendatud näidete seast Vorgurakendused 1 SQL naited loengust.
Mis tuleb teha
Neljanda praktikumi ülesandeks on ehitada mini-reddit, kasutades selleks PHP-d ja MySQL-i (või Postgresqli).
Arusaadavalt on sinu loodav süsteem väga palju lihtsam, kui päris reddit, kuid baasfunktsionaalsus on tal sama.
Kui sa juhtumisi ei ole Redditi kasutaja, siis tee endale konto, upvote/downvote, lisa mõni link ja kommentaar ja tutvu süsteemiga: see ei ole praksi jaoks hädavajalik, kuid tuleb kasuks.
Praktikumi arvestamine ja hindamine
Praktikum annab maksimaalselt 15 punkti.
Edukaks arvestuseks pead realiseerima baasfunktsionaalsuse lihtsamad osad:
- Lingi lisamine.
- Lisatud linkide sorteeritud vaatamine: paremad eespool, kuvatakse korraga piiratud arv. "Parem" on lihtsamal juhul selline, millel upvotes-downvotes skoor on suurem.
- Lingi upvote ja downvote.
- Lingile kommentaari lisamine (ühel lingil võib neid olla kuipalju tahes), salvestatakse lameda listina ilma vastuste hierarhiata.
- Lingi kommentaaride vaatamine lisamisaja järgi sorteeritult, jällegi lameda listina ilma vastuste hierarhiata.
Nende osade korralik realiseerimine annab 7 punkti. Praktikumi ei arvestata, kui nendes osades on suuremad puudujäägid.
Järgmiste funktsionaalsuste lisamine annab täiendavalt punkte, kuni maksimaalse 15-ni:
- Oma accoundi tegemine: kasutajanimi ja parool.
- Sisselogimine (sisselogitult peab siis olema näha kasutajanimi), väljalogimine ja lingi/kommentaari ning upvote/downvote lubamine ainult sisseloginud kasutajalt.
- Kommentaari ja lingi juures lisaja kasutajanime ja lisamisaja kuvamine.
- Lingi sisestamisel tagi lisamine lingile. Tag on umbes seesama, mis subreddit ja tagi võib alati vabalt valida/sisestada.
- Tagide järgi linkide otsimine: kuvatakse ainult neid linke, millel on valitud/sisestatud tag.
- Tagide listi kuvamine.
Reaalses rakenduses hädavajalikud asjad, millega meie praksis aga ei pea tegelema (kuid ei ole ka keelatud):
- Mõistliku, aega arvestava rankingu algoritmi tegemine: vt redditi rankingualgoritmi ja hacker newsi rankingualgoritmi.
- Juba sisestatud info muutmine ja kustutamine.
- Erinevad turvaküsimused (sql injection jne).
- Kasutajakonto tegemise kontrollid emaili ja captcha-ga.
- Pikkade loetelude jagamine lehekülgedeks.
- Teksti/kasutaja/jne otsingud.
- Oma accoundi eelistused ja nende kasutamine kuvamisel.
- Kommentaaride esitamine hiearhiana.
Tehnoloogilised nõuded
- Kõik serverirakendused tuleb realiseerida PHP-s ja andmeid tuleb hoida kas MySQL-s või Postgresis. Kui oled andmebaasinduses algaja, kasuta pigem MySQL-i, kui aga oled juba kogemusi omandanud ja sul on server, kus ise oled adminiõigustega, võiksid proovida Postgresi.
- Rakendus peab olema võrgus vabalt brauseriga ligipääsetav, mitte lihtsalt töötama näiteks sinu laptopis.
- Serverarvutina võid - nagu teises praktikumis - kasutada kas dijkstrat või omaenda vabalt valitud lemmikserverit.
Abi ja soovitusi
Esiteks: tutvu PHP ja SQL materjalidega, kas kursuse esilehelt või koopiana siitsamast:
- Vaata Vorgurakendused 1 SQL naited loengust. Uus 2011 andmebaas on nimega reddit, kasutajanimi on rstudent ja parool on student: see on kõigile ühine.
- Vaata lihtsaid php ja mysql näiteid loengust. Siin kasutatakse vana andmebaasi nimega facebook ja andmebaasi kasutajat fstudent, mis sel aastal enam kasutusel pole.
Ideid ja näpunäiteid:
- Kõige lihtsam on teha kogu rakendus üheainsa php failina. Keerulisemate programmide puhul ei ole see hea mõte, meie lihtsal juhul aga on päris mugav.
- Kui tahad siiski oma php faili struktureerida (näiteks hoida eraldi failis päis ja jalus) siis selleks on php include käsk.
- Erinevad tegevused (a la lingi lisamine, votemine, sisse logimine) saad realiseerida nii, et php lehel vaadatakse, mis argumendid on antud (näiteks reddit.php?username=xx&password=yy peale tehakse sisse logimine, reddit.php?op=logout peale väljalogimine, reddit.php?link=www.ttu.ee peale tehakse vote jne). Alati on võimalik võtta ka kasutusele eraldi parameeter, ntx op, mille väärtus ütleb siis, et mis tegevus tuleb ette võtta.
- Debugimise jaoks on lihtsam kasutada vormidel method="get", siis näed brauserist, et mis parameetrid saadeti.
- Sisselogimise jaoks (tee seda alles siis, kui baasfunktsionaalsus olemas!) on mõistlik kasutada php session funktsiooni (lihtsa tutoriali leiad siit) ja seada sessioonis sisselogimisel $_SESSION['username'] ja edaspidi alati kontrollida, kas on isset($_SESSION['username']) ja kui jah, siis kasutada seda väärtust, kui ei, siis kuvada sisselogimise vorm. Väljalogimisel piisab siis session_destroy() kasutamisest.
Sobivad õpetused lugemiseks, umbes selles järjekorras:
- PHP
- Väikese ajaloolise ülevaate leiad wikipeediast
- Põhiõpetus on php oma saidil: loe sealt kõigepealt sissejuhatavat tutoriali
- W3school-si php tutorial on samuti päris OK.
- SQL, loe selles järjekorras
- SQL hea esimene kiirsissejuhatus
- enamateks detailideks loe w3schools'i tutoriali
- hea pikem tutorial alternatiivina eelmistele ja selle sees alternatiivne cheat-sheet
- mysql esmane tutorial ja vaata veidi mysql manuaali
- SQL injection vt ka seda ja seda ja seda
- SQL PHP-s, loe selles järjekorras
- Erinevad vormivälja-tüübid peale hariliku <input type=text>
- w3schools vormi-sissejuhatus
- väga mahukas ka detailne info: vormid html standardis ja selle eriti oluline osa
- suhteliselt ok vorminäide php kontekstis
Siit leiad eelmise aasta versiooni: ITV0110 4. töö 2010