Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Bensa-asemien hintalista

tono [19.07.2005 17:44:27]

#

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/

panttu [19.07.2005 19:28:04]

#

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.serialize.php
4. unserialize taulukon lukeminen tiedostosta
https://www.php.net/manual/en/function.unserialize.php

Tietysti fopen, fwrite, fclose, jne. tallentamiseen avuksi.

leftover [19.07.2005 19:36:33]

#

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.

tono [19.07.2005 21:16:10]

#

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ä!

Bagard [19.07.2005 21:54:14]

#

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."')";

ajv [19.07.2005 22:02:46]

#

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 :)

tono [20.07.2005 20:14:19]

#

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/

Vastaus

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

Tietoa sivustosta