Hei.
Tarkoituksenani olisi tehdä php:tä käyttäen kohtuullisen simppeli saitti, jonka käyttötarkoitus on tehdä ammattikoululaisille työharjoittelusopimuksia.
Menurakenne
- Sopimukset
-- Tee uusi sopimus
- Opiskelijat
- Yritykset
Tietokannassa on kaikkea mahdollista sopimusten tekemiseen tarvittavaa tietoa, jota haetaan eri tilanteissa.
Uutta sopimusta tehtäessä ensin valitaan luokka (oppilasryhmä), sitten oppilas ja haetaan oppilaan tiedot omiin kenttiinsä lomakkeella. Sama yrityksen tietojen kanssa jne.
Opiskelijat -kohdasta pääsee näkymään, jossa oppilaitoksen kaikki koulutusohjelmat ja niiden mukaan lajitellut luokkatunnukset. Tunnusta klikkaamalla näkee luokan kaikki oppilaat ja kaikki heidän työharjoitteluhistoriansa jne. Yksi rivi, yksi oppilas.
Luokkanäkymästä voi valita opiskelijan, yrityksen, tehdyn sopimuksen jne.
Yritykset-kohdasta näkee kaikki oppilaitoksen yritykset. Nimeä klikkaamalla näkee yhteystiedot sekä yrityksessä työssäoppimassa olleiden oppilaiden tiedot.
Kaikkea kivaa rakentelen lisää koko ajan, mutta iski ajatus että ehkä tämän voisi tehdä helpomminkin.
Nyt on käytössä PHP, MySQL, JQuery. PDO olisi mukava integroida. Lisäksi olisiko jostain frameworkista hyötyä, kuten Zend?
Kirjoittelen html-demon osoitteeseen http://www.tyotie.fi/demo. Sieltä pääsee vähän kurkkimaan mitä mielessä liikkuu.
Eli miten kannattaisi alkaa toteuttamaan demon perusteella, kun lähes kaikki on avoinna?
Sinuna suunnittelisin seuraavaksi tietokannan ja laittaisin sinne pari esimerkkitapausta. Sitten muuttaisin nuo listaukset niin, että tiedot haetaan kannasta, ja tekisin lomakkeet tietojen lisäykseen. Viimeiseksi tekisin vaikeimman osan eli sopimuksen luonnin.
Itse tekisin tuollaisen yksinkertaisen järjestelmän ihan ilman frameworkkeja, koska koodia tulee melko vähän, mutta kyllä täältä löytyy niitäkin, jotka vannovat ehdottomasti frameworkkien nimeen pienissäkin projekteissa erilaisista tottumus-, tyyli- ja jatkokehityssyistä, joiden relevanssia voi sitten jokainen kohdallaan miettiä.
Suosittelen, että vaihdat UTF-8-enkoodaukseen ja hoidat huolella tietoturvan perusasiat kuten SQL-kyselyt, HTML:n tulostuksen, oikeuksien tarkistamisen ja salasanat. Muista lisäksi käyttää luokkia ja funktioita ja noudattaa MVC-mallia eli sitä, että tiedon hakeminen, lomakkeiden käsittely ja sivun tulostaminen ovat koodissa selvästi toisistaan erilliset vaiheet.
PDO on osa PHP:tä ja suorastaan helpoin tapa tietokantayhteyden käsittelyyn, ei siinä ole mitään integroimista.
Jos hyvät mutta aliarvostetut tekniikat kiinnostavat, tuossa projektissa olisi hyvä tilaisuus kokeilla XSL:n käyttöä HTML:n tuottamiseen.
jakestyles kirjoitti:
Lisäksi olisiko jostain frameworkista hyötyä, kuten Zend?
Zendin käytöstä tässä ko. projektissa voi olla montaa mieltä, mutta voi ainoastaan olla yhtä mieltä siitä että Zendin, (ZF2) opiskelu kannattaa joka tapauksessa niin miksipä ei sitten nyt.
Lisäksi ZF2 avulla saat tässäkin projektissa hyödynnettyä mm. front controller/reititys, MVC, lomakkeiden teko sekä tietojen validointi, monikielisyys, tietokantakäsittely TableGateway etc.
Ymmärtääkseni tietoturvasyistä kannattaa käyttää preparea PDOn kanssa. Onko seuraava päin hanuria tai miten "preparoin" oikeaoppisesti?
Tarkoituksena hakea kaikki unitit ja tehdä niistä objektit, joilla toistaiseksi vain name ominaisuutena.
# $dbh on haettu try-catchilla aikaisemmin $sth = $dbh->query('SELECT name FROM unit'); $sth->setFetchMode(PDO::FETCH_OBJ); while ($row = $sth->fetch()) { echo $row->name . " - "; }
Ymmärrän tällaisen koodin, kun pitää taulukko tavaraa tunkea tietokantaan
$data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' ); $sth = $dbh->prepare("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)"); $sth->execute($data);
Tai ilman taulukkoa
$sth = $dbh->prepare("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)"); $sth->bindParam(':name', 'Cathy'); $sth->bindParam(':addr', '9 Dark and Twisty'); $sth->bindParam(':city', 'Cardiff'); $sth->execute($data);
Noinhan se menee, paitsi bindParam-funktion sijaan noissa pitäisi olla bindValue. Kun prepare-kutsussa ei ole yhtäkään muuttujaa, asiat ovat hyvin.
Luin tuossa jonkun koodivinkin pari pv. sitten ja siellä sanottiin että aina pitäisi käyttää bindParam():ia oliko tämä nyt sitten väärää tietoa? Entä jos hommaan sekoitetaan mukaan bindValue(); ?
onko tuossa sitten vikaa jos tekee näin:
$sth = $dbh->prepare("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");
Kyllähän tuo asia on kohtuu selkeästi kerrottu bindParam()-metodin dokumentaatiossa. Ei noiden välillä ole mitään "oikeaoppisuuseroja" vaan ne tekevät eri asian ja niille molemmille on omat käyttötarkoituksensa. bindParam() asettaa muuttujan viittauksena ja bindValue() arvona. Jos et tiedä mitä edellinen lause tarkoittaa, niin todennäköisesti haluat käyttää aina bindValue()-metodia.
PDO:n käytöstä löytyy kyllä myös Putkan opas, jos php.netin manuska on liian raskasta luettavaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.