webForumDet fria alternativet

Paging

PHP

17 svar · 462 visningar · startad av berget74

Medlem sedan juni 20059 inlägg
Frågan#1

Skulle behöva hjälp med hur man fixar så att det går att spärra antalet sidor som visas på forumet. Idag läggs till det till en ny sida efter hand som inläggen uppkommer på formumet men skulle alltså vilja låsa det. Någon som kan hjälpa mig? Tacksam för alla hjälp!

                  \<?if ($antal_inlagg \> $antal) {
                    //############ Sidnavigering start ##################
                    if ($sida \> 1){
                      $sida1 = $sida-1;
                      echo '\<a href="?sida='.$sida1.'"\>\<b\>«\</b\>\</a\> \| ';
                    }
                    for ($i=1;$i\<$sidantal+1;$i++){
                      $e = $i;
                      while (strlen($e) \< strlen($sidantal)) { $e = "0".$e; }
                        if ($sida == $i) { echo "\<font color=\\"#000000\\"\>\[\<b\>$e\</b\>\]\</font\> "; } else { echo "\<a href=\\"?sida=$i\\"\>$e\</a\> "; }
                    }
                    if ($sida \<= $sidantal - 1){
                      $sida2 = $sida+1;
                      echo ' \| \<a href="?sida='.$sida2.'"\>\<b\>»\</b\>\</a\>';
                    }
                    //############ Sidnavigering slut ##################
                  }?\>

samt:

                    \<?$sida = $\_GET\["sida"\];            
                    if (!isset($sida)) { $sida = 1; }

                    $antal_inlagg = mysql_num_rows(mysql_query("Select forumID From mete_forum"));

                    $sidantal = ceil($antal_inlagg/$antal);
                    $start = ($sida\*$antal)-$antal;

                    $sql = mysql_query("SELECT datum,inlagg,namn,email FROM mete_forum Order By forumID desc LIMIT $start, $antal, $sida" $conn);

                    if ($antal_inlagg \> $antal) {
	          $pages = '\<br\>\<select class=arkiv name=links onChange="self.location.href=this.options\[this.selectedIndex\].value;"\>' . "\\n";
	          while ($cur_page++ \< $sidantal) {
		    $start_records = ($cur_page\*$antal)-($antal-1);
		    $end_records = $start_records+($antal-1);
		    if ($cur_page== $sida ) { $selected_page = ' selected'; } else { $selected_page = ''; }
		    $pages .= '\<option value="forum_sok.php?sida=' . $cur_page . '"' . $selected_page . '\>Inlägg ' . $start_records . '-' . $end_records . '\</option\>' . "\\n";
	          }
	          $pages .= '\</select\>' . "\\n";
                    }
                    echo $pages;?\>
Medlem sedan jan. 20021 122 inlägg
#2

Först och främst: Välkommen till wF!
Man göra det lite lättare för folk att hjälpa en genom att innesluta kod i [ kod] och [ /kod] block, då blir den mer lättläst.
Paging har det också frågats mycket om, pröva forumets utomordentliga sök-funktion. Hittar du inte något som hjälper dig, återkom då då finns det mängder av duktiga medlemmar som gärna hjälper till :)

Medlem sedan juni 20059 inlägg
#3

Tack! Har sökte igenom i flera timmar efter mitt problem innan jag bestämde mig för att skapa en ny tråd.

Ska tänka på [kod] nästa gång.

Ingen som har lösningen på mitt problem?
Tacksam för all hjälp!

Medlem sedan mars 20034 471 inlägg
#4

Om du vill att nån ska kika på din kod, så lägg den inom [ php]-taggar (utan mellanslag mellan [ och php).

Annars har Kjell ett bra skript som jag använder själv. :)

Ett bra ställe att leta efter färdiga skript i är Skript - PHP vilket återfinns längst ner på samma sida som länken till detta PHP-forum. :)

Medlem sedan juni 20059 inlägg
#5

Bättre nu?

