Gå til innhold

Lage fungerende "paging"-funksjon


Gjest Slettet+6132

Anbefalte innlegg

Gjest Slettet+6132

Jeg sitter her og soser med mitt lille prosjekt, men "paging"-funksjonen min er ikke helt habil :nei:

 

<?
function dvd_get($start = 0)
{
 global $config, $lng;
 
 $start = str_replace("-", "", $start);
 $start = htmlspecialchars($start);
 $start = mysql_real_escape_string($start);
 $start = intval($start);
 
 if(!isset($start))
 {
   $start = 0;
 }
 if(!isset($next))
 {
   // Et tall satt i config som sier hvor mange dvder det skal på hver side
   $next = $config['dvd_count'];
 }
 
 $query = mysql_query("SELECT * FROM dvd WHERE owner= '{$_SESSION['id']}' ORDER BY `collection` ASC, `colnum` ASC, `title` ASC LIMIT {$start},{$next}") or die('Query failed: ' . mysql_error());
 
 if(mysql_num_rows($query) < $config['dvd_count'])
 {
   $count_to = mysql_num_rows($query);
   $nonext = 1;
 }
 else
 {
   $count_to = $config['dvd_count'];
 }
 
 if(!isset($start))
 {
   $start = 0;
   $count = $count_to;
 }
 else
 {
   if(is_numeric($start))
   {
     $count = $count_to + $start;
   }
 }
 if(is_numeric($start))
 {
   $previous = $start - $count_to;
   $next = $count_to + $start;
 }
 $started = $start;

 // Her er det noe output før uthenting av data
 
 if(mysql_num_rows($query) > 0)
 {
   while($start < $count)
   {
     $row = mysql_fetch_assoc($query);
     // Her printes alt ut
     $start++;
   }
 }
 else
 {
   // Output hvis det ikke er noe info å printe
 }
 echo "    </table>\n\n";
 echo "    <div class=\"text\">\n";
 echo "      <p style=\"margin-top: 10px;\">\n";
 if($started != 0)
 {
   echo "        <a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=all&start={$previous}\"><< Previous</a> -\n";
 }
 else
 {
   echo "        << Previous -\n";
 }
 if($nonext != 1)
 {
   echo "        <a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=all&start={$next}\">Next >></a>\n";
 }
 else
 {
   echo "        Next >>\n";
 }
 echo "      </p>\n";
 echo "    </div>\n";
 }
?>

 

Noen forslag til endringer? Jeg står helt fast :/

 

EDIT: Slik den er nå fungerer den flott med "neste", men det begynner å krølle seg når jeg kommer til siste siden og trykker "tilbake" :p

Endret av Slettet+6132
Lenke til kommentar
Videoannonse
Annonse

Okei..

Kan komme med noen kommentarer, ihvertfall...

1. Denne er vel strengt tatt unødvendig:

if(!isset($start))
{
  $start = 0;
}

$start vil jo alltid være satt, i og med at den blir satt til 0, dersom den ikke blir satt i kallet til funksjonen...

 

2. Denne snutten skjønner jeg ikke helt heller vitsen med:

if(!isset($start))
{
  $start = 0;
  $count = $count_to;
}
else
{
  if(is_numeric($start))
  {
    $count = $count_to + $start;
  }
}

$started = $start;

Som sagt så vil vel alltid $start være satt...

 

Kan du gi et eksempel på hvordan du kaller denne funksjoen ?

 

EDIT: Ble mye krøll her..

Endret av kakkle
Lenke til kommentar
Gjest Slettet+6132
Okei..

Kan komme med noen kommentarer, ihvertfall...

1. Denne er vel strengt tatt unødvendig:

*snip*

$start vil jo alltid være satt, i og med at den blir satt til 0, dersom den ikke blir satt i kallet til funksjonen...

 

2. Denne snutten skjønner jeg ikke helt heller vitsen med:

*snip*

Som sagt så vil vel alltid $start være satt...

 

