Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Arrayn tulostus ei onnistu

Sivun loppuun

pistemies [31.10.2007 19:28:47]

#

Tein tässä pientä sivutus-luokka systeemiä. Jostakin syystä tämän arrayn tulostus ei meinaa onnistua...

<?php
$file = file("test.txt");
$cnt =count($file);
$pages = new sivutus("ap.php",$cnt,5);

$start = $pages->test['start'];
echo $pages->test['ends'];

print "<pre>";
print_r ($pages->test()); // tämä toimii...
print "</pre>";

print $pages->test['ends']; // testi:  Tämä ei toimi (eikä $start)

for($i=$start;$i<$end;$i++){
  echo $file[$i]."<br>";
}

print $pages->sivu();
?>

Testijuttu on tuolla:
http://www.pm-netti.com/koe/ap.php

Mistä vois kiikastaa?

tsuriga [31.10.2007 19:34:49]

#

Luokan nimet kirjoitetaan yleensä isolla. Onko sulla tuolla luokassa siis sekä julkinen metodi test() sekä julkinen taulukko $test? Koska hakasuluilla viittaat muuttujaan, suluilla metodiin.

pistemies [31.10.2007 19:42:59]

#

tsuriga kirjoitti:

Onko sulla tuolla luokassa siis sekä julkinen metodi test() sekä julkinen taulukko $test? Koska hakasuluilla viittaat muuttujaan, suluilla metodiin.

Joo... test metodi. Sisältää tuon array, joka näkyy..

Mutta nyt tähän tuli jotakin uutta häikkää. Hoksasin, että siinä oli end, next ja prev nimiset metodit, jotka ovat jo php:n funktioita. Varmuuden vuoksi muutin ne muuksi, mutta nyt ei sitten toimi nuo linkit, jotka tulostuu metodista sivu(). Pitää tutkia...

tsuriga [31.10.2007 19:48:06]

#

Jos sulla on luokassa julkinen taulukko $test ja siellä indeksi 'ends' niin print $pages->test['ends']; kyllä pitäis toimia. Ja ellei siellä tuota indeksiä ole niin kehitysserverin pitäis jo helistä siitä. Var_dump on echoa parempi debuggaukseen.

pistemies [31.10.2007 20:06:40]

#

Varmaan siinä on tuossa taulukon muodossa vikaa. Nyt se on vain muuttujassa var $sivutus.

edit: No nyt sain nuo linkit korjattua...

vielä tuo arrayn tulostus juttu.

PS:Tämä sujuikin ihan näin. Muutin tuon $sivutus arrayn nimeksi $test. Lisäksi piti for-silmukkaan tulostaa näin:

for($i=$pages->test['start'];$i<$pages->test['ends'];$i++){
  echo $file[$i]."<br>";
}

Nyt tämä alkoi toimimaan. Kiitoksia avusta.

PS 2: On tässä vielä yksi pulma, joka varmaan selviää tuolta "koe-sivulta".
Vaikka tuossa on sivutuksessa 5 riviä sivulle, se tulostaa vain neljä riviä. Aloitusrivi on oikea, mutta lopettaa liian aikaisin, vaikka tuossa esim. alussa on tulostettavina rivit 0-4 eli viisi riviä.

for($i=$pages->test['start'];$i<$pages->test['ends']+1;$i++){
  echo $file[$i]."<br>";
}

Asia tosin korjautui tuolla ($pages->test['ends']+1), mutta onko se kovin oikeaoppinen? Siinä lopetusriviksi nousee tiedoston varsinainen rivi eikä rivi php:n mukaan.

PS 3: Vanhuus taitaa iskeä ennen aikojaan. Siis näin.

$i<=$pages->test['ends'];

pistemies [31.10.2007 21:12:13]

#

Skripti on halukkaille saatavilla nyt tuolta:

http://www.pm-netti.com/index.php?id=scriptit&koodi=34

ajv [01.11.2007 21:53:33]

#

Pekka Mansikka kirjoitti:

Skripti on halukkaille saatavilla nyt tuolta:

http://www.pm-netti.com/index.php?id=scriptit&koodi=34

Ei millään pahalla, mutta tuli mieleen Pitfallin Hello world -esimerkki tuosta :)

Hello world:

<?php
   $sets = SetLetters();
   PrintLetters($sets);

   function PrintLetters($sets)
   {
         for($i = 0; $i <= count($sets)-1; $i++) {
            $text .= $sets[$i];
         }
         print $text;
   }

   function SetLetters()
   {
      return array
                     ( chr(72),
                       chr(101),
                       chr(108),
                       chr(108),
                       chr(111),
                       chr(32),
                       chr(87),
                       chr(111),
                       chr(114),
                       chr(108),
                       chr(100)
                      );
   }
?>

pistemies [01.11.2007 22:43:51]

#

ajv kirjoitti:

Ei millään pahalla, mutta tuli mieleen Pitfallin Hello world -esimerkki tuosta :)

Kiitos kommentista. Kaikki palautteet on tietysti tervetulleita. Tuossa arayssa, mikä minulla on skriptissä, tekee erilaisen se, että arrayn sisältö muuttuu kokoa ajan riippuen siitä, paljonko on selattavia rivejä ja siirrytäänkö seuraavalle vai edelliselle sivulle.
Olen pyrkinyt tekemään siitä käyttäjän kannalta mahdollisimman yksinkertaisen. Eli sen käyttäminen ei vaadi kovin konstailuja sen suhteen, mitä tietoja luokalle syötetään vaan ne "konstailut" hoidetaan luokassa suoraan. Syötettävät tiedot on aina samat riippumatta siitä, painetaanko linkkiä "seuraava", "edellinen" tai ei mitään.
Jos joku keksii tuohon vielä lisää, miten tuon rakenteen voisi toteuttaa vieläkin paremmin, niin mielellään kommenttia.

kayttaja-2791 [02.11.2007 12:03:14]

#

Tollanen löytyi naftaliinista, kokeilin pikaisesti koodisi syntaksilla (aiemmin käyttänyt tietokannan kanssa) ja puukotin pari ominaisuutta, saattaa jopa toimiakin:

<?php
function echoBrowselinks($total, $show = 5, $page = 1) {
  //offset, eli paljonko on poikettu nollapisteestä eteenpäin
  //page-1 koska page=0 ei kovin selkeä urlissa
  $offset = ($page-1) * $show;

  $from = (int) $show + $offset;
  if ($from < 0) { $from = 0; }

  $to = (int) $show + $offset + $offset;
  if ($to > $total) { $to = $total; }

  $totalPages = ceil(($total)/5);

  echo "<p>";

  if ($offset > 0) {
    echo "<a href=\"?page=".($page-1)."\" accesskey=\"p\">&lt;- Previous</a>";
  }  else {
    echo "&lt;- Previous</a>";
  }

  //debug echo "offset $offset - page $page - show $show - from $from - to $to";

  echo " ({$page}/{$totalPages})";

  if ($offset + $show < $total OR !$total) {
    echo " - <a href=\"?page=".($page+1)."\" accesskey=\"n\">Next -&gt;</a>";
  }

  echo "</p>";
}

$file = file("test.txt");
$cnt = count($file);
$show = 5;
$page = (int) $_GET['page'];

echoBrowselinks($cnt, 5, $page);

for ($i = ($page*$show) - $show; $i < ($page*$show); $i++) {
  echo $file[$i]."<br />";
}

echoBrowselinks($cnt, 5, $page);
?>

ajv [02.11.2007 12:54:18]

#

JTS:n koodia vastaava funktio löytyy iteltäkin useammasta proggiksesta. Käytännössä tuo tekee saman kuin PM:n luokka. Ja minusta funktio hoitaa tässä tapauksessa asian paljon loogisemmin kuin luokka. Sitten jos tuohon sivutukseen alkaisi ymppäämään erilaisia moodeja ja muita hienoja toimintoja, niin sit luokaks.

pistemies [02.11.2007 13:41:07]

#

JTS kirjoitti:

Tollanen löytyi naftaliinista, kokeilin pikaisesti koodisi syntaksilla (aiemmin käyttänyt tietokannan kanssa) ja puukotin pari ominaisuutta, saattaa jopa toimiakin:

Aika kätevä. Yksi muutos tuossa on varmaan tarpeen, nimittäin ekasivun asetus.

$page = (int) $_GET['page'];
if(!$_GET['page']){ $page =1; }

Tämä on kyllä pikkuisen turha (makukysymys):

   else {
    echo "&lt;- Previous</a>";
  }

Toinen tekijä. Haittaako jossakin tilanteessa mitään se, että tuo for-silmukka käy läpi useampia silmukoita, kuin on rivejä, jos viimeisen sivun rivit jää vajaaksi?
Kun asensin tuohon tiedostoon (joka sisältää 20 riviä), 8 riviä sivulle ja tulostan myös $i-muuttujan, viimeinen sivu tulostuu näin:

<- Previous (3/3)

16-testi 17
17-testi 18
18-testi 19
19-testi 20
20-
21-
22-
23-

<- Previous (3/3)

pistemies [02.11.2007 14:55:06]

#

Myöhästyin juuri, niin että en ehtinyt muokkaamaan.
Tein tuohon skriptiini pikku-päivityksen. Tulokset "koe-sivulla".

kayttaja-2791 [02.11.2007 17:16:33]

#

No joo, näemmä hutaisin tuon esimerkki-for-silmukan turhan hätäisesti... Enpä nyt jaksa alkaa säätämäänkään sitä kun en ole kotonani. Antaapa jäädä noin, enemmänkin muutenkin annoin tuon hätäisesti esimerkkinä semi-pseudona. Epäilemättä siinä on vielä jotain muutakin viilaamista, kun funktio vaati aika paljon puukotusta kun poistin siitä aika paljon muuta toiminnallisuutta.


Sivun alkuun

Vastaus

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

Tietoa sivustosta