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.
Annonceindlæg fra Computerworld it-jobbank
10. marts 2012 - 12:54
#1
Kunne du evt. vise os, hvordan du benytter denne klasse? :)
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:)
10. marts 2012 - 13:24
#3
Du mangler et mellemrum mellem function og __construct
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
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?
10. marts 2012 - 13:48
#6
Fandt selv fejlen, ! skulle have været 1 :)
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`?
10. marts 2012 - 13:58
#8
Fik jeg også rettet vagnk, tak:)
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
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?
11. april 2012 - 20:54
#12
Der må gerne angives svar. beklager mit sene svar!
intet svar så lukker selv
Vi tilbyder markedets bedste kurser inden for webudvikling