Gör en do-loop som kollar finns det fler inlägg än 50*1, finns det fler än 50*2 så gör du en utskrift för varje varv...
DONE
10 svar · 355 visningar · startad av mr.mainline
Jag vill ha på min sida en dropdown meny, där jag vill att inlägg från min gästbok listas.
ex:
inlägg 1-50
inlägg 51-100
Hämtade från en databas.
Gör en do-loop som kollar finns det fler inlägg än 50*1, finns det fler än 50*2 så gör du en utskrift för varje varv...
DONE
Thanks, ska testa det.
Duffer eller någon annan...,kan jag få lite kod som jag kan börja med?
Snälla någon....
T.ex.
// Antal poster per sida
$limit = 50;
// Beräkna antalet poster
$sql = "SELECT COUNT(*) FROM guestbook";
$result = mysql_query($sql);
$post_num = mysql_result($result, 0);
// Beräkna antalet sidor
$pages_num = ceil($post_num / $limit);
// Hämta önskat sidnummer ur URL-en. Kontrollera
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$page = $page > $pages_num || $page < 1 ? 1 : $page;
// Beräkna startpost för SQL-frågan
$offset = ($page - 1) * $limit;
// Gör options
$options = '';
for ($i=1; $i<=$pages_num; $i++) {
$start = ($i -1) * $limit +1;
$stop = $i < $pages_num ? $start + $limit-1 : $post_num;
$selected = $i == $page ? ' selected="selected"' : '';
$options .= "<option value=\"$i\"$selected>$start - $stop</option>\n";
}
// Skriv ut din drop-down
echo '
<form action="'.$_SERVER['PHP_SELF'].'" method="get">
<select name="page" onchange="this.form.submit()">
'.$options.'
</select>
<noscript><input type="submit" value="Visa" /></noscript>
</form>
';
// Kör SQL-fråga för att hämta aktuell sida
$sql = "SELECT * FROM guestbook ORDER BY datum DESC LIMIT $offset, $limit";
$result = mysql_query($sql);
Får inte riktigt till det, om ni kollar på http://www.freddeholm.com/forum.php så till vänster under bilden finns dropsdown menyn som ska lista ex.1-50 vilket den gör,men den listar inte 50 inlägg utan bara 10 som det är i paging systemet som jag använder, ser ut så här:
// Nu bestämmer vi antal per sida och kollar vi upp totala antalet
$limit = 10; // Antal per sida
$result = mysql_query("SELECT count(*) as count FROM forum")
or die("Error fetching number in DB<br>".mysql_error());
$row = mysql_fetch_array($result);
$numrows = $row['count']; // Antal i databasen
// Sedan kollar vi om startvariabeln är satt
if (!isset($_GET['start']) || $_GET['start'] == "")
$start = 0;
else
$start = $_GET['start'];
// Då räknar vi ut hur många sidor det blev
$pages = intval($numrows/$limit);
if ($numrows%$limit)
$pages++;
// Hämta länk till förstasidan och föregående sida
if ($start > 0) {
$numlink = '<a href="?start=0">««</a> ';
$numlink .= '<a href="?start='.($start - $limit).'">«</a> ';
} else {
$numlink = '«« ';
$numlink = '« ';
}
// Hämta sidonummer
for ($i = 1; $i <= $pages; $i++) {
$newoffset = $limit*($i-1);
if ($start == $newoffset)
$numlink .= '['.$i.'] ';
else
$numlink .= '<a href="?start='.$newoffset.'">'.$i.'</a> ';
}
// Hämta länk till nästa sida
if ($numrows > ($start + $limit))
$numlink .= '<a href="?start='.($start + $limit).'">»</a> ';
else
$numlink .= '» ';
// Hämta sista sidan
if ($start != $newoffset)
$numlink .= '<a href="?start='.$newoffset.'">»»</a> ';
else
$numlink .= '»»' ;
// Skriv ut sidorna
echo $numlink ."<br>";
echo "<hr>";
// Nu kan vi hämta datan från databasen och skriva ut den
$result = mysql_query("SELECT * FROM forum ORDER BY id DESC LIMIT ".$start.",".$limit."")
or die("Error fetching data".mysql_error());
Dropdownen styr inte din hämtning i den koden.
Antingen kör du med det systemet du har, att i URL-en ha offset för första post, eller kör du som i mitt alternativ, sidnumrering. Det är upp till dig.
Kolla de länkar du skriver ut i ditt exempel. Gör <option> av dom istället. Och den som är samma sida sätter du selected på.
ok, med jag vill både ha som jag har det med sid nummer som listar 10 inlägg i taget, och sen dropdown menyn som listar 1-50 o.s.v.
Då menar du att när du trycker på en länk ska den visa 10 inlägg, och när du väljer i dropdown ska du visa 50 inlägg ?
Då måste du via en GET-variabel styra hur många som ska visas.
Alternativt använda olika anropsvärden, och översätta dessa för varandra.
Testa något på det här hållet:
/*********************
* Först dropdown
*********************/
// Antal poster per sida
$limit = 50;
// Beräkna antalet poster
$sql = "SELECT COUNT(*) FROM forum";
$result = mysql_query($sql);
$post_num = mysql_result($result, 0);
// Hämta önskat sidnummer ur URL-en. Kontrollera
$start = isset($_GET['start']) && intval($_GET['start']) > 0 ? $_GET['start'] : 0;
$start = $start >= $post_num ? 0 : $start;
// Gör options
$options = '';
for ($i=0; $i<$post_num; $i+=$limit) {
$from = $i + 1;
$to = $i + $limit;
$selected = $i == $start ? ' selected="selected"' : '';
$options .= "<option value=\"$i\"$selected>$from - $to</option>\n";
}
// Skriv ut din drop-down
echo '
<form action="'.$_SERVER['PHP_SELF'].'" method="get">
<input type="hidden" name="show" value="'.$limit.'" />
<select name="start" onchange="this.form.submit()">
'.$options.'
</select>
<noscript><input type="submit" value="Visa" /></noscript>
</form>
';
/*********************
* Sedan länkar
*********************/
// Nu bestämmer vi antal per sida och kollar vi upp totala antalet
$limit = 10; // Antal per sida
/* $result = mysql_query("SELECT count(*) as count FROM forum")
or die("Error fetching number in DB<br>".mysql_error());
$row = mysql_fetch_array($result);
$numrows = $row['count']; // Antal i databasen */
// Sedan kollar vi om startvariabeln är satt
if (!isset($_GET['start']) || $_GET['start'] == "")
$start = 0;
else
$start = $_GET['start'];
// Då räknar vi ut hur många sidor det blev
$pages = intval($post_num / $limit);
if ($post_num % $limit)
$pages++;
// Hämta länk till förstasidan och föregående sida
if ($start > 0) {
$numlink = '<a href="?start=0">««</a> ';
$numlink .= '<a href="?start='.($start - $limit).'">«</a> ';
} else {
$numlink = '«« ';
$numlink = '« ';
}
// Hämta sidonummer
for ($i = 1; $i <= $pages; $i++) {
$newoffset = $limit*($i-1);
if ($start == $newoffset)
$numlink .= '['.$i.'] ';
else
$numlink .= '<a href="?start='.$newoffset.'">'.$i.'</a> ';
}
// Hämta länk till nästa sida
if ($numrows > ($start + $limit))
$numlink .= '<a href="?start='.($start + $limit).'">»</a> ';
else
$numlink .= '» ';
// Hämta sista sidan
if ($start != $newoffset)
$numlink .= '<a href="?start='.$newoffset.'">»»</a> ';
else
$numlink .= '»»' ;
// Skriv ut sidorna
echo $numlink ."<br>";
echo "<hr>";
/***************************
* Kollan antalet att visa
****************************/
$limit = isset($_GET['show']) && intval($_GET['show']) > 0 ? $_GET['show'] : $limit;
// Nu kan vi hämta datan från databasen och skriva ut den
$result = mysql_query("SELECT * FROM forum ORDER BY id DESC LIMIT ".$start.",".$limit."")
or die("Error fetching data".mysql_error());
Ja exakt Matte, det funkar super, tusen tack ska du ha.