<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=ITV0110_4._t%C3%B6%C3%B6_2012</id>
	<title>ITV0110 4. töö 2012 - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=ITV0110_4._t%C3%B6%C3%B6_2012"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_4._t%C3%B6%C3%B6_2012&amp;action=history"/>
	<updated>2026-10-28T23:36:29Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_4._t%C3%B6%C3%B6_2012&amp;diff=11028&amp;oldid=prev</id>
		<title>Tammet – 12. november 2013, kell 11:10</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_4._t%C3%B6%C3%B6_2012&amp;diff=11028&amp;oldid=prev"/>
		<updated>2013-11-12T11:10:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 12. november 2013, kell 13:10&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;1. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;1. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Pilt:Rate2.jpg|left]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Pilt:Rate2.jpg|left]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== &amp;lt;font color=&quot;red&quot;&amp;gt;See on arhiveeritud 2012 aasta töö, mitte hetkel kehtiv töö!&amp;lt;/font&amp;gt; ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Mis tuleb teha ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Mis tuleb teha ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_4._t%C3%B6%C3%B6_2012&amp;diff=11027&amp;oldid=prev</id>
		<title>Tammet: Uus lehekülg: &#039;left  == Mis tuleb teha ==  Neljanda praktikumi ülesandeks on ehitada &lt;b&gt;avalik loengute hindamise ja märkmete sait&lt;/b&gt;, kasutades selleks PHP-d ja MySQL-i (...&#039;</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_4._t%C3%B6%C3%B6_2012&amp;diff=11027&amp;oldid=prev"/>
		<updated>2013-11-12T11:09:18Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;&lt;a href=&quot;/wiki/Fail:Rate2.jpg&quot; title=&quot;Fail:Rate2.jpg&quot;&gt;left&lt;/a&gt;  == Mis tuleb teha ==  Neljanda praktikumi ülesandeks on ehitada &amp;lt;b&amp;gt;avalik loengute hindamise ja märkmete sait&amp;lt;/b&amp;gt;, kasutades selleks PHP-d ja MySQL-i (...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Pilt:Rate2.jpg|left]]&lt;br /&gt;
