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?>
Määrän tarkistus ennen tulostuslooppia niin toimii oikein. Nyt tuossa tarkistetaan määrä liian myöhään nopeasti vilkaistuna.
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.
Todennäköisesti tiedostossa on silti yksi tyhjä rivi, eli $maara on tyhjän tiedoston tapauksessa 1.
EDIT: Yllä tulikin parempia.
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ä?
Niin ei jos se on oikeasti tyhjä, mutta kyllä se tyhjiä rivejä laskee.
Njaah, nyt huomasin itekkin, Sami. En ollu ite kattonut, ton voi ehkä poistaa tai kiertää, jos se serkku tuon ilmoituksen enää haluaa...
Aihe on jo aika vanha, joten et voi enää vastata siihen.