Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Poiminta tietokannasta ja linkitys edelleen

Sivun loppuun

mercier [08.06.2011 09:43:09]

#

Olen ohjelmoinut tavallisia ohjelmia (Q/Basic, C) ja Excel-sovelluksia, mutta nyt kun on aikaa, yritän aloitella webbiohjelmointia. Aluksi olisi tavoitteena:
- tekstitiedosto (tai vaikkapa MYSQL-kanta), jossa on sarakkeissa tietoa, esim. 1 RUOKA1 ja sen aineet AINE1, AINE2, AINE3 jne, sekä lyhyt valmistuohje. Seuraavalla rivillä 2 RUOKA2 jne.
- selaimen käyttäjä antaa jonkun rivin numeron ja saa sivun, jossa on ruuan nimi ja sen raaka-aineet (taulukko).
- käyttäjä valitsee sivulta jonkin aineen, vaikka AINE2 ja nyt pitäisi avautua samalle sivulle toinen taulukko, jossa on lista RUOKAX, RUOKAY, RUOKAZ jne, joissa tämä AINE2 esiintyy.
- käyttäjä voi sen jälkeen valita jonkin muun aineen, vaikka AINE5 ja nyt taulukko päivittyy, ja siinä on lista RUOKAX, RUOKA1, RUOKA8 jne, joissa tämä AINE5 esiintyy.
- ja tästä listasta pitäisi voida valita joku ruoka, esim RUOKAY, jolloin avautuu tämän RUOKAY:n vastaava sivu.
- valmistusohje voisi olla heti sivulla tai siinä on linkki, josta se avautuu (esim. pop-up tai erillinen ikkuna).

Sitten kysymys: Millä työkaluilla tämä kannattaisi toteuttaa?
Miten kannattaisi aloittaa? Malleja?
Varsinainen taulukko pitäisi olla selainkäyttäjien saavuttamattomissa, käyttöliittymän kautta näkyviin tulee yksi ruokasivu kerrallaan ja niissä voi siis seikkailla.
PHP ja HTML on jonkin verran tuttuja. Tarkoitus ei ole tehdä siis jokaisesta ruuasta omaa HTML-sivua.

Metabolix [08.06.2011 12:13:26]

#

Voit tehdä tuon helposti millä tahansa web-ohjelmointiin sopivalla kielellä. PHP on sikäli luonteva valinta, että se toimii käytännössä kaikilla palvelimilla, mutta jos vaihtoehtoja suinkin on ja jokin muu kieli kiinnostaa, valitse vapaasti.

Aloita suunnittelemalla tietokanta ja tarvittavat hakukyselyt. Muista hyvät koodaustavat eli kirjoita toiminta ja näkymä erikseen ja suorita kaikki sivun toiminnallisuus (esim. tietokantahaut), ennen kuin rupeat tulostamaan sisältöä.

Tietokannassa esittämäsi yhden taulun systeemi olisi kohtalaisen huono, koska eri ruoissa on eri määriä aineksia, minkä vuoksi sarakkeita tarvittaisiin varalta hirveä määrä (ja useimmat jäisivät yleensä tyhjiksi). Hyvä ratkaisu olisi tehdä erikseen taulu aineksista, taulu ruoista (ohjeineen) ja yhdistävä taulu, jossa olisi yksi ruoka, yksi tarvittava aines ja aineksen määrä. Esimerkiksi kaurapuuro tallentuisi tauluihin näin:

aines:
1: vesi
2: kaurahiutaleet

ruoka:
1: kaurapuuro, "kuumenna vesi kiehuvaksi, lisää hiutaleet, sekoita"

ruoka_ja_aines:
1: 1: 0,5 litraa
1: 2: 0,2 litraa

Tällä kaavalla samanlainen aines esiintyisi tietokannassa vain kerran eikä ainesten määrää ruoassa ole ennalta määrätty. Lisäksi tällaisesta tietokannasta olisi helppo hakea ruokia, joissa on tai ei ole tiettyjä aineksia.

mercier [08.06.2011 15:37:23]

#

Aivan erinomaista. Olin kertomassa ainemäärät tekstissä, mutta tietenkin parempi näin! Aiemmin olen käytännössä toiminut aina yhden tietokannan varassa, ei ole ollut muuhun tarvetta.

Pohdituttaa vielä se, että miten esimerkiksi sivulle "kaurapuuro" generoituu toiminto, että klikkaamalla sanaa "kaurahiutaleet" toteutuu haku muihin ruokiin, joissa on kaurahiutaleita. Olen PHP:llä toteuttanut yksinkertaisia hakuja, mutta en niiden tuloksiin generoituvia eteenpäin johtavia linkkejä, kun jostain syystä olen ollut käsityksessä, että se ei ole mahdollista.
Tästä dynaamisuudesta jos olisi hyviä esimerkkejä, oikein simppeleitä - sellaisia jotka voisi ymmärtää.

