webForumDet fria alternativet

Lista inlägg i en dropdown meny

PHP

10 svar · 355 visningar · startad av mr.mainline

Medlem sedan feb. 2003777 inlägg
Frågan#1

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.

Medlem sedan mars 2003429 inlägg
#2

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

Medlem sedan feb. 2003777 inlägg
#3

Thanks, ska testa det.

Medlem sedan feb. 2003777 inlägg
#4

Duffer eller någon annan...,kan jag få lite kod som jag kan börja med?

Medlem sedan feb. 2003777 inlägg
#5

Snälla någon....

Medlem sedan aug. 20002 975 inlägg
#6

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);
Medlem sedan feb. 2003777 inlägg
#7

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());
Medlem sedan aug. 20002 975 inlägg
#8

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å.

Medlem sedan feb. 2003777 inlägg
#9

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.

Medlem sedan aug. 20002 975 inlägg
#10

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());
Medlem sedan feb. 2003777 inlägg
#11

Ja exakt Matte, det funkar super, tusen tack ska du ha.

268 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)