Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PDO: Create table

Sivun loppuun

dartvaneri [10.09.2011 20:28:31]

#

Moi! Olen jo hetken aikaa painiskellut alla olevan koodin pätkän kanssa, eli siis sen pitäisi lisätä uusi taulu. En tiedä mitä olen tehnyt väärin, mutta toi ei vain toimi.

$kysely = $yhteys->prepare("CREATE TABLE {$vuosi} (id INT PRIMARY KEY AUTO_INCREMENT, paivamaara TEXT, elain TEXT, paikka TEXT, kaataja TEXT)");
$kysely = $kysely->execute();

Metabolix [10.09.2011 20:45:29]

#

Mitä jos laittaisit Putkan oppaiden neuvojen mukaan virheilmoitukset näkyviin?

$yhteys->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
ini_set("error_reporting", E_ALL | E_STRICT);
ini_set("display_errors", 1);

En nyt muista ulkoa, mutta luultavasti CREATE TABLE ei sovi preparen kanssa käytettäväksi, vaan pitää käyttää suoraan exec-metodia.

dartvaneri [10.09.2011 21:06:21]

#

Ok, ei oikein antanut vastausat tohon ongelmaani.

Warning: Cannot modify header information - headers already sent by (output started at /Kotisivut/hirsistonmaja/indexulkoasu.css:255) in /Kotisivut/hirsistonmaja/Paivita.php on line 15

Rivillä 15 on seuraava koodi:

header("Location: Saalis");

Mutta tuon saaminen kuntoon ei ole ratkaisu sen kyselyn toimivuuteen, koska tämä kysely on ennen tuota headeria.

Macro [10.09.2011 21:14:53]

#

headers already sent -virheestä käydään kuukausittain keskustelua täällä. Miksei sitä voitaisi syöttää hakuun?

Virhe tarkoittaa, että olet tulostanut jotain sivulle ennen header-riviä. Korjaus: Poista kaikki tulostukset ennen header-riviä. Virheilmoituksessa on kerrottukkin, missä kohtaa virhe tulee.

makumaku [10.09.2011 21:43:49]

#

Kyllä tuon pitäisi kai toimia koska taulun nimi määritellään queryssä suoraan, eikä ->execute():n sisällä parametrina. Olisko vika ettö taulun nimi on joku numero, esim 2011. Kokeile:

$taulu_etuliite = "t_";
$kysely = $yhteys->prepare("CREATE TABLE {$taulu_etuliite}{$vuosi} (id INT PRIMARY KEY AUTO_INCREMENT, paivamaara TEXT, elain TEXT, paikka TEXT, kaataja TEXT)");
$kysely = $kysely->execute();

Lisäksi kannattaa kyllä miettiä vielä kerran että onko dynaamisten taulujen luonti varmasti tarpeellista, vai voiko kaikki taulut jo luoda ennen sovelluksen käyttöä.

Cornix [10.09.2011 22:03:03]

#

makumaku kirjoitti:

Lisäksi kannattaa kyllä miettiä vielä kerran että onko dynaamisten taulujen luonti varmasti tarpeellista, vai voiko kaikki taulut jo luoda ennen sovelluksen käyttöä.

Tilanteesta enempää tietämättä voisin myös veikata, että kannattaisi lisätä tuo vuosiluku yhdeksi sarakkeeksi tauluun. Kannasta voi sitten kysyä helposti SELECT-lauseella tietyn vuoden sisältävät rivit.

Teuro [10.09.2011 22:51:22]

#

Cornix kirjoitti:

Tilanteesta enempää tietämättä voisin myös veikata, että kannattaisi lisätä tuo vuosiluku yhdeksi sarakkeeksi tauluun. Kannasta voi sitten kysyä helposti SELECT-lauseella tietyn vuoden sisältävät rivit.

No ei kannata, vaan kannattaa kysellä vuoden mukaan suoraan päiväyksestä.

Cornix [10.09.2011 23:34:24]

#

Teuro kirjoitti:

Cornix kirjoitti:

Tilanteesta enempää tietämättä voisin myös veikata, että kannattaisi lisätä tuo vuosiluku yhdeksi sarakkeeksi tauluun. Kannasta voi sitten kysyä helposti SELECT-lauseella tietyn vuoden sisältävät rivit.

No ei kannata, vaan kannattaa kysellä vuoden mukaan suoraan päiväyksestä.

Kas joo. Aivan.

dartvaneri [11.09.2011 20:54:18]

#

Joo tosiaan kannattaisikin hakea päivämäärän mukaan samasta taulusta kaikkien vuosien hirvien kaadot.

Metabolix [11.09.2011 21:10:48]

#

Kannattaisi myös tehdä päivämäärästä DATE-tyyppinen.

dartvaneri [11.09.2011 21:40:06]

#

Joo niin kannatta. Ja tohon headerin vielä sen verran, että ao. koodin lisääminen lopettaa ongelmat.

