Hei!
Miten kannattaisi alkaa rakentaa tuommoista "listaa" php:llä. Ajatuksena olisi laittaa tiedot yhteen .txt tiedostoon (Koska en osaa MYsql:llä sitä tehdä. Miten saisin halvimman ja kalleimman bensan /dieselin hinnan vaikka etusivulle kun tiedot ovat 1 tiedostossa? Miten hinnan muuttaminen onnistuisi?
toivottavasti joku tästä jotain ymmärtäisi, olisi kiva saada toimimaan kun on bensa niin kallista. Kaiken maailman vinkit kelpaa!
esim: http://polttoaine.net/
1. käytä kaksi ulotteista taulukko.
2. Array MultiSort lajittelee taulukon https://www.php.net/manual/en/function.array-multisort.php
3. serialisoi taulukon ja talentaminen tiedostoon
https://www.php.net/manual/en/function.
4. unserialize taulukon lukeminen tiedostosta
https://www.php.net/manual/en/function.
Tietysti fopen, fwrite, fclose, jne. tallentamiseen avuksi.
Jos MySQL on käytössä, suosittelen ehdottomasti opettelemaan sen käytön. Elämä helpottuu huomattavasti kun ei tarvita erikoisviritelmiä joita tekstitiedostot taas vaativat.
Aluksihan pitää tietää mitä tietoja tarvitaan. Näitä olisi ainakin:
- Ketju
- Asema
- Hinta 95E
- Hinta 98E
- Hinta Diesel
Lisäksi suosittelisin päivämääräkohtaista hinnoittelua eli mukaan tarvittaisiin myös päivämäärä (esimerkiksi jokaisen päivän hinnat omiin tekstitiedostoihin 2005-07-19.txt, 2005-07-20.txt jne.).
Jos tietokantapuolelta katsottaisiin, olisi rakenne melko lailla seuraava:
KETJU ASEMA/ \ASEMA HINTA/ \HINTA HINTA| |HINTA HINTA| |HINTA \PVM PVM/
ja tietokantataulut voisivat olla vaikka:
# Ketjut CREATE TABLE ketjut ( id TINYINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, ketju TINYTEXT NOT NULL # Jos haluat esim. pääkonttorin tietoja tmv. ne voi lisätä tähän ); # Asemat, linkittyy ketjuihin (monen suhde yhteen) CREATE TABLE asemat ( id MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, ketjut_id TINYINT UNSIGNED NOT NULL, asema TINYTEXT NOT NULL # Jos haluat aseman osoitetietoja tmv. tulisi ne tähän ); # Hinnat, linkittyy asemiin (monen suhde yhteen) CREATE TABLE hinnat ( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, asemat_id MEDIUMINT UNSIGNED NOT NULL, ryhma TINYTEXT NOT NULL, # esim. 95E pvm DATE NOT NULL, # esim. 2005-07-19 hinta DECIMAL NOT NULL # esim. 1.12 );
Nyt jos haluaisimme lisätä esimerkiksi Teboil Malmin tämän päivän hinnat, lisättäisiin aluksi ketjuun Teboil (ellei sitä siellä olisi), tämän jälkeen lisättäisiin asemiin Malmi (linkitettynä Ketjuun Teboil, ellei asemaa jo olisi) sekä lopuksi päivän hinnat (95E, 98E ja Diesel).
Seuraavaksi haluttaisiin tämän päivän hintatiedot, eli tehtäisiin vaan kysely:
SELECT a.ryhma, a.hinta, b.asema, c.ketju FROM hinnat a LEFT JOIN asemat b ON (a.asemat_id = b.id) LEFT JOIN ketjut c ON (b.ketjut_id = c.id) WHERE a.pvm = NOW() ORDER BY c.ketju ASC, b.asema ASC, a.ryhma ASC
ja tuloksena palautuisi:
95E 1.02 Isojako A24 98E 1.12 Isojako A24 Diesel 0.88 Isojako A24 95E 1.12 Malmi Teboil 98E 1.22 Malmi Teboil Diesel 0.92 Malmi Teboil ...
Josta olisikin elämää helpompi parsia listaa jos jonkinnäköistä. Jos todella huruksi haluaisi, erottelisi vielä ryhmät omaan relaatiotauluunsa.
Siinä alkua, seuraavana olisi sinun vuoro aloittaa näpertäminen, ja kysyä saa aina kun tökkää vastaan.
Tuo tietojen lisäys ei meikäläiseltä onnistu, luin tuon putkan php oppaan läpi, muttä siellä ei puhuttu tietojen lisäämisestä mitään mysql kantaan. Tommoisella olen yrittänyt(varmaan ihan mettässä olen nyt)
<?php $id = $_GET["id"]; $ketjut_id = $_GET["ketjut_id"]; $asema = $_GET["asema"]; //yhteys ulkoiselle palvelimelle $yhteys = mysql_connect("localhost", "tono", "*****"); mysql_select_db("tono", $yhteys); $sql = 'INSERT INTO `asemat` (`id`, `ketjut_id`, `asema`) VALUES (''$id'', ''$ketjut_id'', ''$asema'')'; mysql_close($yhteys); ?>
Elikkäs mikäs tossa mättää? Parse erroria pukkaa.
taulut olen luonyt mysliin phpMyadminin avulla.
täytyis varmaan mennä etti kirjastosta joku mysql kirja, vai onko netissä hyviä oppaita?
Kiitos kaikista vinkeistä!
Kokeileppa tällä:
$sql = "INSERT INTO `asemat` (id, ketjut_id, asema) VALUES ('".$id."', '".$ketjut_id."', '".$asema."')";
EDIT: huomasin, että tuo id on kai AUTO_INCREMENT, joten sitä ei tarvitse lisätä, eli näin:
$sql = "INSERT INTO `asemat` (ketjut_id, asema) VALUES (".$ketjut_id."', '".$asema."')";
Lomakkeen syötteet tulee tarkistaa ja numeeristen kenttien ympärille ei tarvitse hipsuja, vaikkakin MySQL taitaa osata muuttaa merkkijonon numeroksi tarvittaessa.
Vali vali vali... Ei ole tarkoitus olla ilonpilaaja, mutta pääset loppupeleissä helpommalla, kun opettelet tekemään asiat heti alusta lähtien oikein :)
Ainankin näin aluksi pääduin txt tiedostoihin, mutta kiitos vingeistä. Joskus tulevaisuudessa, sitten kun osaan kunnolla php:tä ja Mysql:llää, niin ehkä sitten siirryn siihen.
Jos joku haluaa tutustua: http://omena.org/~tono/
Aihe on jo aika vanha, joten et voi enää vastata siihen.