webForumDet fria alternativet

Konstigt fel med paging

PHP

1 svar · 1 007 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#1

Använder denna paging:
http://www.phpbuilder.com/board/showthread.php?t=10283679

nån som vill testa så kanske ta den koden eller gör om min.

Skumt är detta:
Har satt så att det visar 25 inlägg och då syns inte inlägg #26 på sidan 2 utan den börjar med inlägg #27. Samma sak sen på sidan 3.

Nån som ser varför?!

<?php
/*
   EXAMPLE:
   include($_SERVER["DOCUMENT_ROOT"] . "/classes/paging.class.php");
   $paging = new PagedResults();
   $paging->TotalResults = 500; //This is how many results to page through.
                                //mysql_num_rows($query) would just fine!
   print_p($paging->InfoArray());

*/

class PagedResults {

   /* These are defaults */
   var $TotalResults;
   var $CurrentPage = 1;
   var $PageVarName = "page";
   var $ResultsPerPage = 20;
   var $LinksPerPage = 10;

   function InfoArray() {
      $this->TotalPages = $this->getTotalPages();
      $this->CurrentPage = $this->getCurrentPage();
      $this->ResultArray = array(
                           "PREV_PAGE" => $this->getPrevPage(),
                           "NEXT_PAGE" => $this->getNextPage(),
                           "CURRENT_PAGE" => $this->CurrentPage,
                           "TOTAL_PAGES" => $this->TotalPages,
                           "TOTAL_RESULTS" => $this->TotalResults,
                           "PAGE_NUMBERS" => $this->getNumbers(),
                           "MYSQL_LIMIT1" => $this->getStartOffset(),
                           "MYSQL_LIMIT2" => $this->ResultsPerPage,
                           "START_OFFSET" => $this->getStartOffset(),
                           "END_OFFSET" => $this->getEndOffset(),
                           "RESULTS_PER_PAGE" => $this->ResultsPerPage,
                           );
      return $this->ResultArray;
   }

   /* Start information functions */
   function getTotalPages() {
      /* Make sure we don't devide by zero */
      if($this->TotalResults != 0 && $this->ResultsPerPage != 0) {
         $result = ceil($this->TotalResults / $this->ResultsPerPage);
      }
      /* If 0, make it 1 page */
      if(isset($result) && $result == 0) {
         return 1;
      } else {
         return $result;
      }
   }

   function getStartOffset() {
      $offset = $this->ResultsPerPage * ($this->CurrentPage - 1);
      if($offset != 0) { $offset++; }
      return $offset;
   }

   function getEndOffset() {
      if($this->getStartOffset() > ($this->TotalResults - $this->ResultsPerPage)) {
         $offset = $this->TotalResults;
      } elseif($this->getStartOffset() != 0) {
         $offset = $this->getStartOffset() + $this->ResultsPerPage - 1;
      } else {
         $offset = $this->ResultsPerPage;
      }
      return $offset;
   }

   function getCurrentPage() {
      if(isset($_GET[$this->PageVarName])) {
         return $_GET[$this->PageVarName];
      } else {
         return $this->CurrentPage;
      }
   }

   function getPrevPage() {
      if($this->CurrentPage > 1) {
         return $this->CurrentPage - 1;
      } else {
         return false;
      }
   }

   function getNextPage() {
      if($this->CurrentPage < $this->TotalPages) {
         return $this->CurrentPage + 1;
      } else {
         return false;
      }
   }

   function getStartNumber() {
      $links_per_page_half = $this->LinksPerPage / 2;
      /* See if curpage is less than half links per page */
      if($this->CurrentPage <= $links_per_page_half || $this->TotalPages <= $this->LinksPerPage) {
         return 1;
      /* See if curpage is greater than TotalPages minus Half links per page */
      } elseif($this->CurrentPage >= ($this->TotalPages - $links_per_page_half)) {
         return $this->TotalPages - $this->LinksPerPage + 1;
      } else {
         return $this->CurrentPage - $links_per_page_half;
      }
   }

   function getEndNumber() {
      if($this->TotalPages < $this->LinksPerPage) {
         return $this->TotalPages;
      } else {
         return $this->getStartNumber() + $this->LinksPerPage - 1;
      }
   }

   function getNumbers() {
      for($i=$this->getStartNumber(); $i<=$this->getEndNumber(); $i++) {
         $numbers[] = $i;
      }
      return $numbers;
   }

}

?>
										<?php
