<?php $kayttaja="xxxxxxx"; $salasana="xxxxxxxxx"; $tietokanta="xxxxxxxxxx"; mysql_connect(localhost,$kayttaja,$salasana); @mysql_select_db($tietokanta) or die( "Virhe tietokantaa valittaessa"); // Kuinka monta riviä/sivu $rivitPerSivu = 25; // $rivitPerSivu muokattavaksi if (isset($_GET['rivitPerSivu'])) { $rivitPerSivu = $_GET['rivitPerSivu']; } // Oletuksena näytetään sivu nro 1. $sivuNro = 1; // jos $_GET['sivu'] määritetty, käytä sitä sivunumerona if(isset($_GET['sivu'])) { $sivuNum = $_GET['sivu']; } // Kuinka monta sivua skipataan, että tiedetään kuinka monta riviä kullekkin sivulle kuuluu $offset = ($sivuNum - 1) * $rivitPerSivu; $query = "SELECT * FROM books ORDER BY Teos ASC LIMIT $offset, $rowsPerPage"; $result = mysql_query($query); $num = mysql_numrows($result); $i=0; while ($i < $num) { $variable1=mysql_result($result,$i,"variable1"); // Echotetaan echo $variable1 . '<BR>'; // Query tietokantaan rivien kokonaismäärän saamiseksi $query2 = "SELECT COUNT(RECNO) AS numrows FROM books"; $result2 = mysql_query($query2) or die('Virhe, query2 epäonnistui'); $row = mysql_fetch_array($result2, MYSQL_ASSOC); $numrows = $row['numrows']; // Kuinka monta sivua käytössä kun sivutus käytössä $maxPage = ceil($numrows/$rivitPerSivu); } // Tulostetaan sivunumerot $self = $_SERVER['PHP_SELF']; $nav = ''; for($page = 1; $page <= $maxPage; $page++) { if ($page == $pageNum) { $nav .= " $page "; // Ei tarvetta linkille nykyiselle sivulle } else { $nav .= " <a href=\"$self?page=$page&rivitPerSivu=$rivitPerSivu\" class='page'>$page</a> "; } } // luodaan edellisen ja seuraavan linkit // ja linkit millä pääsee suoraan ensimmäiselle ja viimeiselle sivulle if ($sivuNum > 1) { $page = $sivuNum - 1; $prev = " <a href=\"$self?page=$page&rivitPerSivu=$rivitPerSivu\" class='page'><</a> "; $first = " <a href=\"$self?page=1&rivitPerSivu=$rivitPerSivu\" class='page'><<</a> "; } else { $prev = ' '; // Sivu yksi, älä tulosta edellistä $first = ' '; // Äläkä ensimmäisen sivun linkkiä } if ($sivuNum < $maxPage) { $page = $sivuNum + 1; $next = " <a href=\"$self?page=$page&rivitPerSivu=$rivitPerSivu\" class='page'>></a> "; $last = " <a href=\"$self?page=$maxPage&rivitPerSivu=$rivitPerSivu\" class='page'>>></a> "; } else { $next = ' '; // Viimeinen sivu, älä tulosta seuraavaa sivua $last = ' '; // Äläkä viimeiselle sivulle menoa } // echotetaan navigaatio linkit echo $first . $prev . $nav . $next . $last; // Ja lopuksi suljetaan yhteys tietokantaan mysql_close(); ?>
Koodi sisennetty ja virheellinen {} suljettu.
Kokeilepas sisentää oikein { } -merkkien sisältä, niin näet mistä "yllättävä lopetus" johtuu.
Koodissa näyttää olevan sulkematon while-silmukka.
while ($i < $num) {
Viittaisiko tuo virhe siis tuohon riviin?
Plakkis kirjoitti:
Viittaisiko tuo virhe siis tuohon riviin?
Virhe tarkoittaa sitä, että et ole sulkenut tuota while-silmukkaa. Sisennä koodisi, niin näet sen itsekkin. Sinun pitää lisätä siihen }-merkki sopivaan kohtaan.
Okei, kiitos virheen huomauttamisesta. While silmukka on suljettu, mutta en ole varma suljinko sen sittenkin väärin, sillä uutta virhettä tulee
Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in sivutus.php on line 31
Tuo taas kertoo, että MySQL-kyselyssä on tapahtunut virhe. Koodissa oleva virhe on triviaali, ja saat etsiä sen itse samalla, kun opettelet hyviä ohjelmointitapoja.
Laita koodin alkuun seuraavat rivit:
Näin saat näkyviin paljon enemmän virheilmoituksia, varoituksia ym. korjattavaa.
Virheellisten MySQL-kyselyiden varalta kannattaa joko vaihtaa tietokantarajapinnaksi PDO-kirjasto, tai jos tämä ei mitenkään sovi, voi käyttää seuraavanlaista apufunktiota aina mysql_query-funktion sijaan:
<?php mysql_query_apu($query, $yhteys = null) { $tulos = mysql_query($query, $yhteys); if (!$tulos) { echo "<p>Virhe MySQL-kyselyssä!</p>\n"; echo "<p>Kysely: ", htmlspecialchars($query), "</p>\n"; echo "<p>Virhe: ", htmlspecialchars(mysql_error()), "</p>\n"; die(); } return $tulos; } // Esimerkki: $haku = mysql_query_apu("SELECT * FROM taulu WHERE id = 1");
Noniin, kiitos tuon display error pätkän, sain vian jäljitettyä lopulta variables kohtaan, joka vaatii korjailua. Kiitos avustanne!
Aihe on jo aika vanha, joten et voi enää vastata siihen.