&lt;br /&gt;
== Mis tuleb teha ==&lt;br /&gt;
&lt;br /&gt;
Neljanda praktikumi ülesandeks on ehitada &amp;lt;b&amp;gt;avalik loengute hindamise ja märkmete sait&amp;lt;/b&amp;gt;, kasutades selleks PHP-d ja MySQL-i (või Postgresqli).&lt;br /&gt;
&lt;br /&gt;
== Loengusaidi detailid, praktikumi arvestamine ja hindamine ==&lt;br /&gt;
&lt;br /&gt;
Praktikum annab kuni 15 punkti, sellele võivad lisanduda ekstrapunktid.&lt;br /&gt;
&lt;br /&gt;
Saidi &amp;lt;b&amp;gt;põhifunktsioonid&amp;lt;/b&amp;gt; on:&lt;br /&gt;
&lt;br /&gt;
* Loengu valimine valikuboksist, talle hinde panemine (1-5) ja märkmete sisestamine. Kas hinne või märkmed peaks olema antud, tühja infot ära salvesta. Salvestatud loeng ei pea olema sinu sisestatud: üldiselt võivadki loengul olla mitme eri tudengi hinded ja märkmed. Märkmed oleks lihtsalt üks keskmise suurusega plain-tekstiväli. &lt;br /&gt;
* Uue loengu lisamine valikuboksi. Loeng on määratud koodi, kuupäeva ja algusajaga. Uue loengu lisamiseks peaks olema kaks võimalust:&lt;br /&gt;
** Valid mõne vana olemasoleva loengu ja paned talle uue kuupäeva ja/või algusaja. See lisab baasi siis uue konkreetse loengu, kasutades vana koodi.&lt;br /&gt;
** Sisestad päris uue loengu: kood, nimi ja samuti kuupäev ning algusaeg.&lt;br /&gt;
* Valikuboksist võetud loengu hinnete ja märkmete kuvamine (kes iganes sisestanud) mingis omavalitud järjekorras (ei pea olema kasutaja poolt sorteeritav).&lt;br /&gt;
&lt;br /&gt;
Kui oled need põhifunktsioonid OK realiseerinud, saad praktikumi arvestatud ja 8 punkti. Praktikumi ei arvestata, kui nendes osades on suuremad puudujäägid.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Täiendavad funktsioonid&amp;lt;/b&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Järgmised funktsioonid on täiendavad ja nende tegemine annab kokku lisaks 7 punkti. Kui teed neist osad, saad ka vastavalt osalised lisapunktid.&lt;br /&gt;
&lt;br /&gt;
*Konto, sisselogimine, hinnete/märkmete seostamine endaga:&lt;br /&gt;
** Oma konto tegemine: salvestad uue kasutajanime koos parooli, päris-nime ja kontaktinfoga. Viimased kaks on lihtsalt väikesed tekstiväljad ja nende täitmine ei ole kasutajale kohustuslik.&lt;br /&gt;
** Oma kontosse sisselogimine: ilma sisse logimata ei lasta midagi teha (peale uue konto tegemise). Kui oled sisse loginud, siis püsid sisse logituna võimalikult kaua (soovitav sessioonicookiede kasutamine).&lt;br /&gt;
** Oma lisatud hinded ja märkmed peavad olema automaatselt seotud sinu kasutajanimega, enda sisestatut võib muuta, teiste lisatud hindeid/märkmeid muuta ei saa.&lt;br /&gt;
** Hinde/märkmete juures on näha ka kasutajainfo.&lt;br /&gt;
* Loengu ja märkmete mugavam valik ja kontroll:&lt;br /&gt;
** Kui valid loengu, kuhu oled juba hinde/märkmed pannud, pakutakse seda sulle esimesena ja saad muuta: ei saa sisestada teist hinnet/märkmeid samale loengule.&lt;br /&gt;
** Mugav automaatne loenguvalik olemasolevate seast: esimesena pakutakse alati loenguid, mis on hetkel käimas või äsja lõppenud, seejuures eelistades neid, mida oled kas ise kunagi sisestanud või mida oled ise kunagi kommenteerinud (sama koodi ja sama aastaga, mitte tingimata sama kuupäevaga) või mis hakkavad sama XXX kolmetähelise koodiga, mida oled sisestanud/kommenteerinud. Siin pead veidi mõtlema, kuidas loenguvalikut mugavamaks teha.&lt;br /&gt;
** Uue loengu sisestamisel kontrollitakse, ega seda pole keegi juba sisestanud (ja siis ei lasta).&lt;br /&gt;
&lt;br /&gt;
Lisaks 15 punktile on võimalik saada ekstrapunkte, kui teed saidist täiendavalt (mitte selle asemel) korralikult &amp;lt;b&amp;gt;mobiilile optimeeritud veebiversiooni&amp;lt;/b&amp;gt; (mitte native appi).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Reaalses laiemalt kasutatavas rakenduses&amp;lt;/b&amp;gt; oleks vaja lisaks mitmeid asju, millega meie praksis aga &amp;lt;b&amp;gt;ei pea&amp;lt;/b&amp;gt; tegelema (kuid ei ole ka keelatud):&lt;br /&gt;
&lt;br /&gt;
* Loenguvaliku veel mugavamaks tegemine ja potentsiaalselt ülipika loenguvaliku listi mõistlik lühendamine.&lt;br /&gt;
* Oma kommentaaride/märkuste filter ühe loengusarja lõikes.&lt;br /&gt;
* Loengute statistika: &lt;br /&gt;
** Eeskätt suure tabeli näol, kus loengud on toodud (koodi ja aasta kaupa, mitte kuupäeva kaupa) koos nende senise keskmise hinde, hinnete arvu, kommentaaride arvu ja kommentaaride kogupikkusega. Sorteerimine võiks käia aasta ja koodi järgi. &lt;br /&gt;
** Võimalikud täiendavad ideed, näiteks ühe boksist valitud koodiga loengu keskmiste hinnete/kommentaaride/märkmete tabel - ja miks mitte graafikud - on samuti teretulnud.&lt;br /&gt;
* Erinevad turvaküsimused ([http://xkcd.com/327/ sql injection] jne).&lt;br /&gt;
* Kasutajakonto tegemise kontrollid emaili ja captcha-ga või sidumine Google, Facebooki vms OpenAuth kontoga.&lt;br /&gt;
* Pikkade loetelude jagamine lehekülgedeks.&lt;br /&gt;
* Loengu/tekstijupi/kasutaja/jne otsingud.&lt;br /&gt;
* Superuseri account, kes võib muuta ja kustutada teiste sisestatut.&lt;br /&gt;
* ... ja kindlasti veel midagi ...&lt;br /&gt;
&lt;br /&gt;
Kui mõne tudengi rakendus osutub piisavalt heaks, siis tahaks hakata seda TTÜ poolt ise hostima ja promoma laiemaks kasutuseks ülikooli sees. Kui mitu osutub piisavalt heaks, siis korraldame valikuks väikese konkursi/hääletuse.&lt;br /&gt;
&lt;br /&gt;
Taustaks: võrgurakendused II aines on üheks valikuvõimaluseks [[Vorgurakendused 2 prax 2 2012|teisest praksist]] analoogilise süsteemi ehitamine, aga puht mobiiliappina, mitte veebirakendusena, samuti peab seal serveris kasutama Google App Enginet.&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogilised nõuded ==&lt;br /&gt;
&lt;br /&gt;
* Kõik serverirakendused tuleb realiseerida [http://www.php.net/ PHP-s] ja andmeid tuleb hoida kas [http://www.mysql.com MySQL-s] või [http://www.postgresql.org/ 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 [http://www.postgresql.org/ Postgresi].&lt;br /&gt;
* Rakendus peab olema võrgus vabalt brauseriga ligipääsetav, mitte lihtsalt töötama näiteks sinu laptopis.&lt;br /&gt;
* Serverarvutina võid - nagu teises praktikumis - kasutada kas dijkstrat või omaenda vabalt valitud lemmikserverit.&lt;br /&gt;
&lt;br /&gt;
== Abi ja soovitusi ==&lt;br /&gt;
&lt;br /&gt;
Esiteks: tutvu PHP ja SQL materjalidega, kas kursuse esilehelt või koopiana siitsamast:&lt;br /&gt;
&lt;br /&gt;
* Vaata [[Vorgurakendused 1 SQL naited loengust]]. &lt;br /&gt;
* Vaata [[lihtsaid php ja mysql näiteid]] loengust. &lt;br /&gt;
&lt;br /&gt;
NB! Uus 2012 andmebaas on nimega loengud, kasutajanimi on student ja parool on rate. See on kõigile ühine. Näited kasutavad &amp;lt;b&amp;gt;vana&amp;lt;/b&amp;gt; andmebaasi&lt;br /&gt;
ja kasutajat, mis samuti töötab, kuid soovitav on kasutada siis mainitud uut baasi loengud ja kasutajanime student.&lt;br /&gt;
&lt;br /&gt;
Ideid ja näpunäiteid:&lt;br /&gt;
&lt;br /&gt;
* 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. &lt;br /&gt;
* 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.&lt;br /&gt;
* Erinevad tegevused (a la lingi lisamine, votemine, sisse logimine) saad realiseerida nii, et php lehel vaadatakse, mis argumendid on antud (näiteks loengud.php?username=xx&amp;amp;password=yy peale tehakse sisse logimine, loengud.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.&lt;br /&gt;
* Debugimise jaoks on lihtsam kasutada vormidel method=&amp;quot;get&amp;quot;, siis näed brauserist, et mis parameetrid saadeti.&lt;br /&gt;
* Samuti on debugimise juures abiks trükkida välja (echo) kokkuklopsitud sql päring tervikuna, et kontrollida, kas sai selline, nagu tahtsid.&lt;br /&gt;
* 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[&amp;#039;username&amp;#039;] ja edaspidi alati kontrollida, kas on isset($_SESSION[&amp;#039;username&amp;#039;]) ja kui jah, siis kasutada seda väärtust, kui ei, siis kuvada sisselogimise vorm. Väljalogimisel piisab siis session_destroy() kasutamisest.&lt;br /&gt;
&lt;br /&gt;
== Sobivad õpetused lugemiseks ==&lt;br /&gt;
&lt;br /&gt;
Umbes selles järjekorras:&lt;br /&gt;
&lt;br /&gt;
; PHP&lt;br /&gt;
&lt;br /&gt;
* Väikese ajaloolise ülevaate leiad [http://en.wikipedia.org/wiki/PHP wikipeediast]&lt;br /&gt;
* Põhiõpetus on [http://www.php.net/manual/en/ php oma saidil]: loe sealt kõigepealt [http://www.php.net/manual/en/tutorial.php sissejuhatavat tutoriali]&lt;br /&gt;
* [http://w3schools.com/php/default.asp W3school-si php tutorial] on samuti päris OK.&lt;br /&gt;
&lt;br /&gt;
; SQL, loe selles järjekorras:&lt;br /&gt;
&lt;br /&gt;
* [http://web.njit.edu/~song/courses/is698/SQL_tutorials.ppt SQL hea esimene kiirsissejuhatus]&lt;br /&gt;
* [http://www.w3schools.com/sql/default.asp enamateks detailideks loe w3schools&amp;#039;i tutoriali]&lt;br /&gt;
* [http://www.sql-tutorial.net/SQL-tutorial.asp hea pikem tutorial alternatiivina eelmistele] ja [http://www.sql-tutorial.net/SQL-Cheat-Sheet.pdf selle sees alternatiivne cheat-sheet]&lt;br /&gt;
* [http://dev.mysql.com/doc/refman/5.0/en/tutorial.html mysql esmane tutorial] ja [http://dev.mysql.com/doc/refman/5.0/en/index.html vaata veidi mysql manuaali]&lt;br /&gt;
* [http://blogs.techrepublic.com.com/security/?p=2368 SQL injection] vt ka [http://lh6.ggpht.com/_5YF7KQZuZS0/S6dvFXu5OoI/AAAAAAAACWM/qTcVpMxcDnA/licence%20plate%20camera%20sql%20injection_2%5B3%5D.jpg?imgmax=800 seda] ja [http://www.schneier.com/blog/archives/2010/10/pen-and-paper_s.html seda] ja [http://alicebobandmallory.com/articles/2010/09/23/did-little-bobby-tables-migrate-to-sweden seda]&lt;br /&gt;
&lt;br /&gt;
; SQL PHP-s, loe selles järjekorras:&lt;br /&gt;
&lt;br /&gt;
* [http://dmsa.concordia.ca/tutorial_files/shortsql.ppt mysql PHP-s: ppt] &lt;br /&gt;
* [http://www.tizag.com/mysqlTutorial/ mysql PHP-s: veebitutorial]&lt;br /&gt;
* [http://www.w3schools.com/php/default.asp w3schools PHP tutorial all vasakul Mysql blokk]&lt;br /&gt;
&lt;br /&gt;
; Erinevad vormivälja-tüübid peale hariliku &amp;amp;lt;input type=text&amp;amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3schools.com/html/html_forms.asp w3schools vormi-sissejuhatus]&lt;br /&gt;
* väga mahukas ka detailne info: [http://www.w3.org/TR/html401/interact/forms.html vormid html standardis] ja selle [http://www.w3.org/TR/html401/interact/forms.html#h-17.4 eriti oluline osa]&lt;br /&gt;
* [http://www.learnphp-tutorial.com/HtmlForms.cfm suhteliselt ok vorminäide php kontekstis]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Siit leiad eelmise aasta versiooni: [[ITV0110 4. töö 2011]]&lt;/div&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
</feed>