Hei! Kuten jotkut jo tietävät ennestään ja kaikki tämän viestin jälkeen, olen vasta-alkaja PHP:n parissa, vaikka tutustuinkin kieleen jo muutama vuosi sitten käyttäen pitkään vain paria komentoa, jotka riittivät tyydyttämään silloiset tarpeeni.
Olen lueskellut esimerkkejä ja oppait niiltä kohdin, joista saattaisi olla apua tämänhetkisessä pikku työssäni, tiedostonlistaajassa, joka erottelee tekstitiedoston rivit omiksi yksiköiksi ruudulle muodostaen taulukon.
Tekstitiedostolle, josta tiedot poimitaan, olen tehnyt myös oman muokkaimen (rivinlisääjän), joka lisää halutut tiedot sisältävän rivin tiedoston loppuun, jonka takia olen myös joutunut laittamaan taulukkotiedostoon säännön, joka järjestää ne rivin alkukirjaimen (tiedoston nimen) mukaan aakkosjärjestykseen.
Tarvistisin vielä toimintoja kyseiselle ohjelmalle:
-Tiedostojen järjesteleminen esim. $julkaisuvuoden ja $lisäämispäivän sekä mahdollisesti $tiedostokoon mukaan. Olen nähnyt, että sellaisia toteutetaan dynaamisilla php-sivuilla, joista en ole löytäyt vähään aikaan kunnon oppaita.
-Tiedostojen järjestely eri sivuille (esim. 25 listattua tiedostoa per sivu) varmaankin samaista dynaamista systeemiä käyttäen.
-Hakukonetoiminto, joka listaa löytyneet tulokset tekemääni tiedostolistaan.
Tiedostolistaimeni lähdekoodi ja toimiva esimerkkisivu( http://koti.mbnet.fi/thauzie/riviedis/katsele2.php )
<?php //kerätään "filut" taulukkoon $filut = file("base.txt"); //filut = tiedoston rivit $filumaara = count($filut); function aakkoset($a, $b) { if (strtolower($a) == strtolower($b)) return 0; return (strtolower($a) < strtolower($b)) ? -1 : 1; } usort ($filut, "aakkoset"); //Printataan filumäärä echo "<font size=\"2\" face=\"Verdana\">Listattuna $filumaara tiedostoa.</font><p></p>"; //käydään jokainen filu läpi for ($i = 0; $i < $filumaara; $i++) { //$filut[$i] on merkkijono, joka sisältää viestin $i tiedot //pystyviivoilla erotettuna; jaetaan viestit $tiedot-taulukkoon $tiedot = explode("|", $filut[$i], 10); //erotellaan tiedot omiin muuttujiinsa $nimi = $tiedot[0]; $lisätty = $tiedot[1]; $urli = $tiedot[2]; $julkaisija = $tiedot[3]; $julkaisijan = $tiedot[4]; $vuosi = $tiedot[5]; $esittely = $tiedot[6]; $koko = $tiedot[7]; $kuva = $tiedot[8]; $kuvateksti = $tiedot[9]; echo"</head><body><table border=\"1\" width=\"100%\" id=\"table1\" align=\"top\" style=\"border-collapse: collapse\" bordercolordark=\"#000000\" bordercolorlight=\"#000000\"><tr align=\"top\"><td align=\"top\"><p align=\"center\"><font size=\"2\" face=\"Verdana\"><B>$nimi</b></font> <font size=\"1\" face=\"Verdana\"> (Lisätty $lisätty)</font></td></tr><tr><td valign=\"top\"><table border=\"0\" width=\"100%\" id=\"table2\"><tr><td width=\"775\" valign=\"top\"><table border=\"0\" width=\"100%\" id=\"table3\" valign=\"top\"><tr align=\"top\"><td valign=\"top\"><font size=\"2\" face=\"Verdana\">Julkaisija: <b>$julkaisija</b></font></td></tr><tr><td><font size=\"2\" face=\"Verdana\">Julkaisijan kotisivut: </font>"; if (preg_match("/http:/", $julkaisijan) ) echo "<font size=\"2\" face=\"Verdana\"><a href=\"$julkaisijan\"<a><b>$julkaisijan</b></font></a>"; else echo "<font size=\"2\" face=\"Verdana\"><i>Ei ole saatavilla</i></font>"; echo "</td></tr><tr><td><font size=\"2\" face=\"Verdana\">Julkaisuvuosi: <b>$vuosi</b></font></td></tr><tr><td><font size=\"2\" face=\"Verdana\"><p>$esittely</font><p> </td></tr><tr><td><font size=\"2\" face=\"Verdana\">Tiedoston koko: $koko</font></td></tr><tr><td><p> <font size=\"2\" face=\"Verdana\"><a href=\"$urli\"<a>Lataa tästä</a></font></td></tr></table></td><td valign=\"top\"><img src=$kuva><font size=\"2\" face=\"Verdana\"><p align=\"center\">$kuvateksti</td></font> </tr></table></td></tr></table></body></html><p></p>"; } ?> </body> </html>
Sitten base.txt josta huomaatte miten tiedot on listattuna:
Tiedoston nimi|päivämäärä kellonaika|tiedoston url|Julkaisija|Julkaisijan kotisivujen url|julkaisuvuosi|Esittelyteksti|tiedostokoko|kuvan url|kuvateksti
Odottaisin kokeneiden kommentteja toteutustavoista, niiden mahdollisuuksista, vinkeistä ja kaikesta muusta mistä en vielä maininnut. Jos joku vaivautuu niin onhan koodikin tervetullutta. Kiitos
Mod. lisäsi kooditagit
Thomas Taussi kirjoitti:
Tiedostojen järjesteleminen esim. $julkaisuvuoden ja $lisäämispäivän sekä mahdollisesti $tiedostokoon mukaan.
Tässä on laajennettu vertailufunktio, joka osaa järjestää minkä tahansa kentän mukaan. Ainoa vaatimus on, että taulukossa on merkkijonoja, joissa on pystyviivoilla erotettuja tietoja. Muuttujassa $kohta ilmoitetaan järjestyksen määräävän sarakkeen numero nollasta aloittaen. Muuttujassa $suunta määritetään, onko järjestyssuunta a:sta ö:hön (0) vai ö:stä a:han (1). Esim. kun $kohta on 3 ja $suunta 1, tiedot järjestetään julkaisijan mukaan ö:stä a:han.
function vertailu($a, $b) { global $kohta, $suunta; $aa = explode("|", strtolower($a)); $bb = explode("|", strtolower($b)); if ($aa[$kohta] == $bb[$kohta]) return 0; if ($suunta == 0) { return ($aa[$kohta] < $bb[$kohta]) ? -1 : 1; } else { return ($aa[$kohta] < $bb[$kohta]) ? 1 : -1; } } $kohta = 3; $suunta = 1; usort ($filut, "vertailu");
Thomas Taussi kirjoitti:
Tiedostojen järjestely eri sivuille (esim. 25 listattua tiedostoa per sivu) varmaankin samaista dynaamista systeemiä käyttäen.
Tutkipa tätä koodivinkkiä:
https://www.ohjelmointiputka.net/koodivinkit/
Thomas Taussi kirjoitti:
Hakukonetoiminto, joka listaa löytyneet tulokset tekemääni tiedostolistaan.
Tätä sinun pitää vielä selventää. Pitääkö näytettäviä tiedostoja karsia annetun hakusanan mukaan vai mitä?
Kiitoksia runsaista avuista. Jos ensin ottaisin syyniin tuon listauksen määritelmät. Sain toimimaan, mutta miten $kohtaa voisi vaihtaa tiedoston sisällä, eli dynaamisesti ettei tarvitse tehdä eri sivuja, vaan linkki toteuttaisi funktion ja osoite olisi malliin katso.php?kohta=3
Oivalsinkin jo heti miten tuon voisi toteuttaa ja niinhän se toimikin. Kokeilen hieman itse sovellella oppimaani jos vaikka saisin ilman apuanne listattujen määrää ja hakukonetta tehtyä.
Hakujutussa sekä lajittelussa tarvitsisin nyt hieman apua.
Saan vähällä säädöllä säädettyä niin, että vain listaus, jonka nimi vastaa hakusanaan, näytetään. Ilman dynamiikkaa en kuitenkaan usko kovin pitkälle mentävän. Arvelisin, että jotenkin regexeillä saisi laitettua poimintafunktion, joka karsii halutun tiedon funktio.php?numero=2&desimaali=5. Kai tuohon samaan saisi mahtumaan juuri hakukriteerit ja lajittelsäännöt.
Mitähän tarkoitat poimintafunktiolla? Jos sivun osoite on "funktio.php?numero=2&desimaali=5", tieto 2 on muuttujassa $_GET['numero'] ja tieto 5 on muuttujassa $_GET['desimaali']. Varmaan tarkoitit muuta, mutta selvennä.
Kiitos, tuota juuri tarkoitin. Onko jotain muuta mahdollisuutta saada urliin määrittelyjä muuten kuin hyperlinkillä? Header ei suostu oikein toimimaan.
Yksi mahdollisuus on tietysti tehdä HTML-lomake, jossa lähetystapa on "get".
Ihan hyvin header-funktio tuntuu toimivan, vaikka osoitteen perässä olisi muuttujia:
<?php // valitys1.php header("Location: valitys2.php?abc=123"); ?> <?php // valitys2.php echo $_GET['abc']; ?>
Mutta mitä olet oikeastaan tekemässä?
Uploadaisin ongelmani internettiin, mutta koko höskä on vaihteeksi omalla koneella (käytön aikana serveri).
Headerista se valittaa: Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\xampp\htdocs\kansio\kts.php:7) in C:\Program Files\xampp\htdocs\kansio\kts.php on line 9
Älä tulosta mitään ennenkuin käytät header-funktiota. Lisää aiheesta:
http://pp.kpnet.fi/blaze/codefaq/#headerssent
Haulla myös löytyy aiheesta enemmänkin...
Juu tai vaikka Kuhan FAQista http://wiki.mureakuha.com/wiki/FAQ#Mit.C3.
Kiitokset, Grez ja JTS. Sain ongelman ratkaistua puskuroimalla. MBnetin serverillä kyseistä ei olisi tarvinut tehdä, mutta haluan pelata varman päälle siltä varalta jos alan pyörittämään omaa serveriä. Seuraavaksi alankin pähkäilemään siinä miten nuo hakutulokset lajitellaan eri sivuille määrästä riippuen. Onhan minulla jonkinlainen tutoriaali. Kiitos Antille.
Aihe on jo aika vanha, joten et voi enää vastata siihen.