<?if ($antal_inlagg > $antal) {
//############ Sidnavigering start ##################
if ($sida > 1){
$sida1 = $sida-1;
echo '<a href="?sida='.$sida1.'"><b>«</b></a> | ';
}
for ($i=1;$i<$sidantal+1;$i++){
$e = $i;
while (strlen($e) < strlen($sidantal)) { $e = "0".$e; }
if ($sida == $i) { echo "<font color=\"#000000\">[<b>$e</b>]</font> "; } else { echo "<a href=\"?sida=$i\">$e</a> "; }
}
if ($sida <= $sidantal - 1){
$sida2 = $sida+1;
echo ' | <a href="?sida='.$sida2.'"><b>»</b></a>';
}
//############ Sidnavigering slut ##################
}?>
<?$sida = $_GET["sida"]; 
if (!isset($sida)) { $sida = 1; }

$antal_inlagg = mysql_num_rows(mysql_query("Select forumID From mete_forum"));

$sidantal = ceil($antal_inlagg/$antal);
$start = ($sida*$antal)-$antal;

$sql = mysql_query("SELECT datum,inlagg,namn,email FROM mete_forum Order By forumID desc LIMIT $start, $antal, $sida" $conn);

if ($antal_inlagg > $antal) {
$pages = '<br><select class=arkiv name=links onChange="self.location.href=this.options[this.selectedIndex].value;">' . "\n";
while ($cur_page++ < $sidantal) {
$start_records = ($cur_page*$antal)-($antal-1);
$end_records = $start_records+($antal-1);
if ($cur_page== $sida ) { $selected_page = ' selected'; } else { $selected_page = ''; }
$pages .= '<option value="forum_sok.php?sida=' . $cur_page . '"' . $selected_page . '>Inlägg ' . $start_records . '-' . $end_records . '</option>' . "\n";
}
$pages .= '</select>' . "\n";
}
echo $pages;?>
Medlem sedan juni 20059 inlägg
#6

Ingen som kan hjälpa mig?

Medlem sedan mars 20034 471 inlägg
#7

Re: Paging

Jag är rädd att jag läste slarvigt igår... trodde du ville ha ett pagingskript. :r

berget74 skrev:

Skulle behöva hjälp med hur man fixar så att det går att spärra antalet sidor som visas på forumet. Idag läggs till det till en ny sida efter hand som inläggen uppkommer på formumet men skulle alltså vilja låsa det. Någon som kan hjälpa mig? Tacksam för alla hjälp!...

Jag är rädd att jag inte riktigt fattar vad du menar? :q Låsa hur? När ska det läggas till och inte? Vad är "gränsen" för vad som ska visas? :q

Medlem sedan juni 20059 inlägg
#8

Det ska alltså gå att ställa antalet sidor bakåt i tiden.

Exempel:

< 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 >

Och alltså inte som nu läggas till per automatik vilken får till följd att sidan flippar ut.

Mvh,
Mattias

Medlem sedan mars 20034 471 inlägg
#9

Du menar att du vill alltid visa tex de 5 sista sidorna? Så om det finns 7 sidor så ska man kunna välja på 3 4 5 6 7? Har jag fattat rätt?

Medlem sedan juni 20059 inlägg
#10

Nope, senaste sidan är alltid "1". Klickar man på "1" så visas alltså de 50 senaste inläggen. Vill alltså att den ska sluta skriva ut sidnummer efter ett förbestämt antal, exempelvis 10 sidor. Tips på hur man fixar det?

Medlem sedan mars 20034 471 inlägg
#11

Men det borde väl vara enkelt, eller var tänker jag fel?

$visaMax = 10;
$sidantal = min($visaMax, ceil($antal_inlagg/$antal));
Medlem sedan juni 20059 inlägg
#12

Får det inte att funka tyvärr.

Får fel på följande rad:

                        $sql = mysql_query("SELECT datum,inlagg,namn,email FROM mete_forum Order By forumID desc LIMIT $start, $antal, $sida, $visaMax" $conn);
