ohjeita web-sivuston tekijälle
Yksinkertaistetut tietokantayhteydet ovat varmasti yksi PHP:n parhaista ominaisuuksista. PHP:ssa on valmiit funktiot tunnetuimmille ja yleisimmille tietokantaohjelmistoille, kuten Informix, MySQL, Oracle ja PostgreSQL. Tässä lyhyessä katsauksessa tutustumme MySQL:n ja PHP:n toimintoihin, sillä MySQL on yleisimmin web-palvelimilla saatavilla oleva tietokantaohjelmisto.
Monet tietokannat käyttävät kielenään SQL:ää (Structured Query Language). SQL on varsin helppoa, sillä käskyt tulevat suoraan englannin kielestä. Hyvästä kielitaidosta on siis hyötyä.
Luokaamme esimerkki kaupasta, joka käyttää tietokantaa tuotetietojen tallentamiseen. Oletuksena on, että tietokannaksi on etukäteen valittu "kauppa".
CREATE TABLE tuotteet ( koodi int(10) NOT NULL, tuotenimi varchar(50), hinta float, PRIMARY KEY(koodi) );
Lisätkäämme tuotteita kauppaan INSERT-komennolla:
INSERT INTO tuotteet VALUES(1231231231,"Ykkösmaito 1l",4.00); INSERT INTO tuotteet VALUES(1231231232,"Kevytmaito 1l",5.00); INSERT INTO tuotteet VALUES(1231231233,"Taloussuklaa 200g",10.00);
Nyt olemme valmiita tuomaan tuotelista kaiken kansan ulottuville.
// Avataan yhteys tietokantapalvelimeen
mysql_connect("localhost","kayttajatunnus","salasana");
// Valitaan tietokanta
mysql_selectdb("kauppa");
// Suoritetaan haku tietokannasta ja tallennetaan linkki
// vastauksiin muuttujaan $result
$query = "SELECT koodi,tuotenimi,hinta FROM tuotteet
ORDER BY koodi";
$result = mysql_query($query);
?>
<table cellspacing=0 cellpadding=4 border=1>
<tr>
<th>Koodi</th>
<th>Tuote</th>
<th>Hinta</th>
</tr>
<?
/*
Vastausten läpi käydään silmukalla, joka suoritetaan niin monta
kertaa kuin vastausrivejä tuli kyselystä.
Jokaisella rivillä kutsutaan mysql_result-funktiota, jolla saadaan
tietyn sarakkeen arvo kyseiseltä riviltä.
*/
for($laskuri = 0; $laskuri < mysql_numrows($result); $laskuri++) {
?><tr>
<td><?echo mysql_result($result,$laskuri,"koodi")?></td>
<td><?echo mysql_result($result,$laskuri,"tuotenimi")?></td>
<td><?echo mysql_result($result,$laskuri,"hinta")?> mk</td>
</tr>
<?
}
?>
</table>
<?
// Suljetaan tietokantayhteys
mysql_close();
esimerkit/mysql.php
lähdekoodi
Lisätietoa tietokantojen mahdollisuuksista saa mm. MySQL:n ohjesivuilta.
Mitäs varten tuossa esimerkissä ei ole PHP alku ja loppu tagia...siis tämä kohdassa jossa sanotte "nyt olemme valmiita tuomaan tuotelistan kaiken kansan ulottuville".
Jos kukaan ei tiedä mitään MySQL:stä niin miten luulet hänen tietävänsä miten ylipäätään tietokannan voi tehdä. Sitähän vaaditaan kohdassa "Luokaamme esimerkki kaupasta, joka käyttää tietokantaa tuotetietojen tallentamiseen. Oletuksena on, että tietokannaksi on etukäteen valittu "kauppa". Voisitte edes kertoa mistä sen MySQL edes ylipäätään saa.
... Täydellisyyttä ei voi odottaa edes maksullisilta palveluilta.. Joten. Hyvä opashan tämä loppupeleissä kaikin puolin on, vaikken puoliakaan tajua.
17.10.2003 17:35Esimerkki koodissa oli muutama virhe. Itse sain koodin toimimaan kun lisäsin mysql_connectin (yllättäen :) ja $query muuttujassa oli liikaa merkkijono "sivut" liikaa. Toimiva koodi löytyy http://pilotti.kuopio.fi/~juhar/mysql.php.txt
Hyvä opas! :)
Aika surkea opas kun ei tos ees kerrota miten tota käytetään. Tossa vaan oli jotain koodia ,että olisit voinu kertoa tarkemmin noi asiat.
3.2.2004 22:31Loistavaa, hyvät sivut.. vähän lisää esimerkkejä!
Juu, hyvä opas on. Hienoa että jotkut jaksavat!
14.2.2004 00:15Hyvä opas mutta lisää sisältöä kaivattaisiin.
24.2.2004 09:20Kannattaako täällä nyt kenenkään alkaa haukkumaan paskaksi tätä opasta, jos ei ole itsellä tarjota parempaa? Kyllä kehittävät kommentit on eri asia kuin haukkuminen.
Hyvä ja selkeä opas, pääsin hyvin hajulle siitä mitä php on ja nyt voin alkaa sitä opiskelemaan kunnolla! Se on ilmeisesti tän oppaan tarkoituskin.
Aivan. Näitä sivuja ei kukaan tee kuin omaksi ja muiden iloksi ja hyödyksi. Niitä päivitetään sen mukaan kun tärkeämmät asiat antavat periksi.
Kaikki kommentointi, myös haukunta, on rakentavaa, mutta mielelläni luen myös miksi opas ei vastannut tarpeita. Juuri tällä tavalla tätäkin kehitetään, lukijoiden ehdoilla.
mitenkäs tuo tietoturvan laita tuossa connectissa jos koodissa näkyy käyttäjätunnukset? ihmettelin vain...
2.3.2004 21:00Tietoturva on tässäkin asiassa tärkeä.
Skripteille ei kannata antaa lukuoikeuksia muille kuin itselle. Salasana kannattaa myös tallentaa johonkin, mihin ei webin kautta pääse käsiksi. Tälläisiä hakemistoja on usein käyttäjätunnusten kotihakemistot. Sieltä niitä voidaan käyttää esimerkiksi PHP:n require- tai include-funktioilla.
Nämä on erittäin hyvät sivut, kiitokset ja hatunnosto sivujen luojalle ja ylläpitäjälle!
Olen saanut paljon apua html-koodaamiseeni näillä sivuilla!
Ai tähänkö tää php jo loppuikin. No ihan hyviä vinkkejä täältä sai. Mielenkiinto ainakin heräsi, pitänee yrittää itse väsäillä jotain.
31.5.2004 14:33muuten tosta create table jutust puuttuu
``-merkkejä ilman niit tulee parse error
voiko ton $result homman lukee jotenkin taulukkoon
3.6.2004 13:30SQL-tuloksen voi lukea taulukkoon monella eri tapaa. Muutama hyödyllinen ohje:
http://fi.php.net/manual/en/function.mysql-fetch-array.php
http://fi.php.net/manual/en/function.mysql-fetch-row.php
http://fi.php.net/manual/en/function.mysql-fetch-assoc.php
mmmm...
ei näin
for($laskuri = 0; $laskuri < mysql_numrows($result); $laskuri++) {
näin
for($laskuri = 0; $laskuri < mysql_num_rows($result); $laskuri++) {
muuten ihan jees.
kyllä funktioiden ja luokien käyttö kannattaisi opetella kunhan perusteet ovat hallinnassa. sivujen latautuminen nopeutuu _huomattavasti_
jos liikaa kiinnostaa niin klikkaile: ->
http://kompleksi.com/~mikki/swap/Page.txt
http://kompleksi.com/~mikki/swap/index.txt
kanta
http://kompleksi.com/~mikki/swap/musakanta.txt
ja tk-kaavio
http://kompleksi.com/~mikki/swap/tk-speks.doc
tosiaan. erittäin hyvä malli aloittelevalle, hukassaolevalle veppikoodarille, mutta todellinen toimivuus jää varmaan hiukan heikoksi.
muuten onnittelut!
eikö ois helpompi tehdä html:lillä?
20.10.2004 10:44puuttuuko tuosta dblink.php vai onko se tuon page.php koodin sisällä?
Fatal error: Cannot redeclare class page in c:\program files\apache group\apache\htdocs\musakanta\Page.php on line 10
tulee virheeksi.
Onko myös pakko tehdä tuo login.php.Kiitos neuvoista
Varmaan kannattaisi korvata nuo short tagit eli <? ihan tavallisilla tageilla eli <?php, joska monet palvelimet (MBnet) ovat ottaneet short tagit pois käytöstä.
2.2.2005 22:04mitä nois oli erikoista...eiks tollaset taulukot ja muut muka saa html:kin niin miks noin helppoihin pitäis php:tä käyttää
2.2.2005 22:06Ei oo voitu yhtään kunnon esimerkkiä täs näyttää...
No eihän MBNetissä oo edes tietokantoja...
8.4.2005 03:03Kiitokset hyvästä sivustosta!
Täällä vietetään yötä tehdessä omille sivuille tälläistä kommenttipalstaa vieraskirja tarkoitukseen, ja näistä sivuista oli apua aluksi käsittämään mitä PHP ja MySql on.
Mistään (niin täältä kuin monista kirjoistakaan) ei tunnu löytyvän miten SQL tietokanta tehdään, oletus oli että sellainen on jo olemassa. Jotka sellaisen haluavat oppia tekemään (ja hyvillä ohjeilla) kannattaa etsiä käsiinsä Rami Heinisuon kirja PHP ja MySQL.
Että semmottii, tsemmppiä vaan sullekki.
Kiitti tuosta PHP&MySQL-kirjavinkistä! Pitäis tässä kesän aikana väsätä sen verran kookkaat sivut, että parempi varmaan opetella tuo PHP-homma. Ongelma on vaan, että netti on melko satunnaisesti käytössä, niin jos sitä onnistus opettelu tuommosesta kirjasta paremmin. Oon vaan sikakauan ihmetelly että miten kaikki tekee tosi nättejä sivuja PHP:llä kun PHP-oppaissa ei oo semmosia juttuja opetettu. Avainsana taitaakin olla tuo MySQL, saapa nähä...
27.7.2005 21:44Muuten ihan kiva ohjesivu, mutta PHP:n ja MySQL:n kanssa kanssa kannattaisi mainita myös phpMyAdmin ohjelma (tai paremminkin itselle asennettava PHP-sivusto), jonka kanssa MySQL kantojen luominen ja ylläpito on tosi helppoa. Lisäksi phpMyAdmin on nykyään tosi hyvin suomennettu.
25.11.2005 22:14Alussa sain täältä hyvin apuja ja näiden sivujen ansiosta pääsin käsiksi PHP:n
Kiitos sille joka jaksoi :)
Osaatteko sanoa missä vika?
Warning: Wrong parameter count for mysql_result() in /home/thewarof/public_html/config/settingsload.php on line 7
<?php
include("config.php");
$link = mysql_connect("$host","$username","$password");
mysql_select_db($database,$link);
$result = mysql_query("SELECT adminemail FROM config");
echo mysql_result($result);
mysql_close($link);
?>
Virheilmoitus 'Wrong parameter count for mysql_result()' johtuu siitä, ettet ole antanut tarpeeksi parametrejä tuolle funktiolle.
Funktion syntaksi löytyy dokumentaatiosta http://fi.php.net/mysql_result . Pakollisia parametrejä on kaksi (annoit vain yhden, $result:n). Tämän lisäksi täytyy antaa rivin numero, jolta tulos haetaan.
Voisi ehkä kuvitella, että haet tätä:
echo mysql_result($result,0);
Anteeksi, mutta tässä voisi olla hieman juttua fieldeistä ja roweista. Itselläni oli hankaluuksia saada dataa luettua mysql:stä koska yritin kovasti saada toimimaan mutta kun kokeilin mysql_num_rows nii se anto 0, mutta kun kokeilin mysql_num_fields niin se antoi 2. Luulin että minulla oli 2 rowia eikä 2 fieldiä. Mitäköhän eroa näilläkin on?
30.1.2006 14:49row = rivi
field = kenttä
Rivi on siis tietue, jossa on useampia kenttiä. Saman resultin riveillä on aina samat kentät. Kentät taas ovat tietueen 'sarakkeita'.
Eli tällä tehdään lisää tuotteita kauppaan:
INSERT INTO tuotteet
VALUES(1231231233,"Taloussuklaa 200g",10.00);
Niin millä poistetaan tuote kaupasta? Tietty tuote?
PS. Voisitko mailata vastauksen tai mailata kun olet vastannut tänne? Kiitos.
SQL:n DELETE-komennolla voidaan poistaa taulusta rivejä.
'DELETE FROM tuotteet WHERE koodi = 101010' poistaa tuotteen, jonka koodi on 101010.
'DELETE FROM tuotteet' tyhjentää koko taulun. Varo tätä!
"Voisitte edes kertoa mistä sen MySQL edes ylipäätään saa."
Kuinka amatööri oikeen saa olla, että yrittää rakentaa teitokantasovellusta tältä pohjalta. Keskittyminen kun yhteen asiaan ei kestä edes yhden Google-haun vertaa.
Varmaan oltiin taas tekemässä jotain überhienoa verkkokauppaa jostain irc-vihjeestä innostuneena... mutta se oli 3 vuotta sitten.
Itse tutoriaali on hyvä.
mikki:
"kyllä funktioiden ja luokien käyttö kannattaisi opetella kunhan perusteet ovat hallinnassa. sivujen latautuminen nopeutuu _huomattavasti_"
Mistä olet tälläista lukenut?
tuhoo koko taulu
drop table taulu;
Hyvä opas! :D
17.1.2007 15:08Oikein hyvät sivu - kiitos ylläpitäjälle!
2.2.2007 14:34Googleta XAMPP 1.5.5. Paketissa Apache, MySQL yms..
12.2.2007 21:18Muutoin kyllä mielestäni hyvä html opas sivu, mutta en tajunnut tästä PHP osiosta yhtään mitään... Ja vielä vähemmän MySQL:stä... vaikka ne ovat asioita joita juuri haluan oppia...
15.6.2007 07:57Mite
21.5.2008 18:24Hyviä linkkejä pojat lähettäny. Meni vähän aikaa kahtoessa kaikki...