Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP -sivutus

Hulio [26.11.2006 16:34:42]

#

Onko kellään antaa ratkaisua seuraavanlaiseen ongelmaan: Sivutus toimii muuten hyvin, mutta sivujen tulostusjärjestys on pielessä, eli uusin lisäys menee aina viimeiselle sivulle ensimmäiseksi, kun sen pitäisi mennä 1. sivulle ensimmäiseksi. Olen kokeillut Id DESC -komentoa, mutta tässä tapauksessa uudet lisäykset tulostuvat 1. sivun alimmaiseksi? Missä vika?!

Koodi:

<?php

include("MySQL.php");

mysql_connect($mysql_server,$mysql_user,$mysql_pass);
mysql_selectdb($mysql_db);

class Pager
{
function getPagerData($numHits, $limit, $page)
{
$numHits = (int) $numHits;
$limit = max((int) $limit, 1);
$page = (int) $page;
$numPages = ceil($numHits / $limit);

$page = max($page, 1);
$page = min($page, $numPages);

$offset = ($page - 1) * $limit;

$ret = new stdClass;

$ret->offset = $offset;
$ret->limit = $limit;
$ret->numPages = $numPages;
$ret->page = $page;

return $ret;
}
}

// get the pager input values
$page = $_GET['page'];
$limit = 20;
$result = mysql_query("select count(*) from Table");
$total = mysql_result($result, 0, 0);

// work out the pager values
$pager = Pager::getPagerData($total, $limit, $page);
$offset = $pager->offset;
$limit = $pager->limit;
$page = $pager->page;

// use pager values to fetch data
$query = "select * from Table order by Id limit $offset, $limit";
$result = mysql_query($query);

// use $result here to output page content

// output paging system (could also do it before we output the page content)
if ($page == 1) // this is the first page - there is no previous page
echo "Previous";
else // not the first page, link to the previous page
echo "<a href=\"thepage.php?page=" . ($page - 1) . "\">Previous</a>";

for ($i = 1; $i <= $pager->numPages; $i++) {
echo " | ";
if ($i == $pager->page)
echo "Page $i";
else
echo "<a href=\"thepage.php?page=$i\">Page $i</a>";
}

if ($page == $pager->numPages) // this is the last page - there is no next page
echo "Next";
else // not the last page, link to the next page
echo "<a href=\"thepage.php?page=" . ($page + 1) . "\">Next</a>";


for($i = mysql_numrows($result); $i > 0; $i--) {
$ii = $i;
$ii--;
echo "<h1>";
echo mysql_result($result,$ii,"Topic");
echo "</h1>";
echo "<p>";
echo mysql_result($result,$ii,"Txt");
echo "</p>";
echo "<p>";
echo mysql_result($result,$ii,"Sender");
echo " - ";
echo mysql_result($result,$ii,"Time");
echo "</p>";
}

mysql_close();

?>

folio [26.11.2006 17:26:08]

#

Kokeile laittaa tuon viimeisen for-silmukan ehdoksi suurempi- tai yhtäsuurikuin.

En kyllä pysty ymmärtämään miten olet onnistunut toteuttamaan niinkin yksinkertaisen asian kuin sivutuksen noin uskomattoman monimutkaisella tavalla.

Hulio [26.11.2006 18:01:59]

#

Ei taida tieto-taito yltää ihan riittävän korkealle tasolle. Onko parempia sovelluksia mielessä, niitä oon nimittäin tässä metsästänyt jos jonkin aikaa? Ja miten se ehto toteutetaan?

folio [26.11.2006 19:05:34]

#

Ehto ei vaadi muuta kuin yhden yhtäsuuruusmerkin lisäämisen, ts:

for($i = mysql_numrows($result); $i >= 0; $i--) {

Hulio [26.11.2006 21:19:14]

#

Antaa virheen:

Warning: mysql_result() [function.mysql-result]: Unable to jump to row -1 on MySQL result index 6

folio [26.11.2006 22:49:09]

#

No entäs jos otat pois kohdan $ii--;

Jotenkin tuntuu järjettömältä tuo for-silmukka, varsinkin kun "ylimääräiset" rivit on jätetty pois jo tietokantahaun yhteydessä. Itse tekisin tuon tulostuskohdan jokseenkin tähän tyylin (vaatii sen DESC-määritteen tuonne tietokantakyselyyn)

while( $r = mysql_fetch_assoc($result) )
{
  printf("<h1>%s</h1>", $r['Topic']);
  printf("<p>%s</p>", $r['Txt']);
  jne...
}

Vastaus

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

Tietoa sivustosta