Avatar billede Jakie Juniormester
10. marts 2012 - 12:32 Der er 12 kommentarer og
1 løsning

Pagination system virker ikke

Hej.

Jeg er igang med at lave et pagination system, men har ikke gjort det før, så får et par fejl. Derfor søger jeg lidt hjælp til rettelse af disse fejl.

Jeg har tre script.

Fejlen: Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in pagination.php:

<?php
class Paginate {

    public
          $current,
          $limit,
          $total,
          $offset,
          $count,
          $data = array(),
          $pos,
          $residu,
          $interval,
          $range;
         
    public function_construct($page, $display, $range = 5) { /// her er fejlen!

          $this->current = (int) $page;
          $this->limit = (int) $display;
          $this->setRange($range);
         
          }
         
    public function setTotal($total) {
          $this->total = (int) $total;
          $this->count = ceil($this->total / $this->limit);
         
          }
         
    public function setLimit($limit) {
        $this->limit  = (int) $limit;
        $this->offset =($this->current - 1) * $this->limit;
        $this->pos    = $this->offset + 1;
          }
       
    public function isFirst() { return $this->current == !; }
   
    public function isLast() { return $this->current == $this->count; }
   
    public function isBegin() {
   
    return $this->current <= $this->interval + $this->residu;

    }
   
    public function isEnd() {
   
    return $this->current > $this->count - ($this->interval + $this->residu);


    }
   
    public function hasPrev() { return $this->current > 1; }
   
    public function hasNext() { return $this->current < $this->count; }
   
    public function get2query($link, $key = 'page') {
   
          $get = array_change_key_case($_GET, CASE_LOWER);
          $get[$key] = $link;
          return http_build_query($get);
    }
 
    public function setRange($range) {
          $this->range = (int) $range;
          $this->$interval = floor($this->range / 2);
          $this->$residu = $this->range % 2;
    }
    public function minMax(&$min, &$max) {
          $min = $this->current - $this->interval;
          $max = $this->current + $this->interval;
         
          if ($this->residu == 0)
          {
          $this->current < ($this->count / 2) ? $min++ : $max--;
         
         
    if($min < 1) {
        $max -= $min - 1;
        $min = 1;
    } elseif ($max > $this->count) {
        $min -= $max - $this->count;
        $max = $this->count;
   
    }
     
    }

}
?>

JEg kan ikke helt se, hvad fejlen er?


Der dukker nok flere fejl op, så det kan være pointene deles.

På forhånd mange tak for hjælpen.
Avatar billede DeeDawg Nybegynder
10. marts 2012 - 12:54 #1
Kunne du evt. vise os, hvordan du benytter denne klasse? :)
Avatar billede Jakie Juniormester
10. marts 2012 - 13:23 #2
Selvfølgelig :)

Jeg har to, en controller.php:
<?php
require_once 'paginate.php';

$get_input = array_change_key_case($_GET, CASE_LOWER);
$page = isset($_GET['page']) ? $get_input['page'] :null;
$pagin = new Paginate($page, 10, 6);
$db = @new MYSQLI('mysql1.gigahost.dk','Andres','fodbold9939','Andres_hua');

$db->connect_errno and die("kunne ikke connece: " .$db->connect);


$res = $db->query('SELECT COUNT(*) FROM brugere');
$total = $res->fetch_row();
$pagin->setTotal($total[0]);
$res->close();

$sql = 'SELECT * FROM brugere';
$sql .= ' LIMIT '.$pagin->limit;
$sql .= ' OFFSET .$pagin->offset';




if (!$res = $db->query($sql)) {
        echo 'Query fejlede : '.$db->error;
}  else {
    while($row = $res->fetch_assoc()) {
      $pagin->data[] = $row;
    }
    $res->close();

}
print_r($pagin);

$db->close();
?>

Og så har en index side, hvor jeg viser det til browseren:


<?php
    require_once 'controller.php';
   
   
    ?>
   
   
    <?php
    echo 'Side '.$pagin->current.' af '.$pagin->count;
    ?>
   
   
    <table>
    <tr>
          <th>ID</th>
          <th>Name</th>
          <th>Rang</th>
    </tr>
    <?php
   
    foreach($pagin->data as $data) :
?>



<td><?php echo $pagin->pos++; ?></td>
<td><?php echo $data['name']; ?></td>
<td><?php echo $data['name_level']; ?></td>


<?php
  endforeach;
?>
</table>

<! -- FIRST -- >
<?php if ($pagin->isFirst()) : ?>
<span class="inactive">Første</span>
<?php else : ?>
<a class="paginate" href="?<?php $pagin->get2Query(1);?>">Første</a>
<?php endif; ?>