<?$sida = $_GET["sida"];            
                        if (!isset($sida)) { $sida = 1; }

                        $antal_inlagg = mysql_num_rows(mysql_query("Select forumID From mete_forum"));
  
						$sidantal = min($visaMax, ceil($antal_inlagg/$antal));
                        $start = ($sida*$antal)-$antal;

                        $sql = mysql_query("SELECT datum,inlagg,namn,email FROM mete_forum Order By forumID desc LIMIT $start, $antal, $sida, $visaMax" $conn);

                        if ($antal_inlagg > $antal) {
		          $pages = '<br><select class=arkiv name=links onChange="self.location.href=this.options[this.selectedIndex].value;">' . "\n";
		          while ($cur_page++ < $sidantal) {
			    $start_records = ($cur_page*$antal)-($antal-1);
			    $end_records = $start_records+($antal-1);
			    if ($cur_page== $sida ) { $selected_page = ' selected'; } else { $selected_page = ''; }
			    $pages .= '<option value="forum_sok.php?sida=' . $cur_page . '"' . $selected_page . '>Inlägg ' . $start_records . '-' . $end_records . '</option>' . "\n";
		          }
		          $pages .= '</select>' . "\n";
                        }
                        echo $pages;?>
Medlem sedan mars 20034 471 inlägg
#13

Du missförstod.
$visaMax ska inte in i SQL-satsen. Utan se till att den variabel som innehåller maxvärdet av vad du ska hämta får minvaärdet av allt och $visaMax.

Medlem sedan juni 20059 inlägg
#14

Har testat båda delarna, tror jag. Är inte detta som du menar?

                        <?$sida = $_GET["sida"];            
                        if (!isset($sida)) { $sida = 1; }

                        $antal_inlagg = mysql_num_rows(mysql_query("Select forumID From mete_forum"));
  
						$visaMax = 10;
						$sidantal = min($visaMax, ceil($antal_inlagg/$antal));
                        $start = ($sida*$antal)-$antal;

                        $sql = mysql_query("SELECT datum,inlagg,namn,email FROM mete_forum Order By forumID desc LIMIT $start, $antal, $sida" $conn);

                        if ($antal_inlagg > $antal) {
		          $pages = '<br><select class=arkiv name=links onChange="self.location.href=this.options[this.selectedIndex].value;">' . "\n";
		          while ($cur_page++ < $sidantal) {
			    $start_records = ($cur_page*$antal)-($antal-1);
			    $end_records = $start_records+($antal-1);
			    if ($cur_page== $sida ) { $selected_page = ' selected'; } else { $selected_page = ''; }
			    $pages .= '<option value="forum_sok.php?sida=' . $cur_page . '"' . $selected_page . '>Inlägg ' . $start_records . '-' . $end_records . '</option>' . "\n";
		          }
		          $pages .= '</select>' . "\n";
                        }
                        echo $pages;?>
Medlem sedan juli 20023 617 inlägg
#15

Saknas det inte ett kommatecken före $conn i din mysql_query?

Medlem sedan mars 20034 471 inlägg
#16

fiddler har rätt. Det borde vara:
$sql = mysql_query("SELECT .... LIMIT $start, $antal, $sida", $conn);

Kan LIMIT verkligen ta tre argument? Vad innebär dessa tre?

Medlem sedan juni 20059 inlägg
#17

Tack, nu funkar det men tyvärr så får jag nu ett fel på andra raden på:

                <?}else{
                  while($RS = mysql_fetch_assoc($sql)) {?>

Får även ett "s" längst upp i vänstra hörnet, fattar inte varför, något som vet?

Medlem sedan mars 20034 471 inlägg
#18

s:et måste betyda att du någonstans skriver ut ett 's'. Antingen har du ett s utanför PHP-koden, eller så skriver du ut någon variabel som innehåller 's'.

Nu ser man ju inte hela koden, så du kanske har ett skumt variabelnamn, men tja... Det är INTE SQL-frågan du skickar till mysql_fetch-funktionerna utan resultathandtaget. Alltså:

$sql = "SELECT * FROM Tabell"; //tex
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {

Om det inte var detta som var felet, posta felmeddelandet!

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