$Paging = new PagedResults();
										
										/* This is required in order for the whole thing to work! */
											//$Paging->TotalResults = 13283;
										$Paging->TotalResults = mysql_num_rows(mysql_query("Select * From cms_forum"));
										
										/* If you want to change options, do so like this INSTEAD of changing them directly in the class! */
										$Paging->ResultsPerPage = 25;
										$Paging->LinksPerPage = 15;
										$Paging->PageVarName = "sida";
										
										/* Get our array of valuable paging information! */
										$InfoArray = $Paging->InfoArray();
										//echo $InfoArray["START_OFFSET"];					
										//echo "SELECT * FROM cms_forum Order by datum desc, torgID desc LIMIT ".$InfoArray["MYSQL_LIMIT1"].", ".$InfoArray["MYSQL_LIMIT2"];	
							            $sql = mysql_query("SELECT * FROM cms_forum Order by datum desc, torgID desc LIMIT ".$InfoArray["MYSQL_LIMIT1"].", ".$InfoArray["MYSQL_LIMIT2"]) or die(mysql_error());
										if (mysql_affected_rows() == 0){?>
									   		<p>Inga inlägg i forumet...</p>
										<?php
										}else{
											while ($RS = mysql_fetch_array($sql)){?>
												<span class="date_post"><?php echo dtLeft($RS['datum']);?> - <?php echo tidRight($RS['datum']);?></span><br />
												<span class="post"><?php echo $RS['annons'];?></span>
                                                
                                                <div class="post_end">	
												<div class="post_end_first"><strong>Skrivet av: </strong><span class="theader"><?php echo $RS['namn'];?></span>
												<?php if(isset($RS['losenord'])){?>
													&nbsp;&nbsp;-&nbsp;&nbsp;<a class="theader" href="mailto:<?php echo $RS['email'];?>"><span><?php echo $RS['email'];?></span></a>
																							
												<?php }else{?>
													&nbsp;&nbsp;-&nbsp;&nbsp;<a class="theader" href="mailto:<?php echo $RS['email'];?>"><span><?php echo $RS['email'];?></span></a>
												<?php }?></div>
                                                <div class="post_end_last">
												<strong>IP: </strong><a class="theader" href="http://www.ip-adress.com/whois/<?php echo $RS['ip'];?>" target="_blank"><span><?php echo $RS['ip'];?></span></a></div>
                                                </div>
							            		
							            		<?php
												$y++;
											}
											if($InfoArray["TOTAL_PAGES"] > 1){
												/* Sidnavigeringen visas här: */
												echo '<div class="pagination">';
														/* Print out our prev link */
														if($InfoArray["PREV_PAGE"]) {
															echo "<a href='?sid=".$_GET['sid']."&sida=1'>&lt;&lt;</a> ";
															echo "<a href='?sid=".$_GET['sid']."&sida=".round($InfoArray["PREV_PAGE"],0)."'>&lt;</a> ";
														} else {
															echo "";
														}
														/* Example of how to print our number links! */
														for($i=0; $i<count($InfoArray["PAGE_NUMBERS"]); $i++) {
															if($InfoArray["CURRENT_PAGE"] == $InfoArray["PAGE_NUMBERS"][$i]) {
																echo "<a href='?sid=".$_GET['sid']."&sida=".round($InfoArray["PAGE_NUMBERS"][$i],0)."' class='current'>".round($InfoArray["PAGE_NUMBERS"][$i],0)."</a> ";
															} else {
																echo "<a href='?sid=".$_GET['sid']."&sida=".round($InfoArray["PAGE_NUMBERS"][$i],0)."' class='inactive'>".round($InfoArray["PAGE_NUMBERS"][$i],0)."</a> ";
															}
														}	
														/* Print out our next link */
														if($InfoArray["NEXT_PAGE"]) {
															echo " <a href='?sid=".$_GET['sid']."&sida=".round($InfoArray["NEXT_PAGE"],0)."'>&gt;</a>";
															echo " <a href='?sid=".$_GET['sid']."&sida=".$InfoArray["TOTAL_PAGES"]."'>&gt;&gt;</a> ";
														} else {
															echo "";
														}
												echo '</div>';
											}
									        }?>
Medlem sedan juli 20023 617 inlägg
#2

Testa att kommentera bort tredje raden i funktionen och se vad resultatet blir.

function getStartOffset() {
      $offset = $this->ResultsPerPage * ($this->CurrentPage - 1);
      //if($offset != 0) { $offset++; }
      return $offset;
   }
145 ms totalt · 2 externa anrop · v20260731065814-full.2ae45ccc
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)