ob_start();

makumaku [11.09.2011 21:45:58]

#

Jos tuo sovellus ei ole kovin pitkälle jo tehty, niin melkein ensin tosiaan kannattaa miettiä kokonaan tuo tietokantarakenne kuntoon. Eikä varmaan olisi paha asia vaikka sen heittäisi sitten tännekin kommentoitavaksi.
Myöskin tuo TEXT on varmaan aikalailla liikaa monien kenttien kohdalla, ja VARCHAR olisi optimaalisempi. Pitää miettiä kannattaako kaataja olla vain indeksillä, ja ne kaatajat sitten toisessa taulussa. Tietotyypit pitää valita tarkoituksen mukaan, eikä laittaa kaikkia TEXTiksi automaattisesti. Niinkuin sanottu, jos kaadoissa riittää pelkkä päivämäärä niin sen tyyppi on DATE. Mutta jos joskus pitää hakea tietoa että kuka kaatoi vuoden ensimmäisen hirven, niin silloin voidaan jo tarvita DATETIME tai TIMESTAMP tyyppiä, jos ajat merkitään vaikka tunnin tarkkuudella jne..

dartvaneri [12.09.2011 16:03:08]

#

Joo, melko pitkällä se on, mutta se ei niin mahottoman suuri ole, etteikö sen voisi tehdä alusta asti uudelleen. Elikkäs kerronpa vähän tässä mikä on kyseessä. Sivu on hirvi porukkamme sivu. Tämä järjestelmä on sellainen, että admin 'tittelin' omistavat voivat aina käydä lisäämässä, kun on kaadettu hirvi.
Kun lisätään uusi kaato, niin siellä on kentät:
päivämäärä(muod. vvvv.kk.pp)
Paikka
sitten on kolme valintaa: Sonni, Vasa, Aikuiset naaraat
lopuksi vielä kaatajan nimi tulee.
Näistä tiedoista tärkeimmät ovat päivämäärä ja sitten eläin tyyppi. Muut saattavat olla tyhjiä. Aijassa ei tarvitse olla kellon aikaa.

Sivun yläosassa on linkki, josta pääsee lisäämään kaadon. Sen alapuolella on taulukko jossa on kaikki kauden kaadot. Taulukon alla on allekkain linkkejä, joissa on vuosilukuja, eli edellisten vuosien kaatoihin pääsee niistä.

Tätä systeemiä varten mulla on tietokannassa kaksi taulua: saalistilanne ja vuodet. http://imageshack.us/photo/my-images/402/tietokantarakenne.png/

Nyt jos taulukossa on 2010 vuoden kaadot, tämän linkin, josta pääsee lisäämään kaadon, tilalle tulee paino nappi, josta voi vaihtaa kautta. Se systeemi lisää tauluun vuodet vuoden 2011. Tätä vuodet taulukkoa käytän lähinnä siihen, että pystyn hakemaan siitä helposti kaikki edelliset vuodet.

Tämä nyt oli aika lailla sekavasti selostettu, mutta eiköhän siitä selvää saa..

makumaku [12.09.2011 16:36:48]

#

En kyllä ihan ymmärtänyt että mihin tuota vuodet-taulua tarvitaan, minusta se on täysin turha. Sellainen tilanne vaan tulee mieleen että jos täytyy pitää kirjaa että minä vuosina on metsästystä harrastettu, niin vuodet-tauluun lisättäisiin tämä tieto, koska saalistilanne-taulusta sitä ei välttämättä näe jos mitään saalista ei ole tullut. Mutta tästä ei taida olla kyse.

Lisäksi kannattaa miettiä että kaikki seuran jäsenet laitetaan yhteen omaan tauluun, ja saalistilanne-tauluun vain id jäseneen. Jäsenet-taulussa minimissään id, nimi ja jäsenluokka (admin, normaali). Jos joka kerran pitää kaatajan nimi kirjoittaa erikseen on mahdollista että samalle henkilölle sinne tulee nimeksi, Seppo Kaartinen, Seppo Kartinen, Kaartinen Seppo, jne...

Sama koskee tuota eläinten valintaa. Eri valinnat pitaisi olla tarkkaan yksilöllisesti määriteltyjä, eikä vain pelkkää tekstiä. Muuten voi olla hankalaa luotettavasti hakea tietoa että montako vasaa on kaadettu vaikka vuosina 2010-2020, tai sitten tämä pitäisi jotenkin hoitaa koodin puolella.

dartvaneri [12.09.2011 17:00:20]

#

hmm. Periaatteessa sillä pidetään kirjaa niistä vuosista, jolloin on metsästetty, mutta ei minään vuonna ole käynyt niin, että kun on metsästetty, että oltaisiin jääty ilman hirviä.
Tuo jäsen taulu ehdotus on ihan käypä, tosi joutuisin kirjaamaan käsin kaikki ne tiedot, mutta se vaiva ehkä kannaattaa ottaa.
Eläinten valinnassa siis on kolme radio buttonia, joista valitaan se kaadettu eläin, joten se teksti on jokaisessa samssa eläimessä sama, jos sitä meinasit.

Teuro [12.09.2011 18:36:58]

#

dartvaneri kirjoitti:

hmm. Periaatteessa sillä pidetään kirjaa niistä vuosista, jolloin on metsästetty, mutta ei minään vuonna ole käynyt niin, että kun on metsästetty, että oltaisiin jääty ilman hirviä.

Käytännössä kaikki kaadot voidaan tallentaa yhteen ja samaan tauluun. Yksi taulu riittää, haettiin sitten kaikkia kaatoja välillä 1900 ... 2011, tai sitten vain vuotta 2010, tai vaikka kauden ensimmäistä kaatoa vuosittain.

Lebe80 [14.09.2011 10:30:11]

#

Ehdottomasti Teuron (ja muidenkin) neuvojen mukaan kaikki kaadot yhteen(!!) tauluun. Tietokannat ovat juuri tehty tälläisiä tietoja varten, eli älä yritä keksiä pyörää uudelleen.

Päivämäärät vielä tietokannan omaan muotoon, niin niiden järjestely ja rajailu onnistuu oletuksena oikein.

Se, että ihmissilmälle tietoa voi olla yhdessä taulussa paljon, ei tarkoita, että se olisi koneelle jotenkin pelottavaa.

The Alchemist [14.09.2011 10:54:53]

#

Lebe80 kirjoitti:

Ehdottomasti Teuron (ja muidenkin) neuvojen mukaan kaikki kaadot yhteen(!!) tauluun. Tietokannat ovat juuri tehty tälläisiä tietoja varten, eli älä yritä keksiä pyörää uudelleen.

Päivämäärät vielä tietokannan omaan muotoon, niin niiden järjestely ja rajailu onnistuu oletuksena oikein.

Se, että ihmissilmälle tietoa voi olla yhdessä taulussa paljon, ei tarkoita, että se olisi koneelle jotenkin pelottavaa.

Ja siinä vaiheessa kun tietoa alkaa olla koneellekin paljon, astuvat kuvaan lisäoptimoinnit kuten indeksien tai "välimuistitaulujen" käyttö. Ei riitä yhden metsästysklubin mullikoiden maailmanhistorian kirjaaminen siihen, että kunnolla tehty tietokanta alkaisi yskähdellä.

Teuro [15.09.2011 15:15:30]

#

Teinpä kokeeksi 4-taulua simuloimaan kaatoja. Yhdessä taulussa oli henkilöt (id, etunimi, sukunimi, puhelin, seura. Toisessa oli hirvien tyypit (id, tyyppi). Kolmannessa oli seurat (id, nimi). Viimeisessä taulussa oli kaadot (id, aikaleima, kaataja, tyyppi).

Generoin 3-seuraa, 500-henkilöä, ja 20000-kaatoa. Eli varmaankin roimasti yläkanttiin, mutta siitä huolimatta haut toimivat aivan riittävän nopeasti. mitään optimointeja ei tehty, eikä niille ole luultavasti mitään tarvettkaan.

dartvaneri [15.09.2011 23:36:32]

#

Juu, kiitos ehdotuksista, ja näistä olisi tarkoitus sitten tehdä, ei yrittää tehdä, se systeemi. Mutta niin, mulla on käyttäjät taulu myös, koska jäsenet voi rekisteröityä sinne. Tosin en voi käyttää sitä taulua, koska kaikki(mm. iäkkäät jäsenet) jäsenet eivät rekisteröidy siine, joten joutuisin tekemään uuden taulun sinne, mutta onko tässä sitten mitään järkeä, koska se kaataja ei nyt niin tärkeä olekkaan, vaikka olisikin erilailla kirjoitettu, mutta kannataako se varalta tehä, jos joskus sitten tarvitsee?

Teuro [16.09.2011 10:56:45]

#

dartvaneri kirjoitti:

Tosin en voi käyttää sitä taulua, koska kaikki(mm. iäkkäät jäsenet) jäsenet eivät rekisteröidy siine, joten joutuisin tekemään uuden taulun sinne

Perusteles tätä nyt vielä hiukan. Miten niin iäkkäät eivät voi käyttää taulua?

Metabolix [16.09.2011 11:21:47]

#

Mikset voi lisätä niitä iäkkäitä jäseniä sitten itse? Hölmöä olisi monella taululla kikkailla.

dartvaneri [18.09.2011 23:50:23]

#

Noh tarkemmin ajatellen ne voisi laitta, mutta silloin täytyy tehdä kenttä, jossa on merkintä rekisteröitymisestä.

Metabolix [18.09.2011 23:56:24]

#

Tai sitten jätät esimerkiksi salasanasarakkeen heiltä tyhjäksi.


Sivun alkuun

Vastaus

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

Tietoa sivustosta