Kan du gi et eksempel på hvordan du kaller denne funksjoen ?

 

EDIT: Ble mye krøll her..

5689796[/snapback]

 

Jeg vet det er mye unødvendig der, jeg skrev funksjonen for veldig lenge siden da mine php-kunnskaper var meget mindre enn i dag :p

 

Funksjonen kalles fra index.php som er hele hovedfila i systemet. (Om du vil ta en titt på hele opplegget i sin helhet kan du sjekke ut linken i signaturen min.)

 

*snip*
 case "dvd":
   if(auth())
   {
     switch($_GET['action'])
     {
       case "read":
         switch($_GET['target'])
         {
           case "all":
             if(isset($_GET['msg']))
             {
               echo page($_GET['msg']);
             }
             dvd_searchform();
             dvd_get($_GET['start']);
           break;
*snip*

 

Det er en del av index.php hvor funksjonen blir brukt. Har også prøvd å søke meg frem til andre måter å gjøre paging-funksjonen på, men problemet kommer i det med å få hente ut så og så mange rader samtidig som å finne ut hvilken side det skal være o.l. Jeg har en tendens til å tenke for avansert slik at jeg bare kalger krøll for meg selv :roll:

Lenke til kommentar

Okei... Skal prøve å endre litt på funksjonen din:

<?
function dvd_get($start = 0)
{
global $config, $lng;

$start = intval($start);

if(!isset($next))
{
  // Et tall satt i config som sier hvor mange dvder det skal på hver side
  $next = $config['dvd_count'];
}
$sql = "SELECT COUNT(*) AS ant FROM dvd WHERE owner='{$_SESSION['id']}";
$query = mysql_query($sql) or die ("ERROR in query: $sql<br>".mysql_error());
$row = mysql_fetch_array($query);
$ant = $row["ant"]; // antall dvder totalt for den aktuelle eier

$sql = "SELECT * FROM dvd WHERE owner= '{$_SESSION['id']}' ORDER BY `collection` ASC, `colnum` ASC, `title` ASC LIMIT {$start},{$next}";
$query = mysql_query($sql) or die('Query failed: $sql<br>' . mysql_error());

// Her er det noe output før uthenting av data

if($ant > 0)
{
  while($row = mysql_fetch_assoc($query)){
    // Her printes alt ut
  } //while
} //if
else
{
  // Output hvis det ikke er noe info å printe
}
echo "    </table>\n\n";
echo "    <div class=\"text\">\n";
echo "      <p style=\"margin-top: 10px;\">\n";
if($start > 0)
{
 $previous = $start - $next;
  echo "<a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=all&start={$previous}\"><< Previous</a> -\n";
}
else
{
  // Her trenger du vel forsåvidt ingenting ?
}
if($ant > ($next+$start)) // Dersom det er flere dvd enn det som skal være pr side
{
 $nestestart = $start+$next;
  echo "<a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=all&start={$nestestart}\">Next >></a>\n";
}
else
{
  //Her trenger du vel heller ingenting ?
}
echo "      </p>\n";
echo "    </div>\n";
}
?>

 

Koden er slett ikke testet...

Det forutsetter at $config["dvd_count"] inneholder hvor mange dvd'er som skal vises pr side..

 

Spør hvis du lurer på... Kan være masse småfeil i koden (Er litt vanskelig å få oversikten i et lite tekstfelt...)

Lenke til kommentar
Gjest Slettet+6132
Okei... Skal prøve å endre litt på funksjonen din:

*snip*

Koden er slett ikke testet...

Det forutsetter at $config["dvd_count"] inneholder hvor mange dvd'er som skal vises pr side..

 

Spør hvis du lurer på... Kan være masse småfeil i koden (Er litt vanskelig å få oversikten i et lite tekstfelt...)

5690723[/snapback]

 

Takk for tilbakemelding, skal prøve litt senere. $config["dvd_count"] forteller hvor mange dvder som skal vises per side ja ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...