manninen [08.06.2011 15:46:54]

#

Luulen, että avain sana kyselyyn sinulla on LIKE

esim :

$k ="SELECT id, aines FROM aines WHERE aines LIKE '%kaurahiutale%'";
if(!$t = mysql_query($k)) return;

while($row = mysql_fetch_assoc($t)){
 $id    = intval($row['id']);
 $ruoka = htmlspecialchars($row['ruoka']);

 echo '<a href="jokinosoite.php?id='.$id'.">'.$ruoka .'</a>';
}

Jos oikein ymmärsin mitä haet takaa! (ei testattu)

Lebe80 [08.06.2011 15:48:25]

#

mercier kirjoitti:

Pohdituttaa vielä se, että miten esimerkiksi sivulle "kaurapuuro" generoituu toiminto, että klikkaamalla sanaa "kaurahiutaleet" toteutuu haku muihin ruokiin, joissa on kaurahiutaleita.

Tällöin vain otat kaurahiutaleiden juoksevan id-numeron (jonka olet saanut samalla, kun listaat kyseisen ruoan käytettyjä ruoka-aineita) ja listaat kaikki ruoat, joissa tämä id esiintyy. Tietokannalla tämä on vain yksi haku, joten se onnistuu erittäin yksinkertaisesti.

Metabolix [08.06.2011 16:31:59]

#

manninen, vapaassa tekstissä ja LIKE-haussa on montakin huonoa puolta:

Eli kyllä kunnollinen tietokantarakenne auttaa.

Linkki eteenpäin näyttäisi yksinkertaisesti tältä: <a href="aine.php?id=123">kaurahiutaleet</a>, missä 123 on kaurahiutaleiden id tietokannassa. Jotta linkki olisi kävijälle mukavampi, voit toki tehdä linkin myös aineksen nimellä tai lisätä nimen linkkiin aivan ylimääräisenä tietona (vaikka id=123-kaurahiutaleet, jolloin PHP:ssä intval-funktiolla saa erotettua numeron).

Jos haluat joskus laajentaa systeemiä, voit liittää ainessivuille (ainakin erikoisempiin) vielä kuvaukset aineksista itsestään, esimerkiksi historiaa tai tietoa mahdollisista allergioista. Lisäksi voit tehdä neljännen taulun, johon käyttäjät voivat syöttää ainesten hintoja (ja eri merkkien laatuarvioita), jolloin kävijä saa oudommastakin purkista jonkinlaisen ennakkokäsityksen.

mercier [08.06.2011 17:11:47]

#

Alankohan aavistaa logiikkaa.. Tuo laajentaminen tulee toki mieleen heti, kun yhden toimivan viritelmän saan tehtyä, niin käy joka projektissa :-) Sivusto olisi siis:

KAURAPUURO
Ohje: Kuumenna vesi kiehuvaksi, lisää hiutaleet, sekoita.
Aineet:
- Vesi 0,5 litraa
- Kaurahiutaleet 0,2 litraa

Ja kun käyttäjä klikkaa kohtaa "- Kaurahiutaleet", sivusto näyttää tältä (vesi vastaavasti tulostaisi melkein kaikki ruuat):

KAURAPUURO
Ohje: Kuumenna vesi kiehuvaksi, lisää hiutaleet, sekoita.
Aineet:
- Vesi 0,5 litraa
- Kaurahiutaleet 0,2 litraa
Muut, joissa aineena Kaurahiutaleet:
- Kaurapulla (ja tässä linkki joka tekee sivun Kaurapulla)
- Kauramysli (ja tässä linkki joka tekee sivun Kauramysli)

Dynaamisuudessa on jokin pieni? juttu mitä en vielä tajua, kun sellaisen kanssa en ole ollut (tietääkseni) koodin puolelta tekemisissä. Tätä linkkiä ei siis kirjoiteta käsin, vaan miten se synnytetään tietokannasta? Toisessa ruuassa voi olla 5 ainesosa.
<a href="aine.php?id=123">kaurahiutaleet</a>

Hennkka [08.06.2011 18:06:08]

#

Jokseenkin näin...

<a href="aine.php?id=<?php echo $aine['id']; ?>"><?php echo $aine['nimi']; ?></a>
(Testaamaton)

Ennen tuota sinun pitää lukea tietokannasta haluttu rivi taulukkoon $aine.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta