Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Tiedoston rivit omiksi sivuiksi

Sivun loppuun

EppuMan [22.09.2009 22:38:02]

#

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!

Chiman [22.09.2009 22:45:16]

#

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);

EppuMan [23.09.2009 12:26:52]

#

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

Teuro [23.09.2009 12:32:17]

#

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ä.

Metabolix [23.09.2009 12:34:39]

#

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ä.

EppuMan [24.09.2009 09:52:40]

#

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.

MIB [24.09.2009 09:56:56]

#

Tuolla tuskin saat mitään aikaiseksi, koska siinä ei ole mitään for silmukkaa.

Kuitenkin, kosvaa tuo elseif tällä:

<?php
else if($valittu < $kuvamaara - 1) {

EppuMan [24.09.2009 09:59:20]

#

Ei auttanut tuo $kuvamaara -1. Mitenkäs tuon for silmukan käyttö tässä tapauksessa sitten menisi?

Metabolix [24.09.2009 10:00:56]

#

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.

EppuMan [24.09.2009 10:08:59]

#

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>";
}
?>

Metabolix [24.09.2009 10:10:37]

#

Tietenkin sinun pitää muuttaa muuttujien nimet oikeiksi, aiemman koodin perusteella $valittu ja $kuvamaara. Hieman sovelluskykyä nyt peliin!

EppuMan [24.09.2009 10:12:58]

#

Anteeksi :)
Vasta heräsin, joten väsyksissäni en älynnyt vaihtaa edes muuttujien nimiä. Nyt toimii ja ongelma on ratkaistu.
Kiitos!


Sivun alkuun

Vastaus

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

Tietoa sivustosta