ITV0110 4. töö: Andmebaasiga serverirakendus php-s

Allikas: Lambda
Twitter2013.png

NB! See on 2013 arhiiv, mitte praegu tegemist ootav ülesanne

Mis tuleb teha

Neljanda praktikumi ülesandeks on ehitada mini-Twitter, kasutades selleks PHP-d ja MySQL-i (või Postgresqli).

Arusaadavalt on sinu loodav süsteem väga palju lihtsam, kui päris Twitter, kuid baasfunktsionaalsus on tal sama.

Kui sa juhtumisi ei ole Twitteri kasutaja, siis tee endale konto 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:

  • Oma accoundi tegemine ja oma info sisestamine (parooli pole vaja realiseerida, kasutajatunnus aga küll). Accoundis pead saama anda vähemalt oma kasutajatunnuse, nime ja emaili vabatekstina.
  • Kasutajate listi kuvamine või otsing ja valitud/leitud kasutaja jälgitavaks lisamine (follow).
  • Säutsu (tweet) lisamine.
  • Jälgitavate kasutajate säutsude kuvamine, alates kõige viimasest.

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 säutsude kuvamine.
  • Otsing säutsudest.
  • Retweet ja Reply nupud ja funktsionaalsus.
  • Sinu jälgijate (followers) ja sinu poolt jälgitavate (following) arvu kuvamine esilehel ja nende loetelude vaatamine, kui nupule/lingile klikid.
  • Oma pildi upload ja piltide kuvamine kasutajate juures.
  • Kvaliteetne kasutajaliides mobiilil.

Lisaks neile funktsionaalsustele (ja ka nende asemel) võib lisada muid huvitavaid mittetriviaalseid funktsionaalsusi, mis annavad siis samuti punkte lisaks baas-seitsmele.

Reaalses rakenduses hädavajalikud asjad, millega meie praksis aga ei pea tegelema (kuid ei ole ka keelatud ja korralikult tehtuna võib anda lisapunkte):

  • Juba sisestatud info muutmine ja kustutamine.
  • Paroolid ja turvaküsimused (sql injection jne)
  • Pikkade loetelude jagamine lehekülgedeks.
  • Kasutajakonto tegemise kontrollid emaili ja captcha-ga.

Tehnoloogilised nõuded

  • Kõik serverirakendused tuleb realiseerida PHP-s ja andmeid tuleb hoida kas MySQL-s või Postgresis. Pilte võib hoida failisüsteemis. 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:

NB! Uus 2012 andmebaas on nimega loengud, kasutajanimi on student ja parool on rate. See on kõigile ühine. Näited kasutavad vana andmebaasi ja kasutajat, mis samuti töötab, kuid soovitav on kasutada siis mainitud uut baasi loengud ja kasutajanime student.

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 sisse/väljalogimine säutsu lisamine, säutsude otsimine) saad realiseerida nii, et php lehel vaadatakse, mis argumendid on antud (näiteks twitter.php?username=xx&password=yy peale tehakse sisse logimine, twitter.php?op=logout peale väljalogimine 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.
  • Samuti on debugimise juures abiks trükkida välja (echo) kokkuklopsitud sql päring tervikuna, et kontrollida, kas sai selline, nagu tahtsid.
  • 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
SQL, loe selles järjekorras
SQL PHP-s, loe selles järjekorras
Erinevad vormivälja-tüübid peale hariliku <input type=text>


Siit leiad eelmise aasta versiooni: ITV0110 4. töö 2012 , vahetulemused 17 dets, ajut vrak 1