Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP sekoilee

SuperNörtti [26.04.2008 16:14:49]

#

Serkullani on nettisivuillaan (lähes kokonaan) itse kyhätty php-skripti, joka lukee tiedostosta ladattavissa olevat tiedostot ja joitakin tietoa niistä. Ongelma on siinä, että vaikka koodissa on määritelty, että jos rivejä on nolla, koodi tulostaa "EI LADATTAVAA!", se ei tee näin vaan tulostaa pelkkää tyhjää. Kuitenkin jos ladattavaa on, se tulostaa tiedot oikein. Koodi on alla, ja siihen on kommenteilla merkitty kyseinen kohta (loppupäässä).

<table border="1">
	<tr>
		<td>
			<u>Nimi</u>
		</td>
		<td>
			<u>Koko</u>
		</td>
		<td>
			<u>Lataus</u>
		</td>
		<td>
			<u>Sivu</u>
		</td>
	</tr>
<?php

// yhdellä sivulla olevien viestien määrä
$vps = 20;

// luetaan osoitteen mukana tullut sivunumero
if (isset($_GET['sivu'])) {
    $sivu = $_GET['sivu'];
}
$sivu = intval($sivu);

// luetaan viestit tiedostosta taulukkoon käänteisessä järjestyksessä
$viestit = array_reverse(file("lataamo.txt"));

// selvitetään viestien määrä
$maara = count($viestit);

// luodaan sivunumerolista, jos sivuja on useampia
if ($maara > $vps) {
    echo "<p>";
    for ($i = 0; $i < $maara / $vps; $i++) {
        // tulostetaan pystyviivat sivunumeroiden väliin
        if ($i <> 0) {
            echo " | ";
        }
        // jos tämä sivu näytetään, tulostetaan sivun numero lihavoituna
        if ($sivu == $i) {
            echo "<b>".($i + 1)."</b>";
        // muussa tapauksessa luodaan linkki toiselle sivulle
        } else {
            echo "<a href=\"{$_SERVER['PHP_SELF']}?sivu={$i}\">".($i + 1)."</a>";
        }
    }
    echo "</p>";
}

// tulostetaan sivulla olevat viestit oikeasta kohdasta alkaen
for ($i = $sivu * $vps; $i < $sivu * $vps + $vps; $i++) {
    // varmistetaan, että viimeisellä sivulle ei tule ylimääräistä
    if ($i < $maara) {
        // tulostetaan viestin tiedot yksinkertaisesti muotoiltuna
        $tiedot = explode("|", $viestit[$i]);
        if ($maara > 0) {                           //Alussa mainitun kohdan alku
           echo '<tr><td>'.$tiedot[0].'</td><td>'.$tiedot[1].'</td><td><a href="'.$tiedot[2].'">Lataa tästä!</a></td><td><a href="'.$tiedot[3].'">Kotisivut!</a></td></tr>';                                    //*********************
        } elseif ($maara == 0) {                    //*********************
           echo '<tr><td>EI LADATTAVAA</td></tr>';  //Kyseisen kohdan loppu
        }
    }
}

?>
</table>
<?php echo $maara?>

Teuro [26.04.2008 17:03:51]

#

Määrän tarkistus ennen tulostuslooppia niin toimii oikein. Nyt tuossa tarkistetaan määrä liian myöhään nopeasti vilkaistuna.

Sami [26.04.2008 17:05:08]

#

Onko $i koskaan pienempi kuin 0 seuraavalla rivillä?

if ($i < $maara) {

Jos näin ei ole, niin tuota riviä, joka tulostaa "EI LADATTAVAA" ei koskaan suoriteta, koska jotta tämä suoritettaisiin, niin $maara pitäisi olla tasan 0 => $i pitäisi olla < 0.

TsaTsaTsaa [26.04.2008 17:05:16]

#

Todennäköisesti tiedostossa on silti yksi tyhjä rivi, eli $maara on tyhjän tiedoston tapauksessa 1.

EDIT: Yllä tulikin parempia.

Teuro [26.04.2008 17:08:56]

#

TsaTsaTsaa kirjoitti:

Todennäköisesti tiedostossa on silti yksi tyhjä rivi, eli $maara on tyhjän tiedoston tapauksessa 1.

EDIT: Yllä tulikin parempia.

PHP ei kaiketikaan laske tyhjästä tiedostosta yhtään riviä?

TsaTsaTsaa [26.04.2008 17:30:09]

#

Niin ei jos se on oikeasti tyhjä, mutta kyllä se tyhjiä rivejä laskee.

SuperNörtti [26.04.2008 17:56:09]

#

Njaah, nyt huomasin itekkin, Sami. En ollu ite kattonut, ton voi ehkä poistaa tai kiertää, jos se serkku tuon ilmoituksen enää haluaa...

Vastaus

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

Tietoa sivustosta