<! -- End of FIRST -->



<! -- Prev -->
<?php if($pagin->hasPrev()) : ?>
<a class="paginate" href="?<?php echo $pagin->get2Query($pagin->current - 1); ?>">Forrige</a>
<?php else : ?>
<span class="inactive">$laqou; Forrige</span>
<?php endif; ?>
<! -- end prev -->

<?php if(!$pagin->isBegin()) : ?>
<! -- Begin -->
<li><span class="paginate">...</span></li>
<! -- begin END -->
<?php endif; ?>






<?php for($pagin->minMax($i, $j); $i <= $j; $i++) : ?>
<li>
    <?php if($pagin->current == $i) : ?>
    <span class="current">"><?php echo $i; ?></span>
    <?php else : ?>
    <a class="paginate" href="?<?php echo $pagin->get2query($i); ?>"><?php echo $i; ?></a>
    <?php endif; ?>
</li>
<?php endfor;?>





<?php if(!$pagin->isEnd()) : ?>
<! -- END -->
<li>><span class="paginate">...</span></li>
<! -- END -->
<?php endif; ?>



<! -- Next -->
<?php if($pagin->hasNext()) : ?>
<a class="paginate" href="?<?php echo $pagin->get2Query($pagin->current + 1); ?>">Næste</a>
<?php else : ?>
<span class="inactive">$laqou; Næste</span>
<a class="paginate" href="?page=<?php echo ($pagin->current + 1); ?>">Næste</a>
<span class="inactive">$laqou; Næste</span>
<?php endif; ?>
<! -- Next -->



<! -- Last -->
<?php if($pagin->isLast()) : ?>
<span class="inactive">Sidste</span>
<?php else : ?>
<a class="paginate" href="?<?php echo $pagin->get2Query($pagin->count); ?>">Sidste</a>
<span class="inactive">$laqou; Sidste</span>
<?php endif; ?>
<! -- Last -->


Håber det kunne bruges:)
Avatar billede michael_stim Ekspert
10. marts 2012 - 13:24 #3
Du mangler et mellemrum mellem function og __construct
Avatar billede vagnk Juniormester
10. marts 2012 - 13:39 #4
Du mangler osse en højre eller lukke tuborg "}" et eller andet sted, jeg tror det er i public function minMax
Avatar billede Jakie Juniormester
10. marts 2012 - 13:45 #5
Tak :)

Får nu fejlen i denne linje:
public function isFirst() { return $this->current == !; }

Parse error: syntax error, unexpected ';'

i paginate.php?
Avatar billede Jakie Juniormester
10. marts 2012 - 13:48 #6
Fandt selv fejlen, ! skulle have været 1 :)
Avatar billede Jakie Juniormester
10. marts 2012 - 13:49 #7
Men får istedet på sidste linje fejlen: Parse error: syntax error, unexpected ';', expecting T_FUNCTION

i paginate.php`?
Avatar billede Jakie Juniormester
10. marts 2012 - 13:58 #8
Fik jeg også rettet vagnk, tak:)
Avatar billede Jakie Juniormester
10. marts 2012 - 14:34 #9
Nu får jeg en fejl, som jeg ikke lige kan gennemskue:


Warning: Division by zero in /home/www/virtualmanageravis.dk/test/paginate.php on line 26
Query fejlede : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$pagin->limit OFFSET $pagin->offset' at line 1Paginate Object ( [current] => [limit] => [total] => 33 [offset] => [count] => 0 [data] => Array ( ) [pos] => [residu] => [interval] => [range] => ) Side af 0
Avatar billede vagnk Juniormester
11. marts 2012 - 08:31 #10
I public function setTotal har du denne linje
$this->count = ceil($this->total / $this->limit);
Har du checket $this->limit?

Hvordan debugger du?
Avatar billede JensPeterSvensson Nybegynder
11. marts 2012 - 10:35 #11
- der skal to _ foran construct.

__construct http://www.php.net/manual/en/language.oop5.decon.php.

- I mysql kan du få talt antallet af rækker i den samme query som du pager på:
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows.

Du sætter default værdien af page til null castet til int, hvad jeg antager enten bliver til 0 eller null. Du burde nok sætte default værdien til 1.
Avatar billede Jakie Juniormester
11. april 2012 - 20:54 #12
Der må  gerne angives svar. beklager mit sene svar!
Avatar billede Jakie Juniormester
22. maj 2012 - 09:37 #13
intet svar så lukker selv
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester