Eli ongelmanani on tiedoston rivien laitto yhdelle sivulle.
Pitäisi saada kaikki tekstitiedoston rivit näkymään eri sivuilla ja laittaa
$_GETin avulla rivit siten, että esim rivi 1 on osoitteessa index.php?kuva=1 ja rivi 2 on index.php?kuva=2 jne.
Käsin noita jokaista on työläs erikseen kirjoittaa sinne omalle sivulleen, koska tiedostossa kuvat.txt on rivejä lähes 80.
En vielä aloittelevana PHP:n opettelijana osaa laittaa $_GET funktiota toimimaan siten, että sen arvo muuttuu automaattisesti tuon rivin kanssa.
Nykyinen koodi, joka hakee rivit tiedostosta ja kääntää rivit päinvastaiseen järjestykseen:
<?php $kuvat = file("kuvat.txt"); $kuvat = array_reverse($kuvat); for ($i = 0; $i < $viestimaara; $i++) { $tiedot = explode("|", $kuvat[$i], 2); $tiednimi = $tiedot[0]; $kuvateksti = $tiedot[1]; echo $tiednimi; echo $kuvateksti; } ?>
Kaikki apu on tervetullutta!
Jos ymmärsin tarkoituksesi oikein, ota silmukka pois ja käytä:
<?php $kuvat = file("kuvat.txt"); $kuvat = array_reverse($kuvat); $valittu = intval($_GET['kuva']); $tiedot = explode("|", $kuvat[$valittu], 2);
Kiitos! Tuolla sain toimimaan tuon halutulla tavalla.
Nyt pitäisi saada edellinen ja seuraava linkit tuohon kuvan alapuolelle.
Koodini on nyt tämän näköinen:
<?php $kuvat = file("linkit.txt"); $kuvat = array_reverse($kuvat); $valittu = intval($_GET['kuva']); $tiedot = explode("|", $kuvat[$valittu], 2); $kuva = $tiedot[0]; $kuvateksti = $tiedot[1]; echo "<img src=\"$kuva\">"; echo "<br/>"; echo $kuvateksti; echo "<br/>"; echo "<a href=\"edellinenlinkki\">Edellinen</a>"; echo "-"; echo "<a href=\"seuraavalinkki\">Seuraava</a>"; ?>
Pitäisi tuo "seuraavalinkki" ja "edellinenlinkki" korvata jollain skriptillä, joka veisi esim. "Seuraava" -linkistä index.php?kuva=3:een ja "Edellinen -linkistä" index.php?kuva=1:teen, jos tällä hetkellä auki oleva sivu olisi index.php?kuva=2
Ei tarvita mitään scriptiä sen kun vain kirjoitat tarkalleen noin html:n sekaan esimerkiksi siis näin.
<?php $edellinen = $valittu - 1; $seuraava = $valittu + 1; ?>
Ja ettei kukaan nillitä niin tietty tarkistukset ettei mene rajoista yli. Siis ettei ole pienempi kuin 0 ja toisaalat ettei ole suurempi kuin tiedostojen rivien määrä.
Ongelmanratkaisun vaiheet:
1. Miten echolla tulostetaan linkin osoitteeksi "index.php?kuva=X"?
2. Miten tästä tulostuksesta korvataan X jollain muuttujalla?
3. Millä muuttujalla X pitäisi korvata?
4. Miten tämän tarvittavan muuttujan voisi muodostaa?
4.1. Mistä löytyy nykyinen sivunumero?
4.2. Miten tästä lasketaan edellinen ja seuraava numero?
Useimmat vastaukset ovat jo koodissasi, ja loput ovat yllä Teuron viestissä.
Kiitokset neuvoista!
Nyt jo toimii kaikilta muilta osin tämä tiedosto, mutta en saa (osaa) rajoitettua tuota, ettei enää viimeisen kuvan jälkeen tule Seuraava -painiketta.
<?php $kuvat = file("linkit.txt"); $kuvat = array_reverse($kuvat); $valittu = intval($_GET['kuva']); $kuvamaara = count($kuvat); $tiedosto = $_SERVER['PHP_SELF']; $edellinen = $valittu - 1; $seuraava = $valittu + 1; $tiedot = explode("|", $kuvat[$valittu], 2); $kuva = $tiedot[0]; $kuvateksti = $tiedot[1]; echo "<img src=\"kuvat/".$kuva."\">"; echo "<br/>"; echo $kuvateksti; echo "<br/>"; if ($valittu > 0){ echo "<a href=\"".$tiedosto."?kuva=".$edellinen."\">Edellinen</a>"; echo "-"; echo "<a href=\"".$tiedosto."?kuva=".$seuraava."\">Seuraava</a>"; echo "<br/>"; } elseif ($valittu >= $kuvamaara){ echo "<a href=\"".$tiedosto."?kuva=".$edellinen."\">Edellinen</a>"; } else { echo "<a href=\"".$tiedosto."?kuva=".$seuraava."\">Seuraava</a>"; } ?>
Eli virheen täytyy olla tuossa elseif ($valittu >= $kuvamaara){ kohdassa.
Tällä hetkellä nimittäin voi selata loputtomiin tuota listaa.
Tuolla tuskin saat mitään aikaiseksi, koska siinä ei ole mitään for silmukkaa.
Kuitenkin, kosvaa tuo elseif tällä:
Ei auttanut tuo $kuvamaara -1. Mitenkäs tuon for silmukan käyttö tässä tapauksessa sitten menisi?
MIB, olet taas ihan pihalla ja neuvot väärin. Mihin tässä for-silmukkaa tarvittaisiin, kun vain yksi sivu on tarkoitus tulostaa? ^^
Koska indeksointi alkaa nollasta (eli ensimmäinen sivu on 0), viimeinen sivu on count($kuvat) - 1
. Helpoin rakenne on tämä:
<?php if ($sivu <= 0) { // seuraava } elseif ($sivu < $maara - 1) { // molemmat } else { // edellinen }
Oman koodisi ongelma on, että jos valittu on nollaa suurempi, muita tarkistuksia ei enää tehdä vaan käytetään ensimmäistä vaihtoehtoa.
Hmm. Tuolla neuvomallasi tyylillä sain näkymään vain jokaisen kohdalla Seuraava painikkeen.
<?php if ($sivu <= 0) { echo "<a href=\"".$tiedosto."?kuva=".$seuraava."\">Seuraava</a>"; } elseif ($sivu < $kuvamaara - 1) { echo "<a href=\"".$tiedosto."?kuva=".$edellinen."\">Edellinen</a>"; echo "-"; echo "<a href=\"".$tiedosto."?kuva=".$seuraava."\">Seuraava</a>"; echo "<br/>"; } else { echo "<a href=\"".$tiedosto."?kuva=".$edellinen."\">Edellinen</a>"; } ?>
Tietenkin sinun pitää muuttaa muuttujien nimet oikeiksi, aiemman koodin perusteella $valittu ja $kuvamaara. Hieman sovelluskykyä nyt peliin!
Anteeksi :)
Vasta heräsin, joten väsyksissäni en älynnyt vaihtaa edes muuttujien nimiä. Nyt toimii ja ongelma on ratkaistu.
Kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.