Juu, eli en kinua tässä suoraan että "antakaa koodi, en jaksa ite koodata", vaan haluan itse tehdä koko homman. Siispä kysyn vain, että miten kannattaisi toteuttaa suht yksinkertainen kuvagalleria + upload. Käytössä ei ole MySQL. Varmaan tästä on keskusteltu jossain vuosia sitten, en vaan ole löytänyt mitään...
Tarkoitus olisi, että ensin kuvat uploadataan palvelimelle. Uplodauslomakkeen mukana tulisi muitakin tietoja, esim. kuvausaika, kuvauspaikka ja kuvateksti. Kuvalle pitäisi saada myös id-numero. Sitten tehtäisiin pikkukuvat, joista pitäisi olla linkit isompiin kuviin. Pikkukuvaa klikkaamalla pitäisi avautua esim. index.php?id=543, joka sisältäisi ison kuvan kuvasta 543 sekä nuo edellä mainitut lomakkeen kautta tulleet tiedot.
Ensimmäinen kysymys olisi: miten tehdä id-numero kuvalle? Sen pitäisi suurentua aina yhdellä numerolla. Toinen kysymys: kuten sanoin, ei käytössäni ole mysliä. Siispä tiedot pitäisi tallentaa tekstitiedostoihin. Vaan miten ne kannattaisi tallentaa..?
Ja sitten joku hakujärjestelmä, joka hakisi kuvatekstistä, ja näyttäisi niiden kuvien pikkukuvat, joiden kuvatekstissä haettu sana esiintyy. Siis, onnistuisiko tämä tekstitiedostoilla? Toivottavasti tajusitte jotain.
Ensin voisit hiukan tutustua upload-skripteihin. esim. tuolla on yksi:
https://www.ohjelmointiputka.net/koodivinkit/
Id-numeron saa tekstitiedoston riveistä numeroimalla rivit ja tallentamalla numeron tiedostoon kyseiselle riville.
Tiedostoon taulukko.
Funktiolla imagecopyresized hoituu thumb-kuvan tekeminen.
Jossain tiedostossa voi säilyttää suurinta käytössä olevaa id-numeroa, ja sitten kun galleriaan lisätään uusi kuva, sen id-numeroksi tulee yhtä suurempi kuin tiedostossa ollut id-numero ja tiedostoon tallennetaan uusi id-numero.
Kuvien tiedot voi tallentaa vaikka niin, että jokaisesta kuvasta on yksi tekstitiedosto, joka on nimetty kuvan id-numeron mukaan ja jossa lukevat kaikki kuvaan liittyvät tiedot, esim. yksi tieto rivillä. Tiedoston tarkan rakenteen voi suunnitella hyvin monella tavalla, eikä näillä valinnoilla käytännössä ole merkitystä, kunhan tiedostoja käsittelee kaikkialla samalla tavalla.
Kuvien haun voi toteuttaa ihan vain niin, että skripti käy läpi kaikki tekstitiedostot ja etsii niistä haluttua tekstiä. Toinen vaihtoehto on tallentaa johonkin erilliseen tiedostoon kaikki kuvatekstit, jolloin kuvan haussa täytyy ottaa käsittelyyn vain yksi tiedosto. Tässä toiminnossa kuvien id-numeroista on hyötyä.
Tiedostoilla voi oikeastaan tehdä kaiken saman kuin tietokannallakin, eli lähes mikään mieleen tuleva asia ei ole mahdotonta. Ongelmia voi kuitenkin tulla, jos kaksi samalla hetkellä kutsuttavaa PHP-skriptiä yrittää tallentaa samaan tiedostoon. Tämän seuraus on usein tiedoston sekoittuminen, mikä on ikävän tuttu ilmiö monelle PHP-ohjelmoijalle.
Kiitos paljon. Voisiko joku kuitenkin antaa hieman tarkempia ohjeita tuon haun toteuttamiseen..? Jokaisesta kuvasta on nyt siis oma tekstitiedosto.
Joko olet saanut tuon varsinaisen upload-jutun tehtyä?
Kyseiseen upload-skriptiin täytyy sinun liittää normaali laskuri, kuten Antti vihjaisi. Annat kuvalle sitten nimen (id-numeron) laskurin lukeman perusteella.
Sen lisäksi avaat fopen funktiolla id-numeron mukaisen tekstitiedoston ja kirjoitat siihen kuvaan liityvät tiedot.
Hakemistoa voi käydä läpi opendir-readdir-closedir systeemillä, laittaa ne arrayhin ja tulostaa tiedostot aakkoajärjestyksessä natcasesort funktiolla.
Luonnollisesti kuvat ja tekstin kannattaa olla eri hakemistossa.
Oletetaan, että tiedostot ovat tällaisia (1.txt, 2.txt, 3.txt):
1.jpg Ihmisiä on kokoontunut torille.
2.jpg Vanha mies soittaa posetiivia.
3.jpg Laitumella seisoo lehmiä.
Nyt haun voi toteuttaa tähän tapaan:
<?php $haku = "posetiivi"; // muutetaan sana pieneksi $haku = strtolower($haku); // käydään läpi kaikki tiedostot for ($i = 1; $i <= 3; $i++) { // luetaan tiedoston rivit taulukkoon $rivit = file($i . ".txt"); // erotetaan kuvauksen sisältävä rivi $tieto = $rivit[1]; // tutkitaan, onko kuvauksessa hakusanaa if (strpos(strtolower($tieto), $haku) !== FALSE) { echo $i . ".txt<br>"; } } ?>
Käytännössä for-silmukkaa pitää muuttaa vielä niin, että luvun 3 tilalle tulee suurin kuvan id-numero.
Kiitos taas. Upload ja kaikki muukin on tehty, tämä haku oli lähinnä ongelma.
Noniin, nyt toimii. Pakko vielä kysyä, että millä keinolla saisi sivun, jossa on täysikokoinen kuva, yläosaan linkin "edellinen" ja "seuraava"? Eli siis jos hakee vaikkapa sanalla auto, "seuraava" -linkistä pääsisi seuraavaan hakutulokseen ja "edellinen"-linkistä tietysti edelliseen.
Ehkä helpoin ratkaisu on liittää sivun osoitteeseen kaksi tietoa: millä sanalla on haettu ja kuinka mones hakutulos on näkyvissä. Linkit "seuraava" ja "edellinen" muuttavat sitten tuota jälkimmäistä tietoa. Lisäksi tiedostot tutkivaan silmukkaan täytyy lisätä ylimääräinen laskuri, joka pitää kirjaa hakusanaa vastaavien kuvien määrästä, jolloin pystytään näyttämään ainoastaan haluttu kuva. Jonkin verran lisävaivaa tulee vielä siitä tilanteesta, kun laskuri pyörähtää ympäri jommastakummasta suunnasta.
Aikani mietittyäni tajusin, etten aivan tajunnut. No, eipä tuossa muuta epäselvää olekaan, kuin että miten tuo onnistuu tuo tietojen liittäminen osoitteeseen..? Sanotaan nyt vaikka että on sivu 524.php. Jotain tyyliin 524.php?sana=auto&valinta=paikka&maara=12 ..? Ja miten tuo käytännössä onnistuu..? Siis pelkkä tietojan liittäminen sivun osoitteeseen. Ei muuta. Joku lyhyt esimerkki helpottaisi oloa kummasti... :)
Tämä pikku esimerkki selventänee asiaa:
<?php $sivu = intval($_GET['sivu']); echo "nykyinen sivu: " . $sivu . "<br>"; echo "<a href=\"sivu.php?sivu=" . ($sivu + 1) . "\">seuraava</a>"; ?>
Eli tietoja saadaan sivun osoitteeseen tulostamalla linkki, jossa ne tiedot näkyvät. Ja sivun osoitteesta tiedot saadaan skriptille $_GET-taulukosta.
No niin. Nyt selvisi. Kiitos. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.