Avatar billede downloadcentral.dk Nybegynder
06. juni 2004 - 03:51 Der er 22 kommentarer og
1 løsning

Paging PHP/MySQL

Hej,

jeg har nu længe forsøgt at få paging til at virke til siden www.dload.dk, men uden succes. Derfor håber jeg nu på nogen kan skære det så meget ud i pap som overhovedet muligt for mig og muligvis hjælpe mig med at tilpasse paging www.dload.dk, da jeg efterhånden er helt lost.

Jeg ville gerne have det skulle vises noget lignende <- 1 2 3 4 ->, med 5 downloads pr. side ( hvor pilene er billeder jeg selv laver )

Jeg bruger MySQL som database og I kan sagtens få et kig i den, hvis det kunne hjælpe?
Avatar billede roenving Novice
06. juni 2004 - 03:55 #1
Du skal lige huske, at du ikke må have to ens spørgsmål åbne, så du skal lukke det gamle !-)
Læg selv et svar og acceptér det !o]

mvh
/coadmin
Avatar billede downloadcentral.dk Nybegynder
06. juni 2004 - 04:00 #2
Nå, ja det glemte jeg helt. Det er gjort! :o)
Avatar billede jakobclausen Nybegynder
06. juni 2004 - 07:54 #3
Avatar billede dennismp Nybegynder
06. juni 2004 - 11:48 #4
Jeg ved ikke om dette kan hjælpe dig.

http://dennis.moellegaard.dk/v4/php/pager.php?source=2

Lidt forklaring:

    $step = 1;                            // Hvor mange skal vises pr. side

    // "Start" link - hopper til den første side. 1 er nok knappen er aktiv
    // 2 er når den er ghosted (når den ikek kan bruges). Kan sagents være
    // html. Hvis de er tomme printes der ikke et "Start" link-
    $startLink1 = 'Start';
    $startLink2 = 'Start';

    // "Slut" link. Hopper til den sidste side. Virker på samme med som
    // Start1 og Start2
    $endLink1 = 'End';
    $endLink2 = 'End';

    // Næste side. Videre til næste side. 1 = Aktiv, 2 = Ghosted. 2'eren
    // Kan godt være tom hvor der så ikke printes en next-knap.
    $nextLink1 = 'Next';                // active
    $nextLink2 = 'Next';                // [optional] inactive
    // Hvis der står: Start Prev aaa 4 5 6 bbb Next End
    // så er $nextMore sat til ...
    $nextMore  = '...';                    // [optional] if more
   
    // Samme som nextLink1/nextLink2/nextMore
    $prevLink1 = 'Prev';                // Active
    $prevLink2 = 'Prev';                // [optional] inactive
    $prevMore  = '...';                    // [optional] if more..

    // For mange forrige / efterfølgende side-links skal der laves

    $pageLinks = 2;

    // SQL til at få talt antal rækker.
    $sqlCount = "SELECT count(1) FROM `text`";

    // SQL til at få vist rækkerne. Der tilføjes selv LIMIT.
    $sqlSelect = "SELECT id, unix_timestamp(date), title, `text` ".
            "FROM `text` ".
            "ORDER BY date DESC ";

    // Funktion der modtager $row og så viser den. Kaldes for hver række.
    function showRow($row) {
        print "<h2><code>" . gmdate("F j, Y, g:i a", $row[1]) . " GMT:</code> " . stripslashes($row[2]) . "</h2>\n";
        print stripslashes($row[3]) ."\n";
    }

..
selv genereringen.

Det kan måske bruges?
Avatar billede dennismp Nybegynder
06. juni 2004 - 11:48 #5
Avatar billede vind Nybegynder
06. juni 2004 - 16:32 #6
Godt nok ikke så gode "anmeldelser", men det handler da om emnet... :)

http://www.eksperten.dk/artikler/315

//vind
Avatar billede downloadcentral.dk Nybegynder
06. juni 2004 - 20:49 #7
Jeg er ikke god til paging/php. Jeg har forsøgt at få det til at virke i flere måneder nu, så det skal nok skæres meget ud i pap :).
Men jeg kigger lige på det i har skrevet først!
Avatar billede downloadcentral.dk Nybegynder
14. juni 2004 - 08:58 #8
Dennis..

For første gang får jeg ingen fejl, men der er heller ingen paging på siden stadig.
Jeg har rettet i koden så den ser således ud nu:

<?php
    require_once("database.php");        // Connect to DB
    $step = 10;

    $startLink1 = 'Start';                // [optional] Active
    $startLink2 = 'Start';                // [optional] not active

    $endLink1 = 'End';                    // [optional] Active
    $endLink2 = 'End';                    // [optional] not active

    $nextLink1 = 'Next';                // active
    $nextLink2 = 'Next';                // [optional] inactive
    $nextMore  = '...';                    // [optional] if more

    $prevLink1 = 'Prev';                // Active
    $prevLink2 = 'Prev';                // [optional] inactive
    $prevMore  = '...';                    // [optional] if more..

    // optional means, that the link isnt displayed if string is empty
    $pageLinks = 2;                        // Number of links on each side of current apge
    $sqlCount = "SELECT count(*) FROM dlc_files";
    $sqlSelect = "SELECT id, unix_timestamp(date), title, `text` ".
            "FROM dlc_files".
            "ORDER BY titel DESC ";

    function showRow($row) {
        print "<h2><code>" . gmdate("F j, Y, g:i a", $row[1]) . " GMT:</code> " . stripslashes($row[2]) . "</h2>\n";
        print stripslashes($row[3]) ."\n";
    }

    // ***************'

    if( isset($_GET['page']) )
        $currentpage = intval($_GET['page']);
    else
        $currentpage = 0;

    $res = mysql_query($sqlCount) or die(mysql_error());
    $total = mysql_result($res,0,0);

    $startrow = $currentpage*$step;
    $sql = $sqlSelect .
        " LIMIT $startrow,$step";

    $res = mysql_query($sql);
    if( $res ) {
        while($row = mysql_fetch_array($res)) {
            showRow($row);
        }

        $lastPage = floor($total/$step)-1;

        if( $currentpage != 0 && !empty($startLink1) ) {
            print "<a href=\"".$_SERVER['PHP_SELF']."?page=0\">$startLink1</a> ";
        }
        elseif( $currentpage == 0 && !empty($startLink2) ) {
            print " $startLink2 ";
        }

        if( $currentpage > 0 ) {
            print "<a href=\"".$_SERVER['PHP_SELF']."?page=". ($currentpage-1) ."\">$prevLink1</a> ";
        }
        elseif(!empty($prevLink2) ) {
            print " $prevLink2 ";
        }

        // Print $pageLinks previously pages
        $prevStart = $currentpage-$pageLinks;
        if( $prevStart < 0 )
            $prevStart = 0;

        // Print $prevMore if needed
        if( $page > 0 && !empty($prevMore) )
            print " $prevMore ";

        for($i=$prevStart;$i<$currentpage;$i++) {
            print ' <a href="' .$_SERVER['PHP_SELF'].'?page='. $i . '">'.
                ($i+1) . '</a> ';
        }
       
        // Current page
        print ($currentpage+1);

        $startEnd = $currentpage+$pageLinks+1; // Skip current page
        if( $startEnd > $lastPage )
            $startEnd = $lastPage;

        // pagelinks after current page
        for($i=$currentpage+1;$i<$startEnd;$i++) {
            print ' <a href="' .$_SERVER['PHP_SELF'].'?page='. $i . '">'.
                ($i+1) . '</a> ';
        }

        if( ($currentpage+$pageLinks+1) < $lastPage )
            print " $nextMore ";

        if( ($startrow+$step) < $total ) {
            print " <a href=\"".$_SERVER['PHP_SELF']."?page=". ($currentpage+1) ."\">$nextLink2</a>";
        }
        elseif(!empty($nextLink2) ) {
            print " $nextLink2 ";
        }

        if( $currentpage != $lastPage && !empty($endLink1) ) {
            print " <a href=\"".$_SERVER['PHP_SELF']."?page=$lastPage\">$endLink1</a> ";
        }
        elseif( $currentpage == $lastPage && !empty($endLink2) ) {
            print " $endLink2 ";
        }
    }
?>



Jeg ved ikke hvad jeg mere skal ændre? Og hvordan kan jeg få mine egne valgte billeder ind som forrige/næste??
Avatar billede downloadcentral.dk Nybegynder
14. juni 2004 - 09:03 #9
Jacob, nice kode du havde der... Men hvad skal jeg skrive efter "WHERE"?
Og er det jeg hidtil har rettet rigtigt?

<?php
    require('database.php');
    $limit=10;  // How many rows to display on each page
   
    $numresults=mysql_db_query($db, "SELECT fields FROM dlc_files WHERE insert_condition_here", $connection);
    $numrows=mysql_num_rows($numresults);

    if (empty($offset)) {
        $offset=0; // Where to start in the list, if nothing's specified. Default should be '0'
    }

    // Retrieve your data here
    $result=mysql_db_query("SELECT fields FROM dlc_files WHERE insert_condition_here limit $offset,$limit");

    // calculate number of pages needing links
    $pages=intval($numrows/$limit);

    // $pages now contains int of pages needed unless there is a remainder from division
    if ($numrows%$limit) {
        $pages++;
    }

// Generate a nice layout for the links
    echo "Page [";
    for ($i=1;$i<=$pages;$i++) {
        $newoffset=$limit*($i-1);
        if ($offset==$newoffset) {
        print (" &nbsp; <font color=\"#ff0000\"><b>$i</b></font> &nbsp; \n");
        } else {
            print "<a href=\"$PHP_SELF?offset=$newoffset\">$i</a>\n";
        }
    }
    echo "]\n<br>\n";

// Display your result data here
?>
Avatar billede dennismp Nybegynder
14. juni 2004 - 12:35 #10
hvor mange rækker har du i din database?

disse
    $startLink1 = 'Start';                // [optional] Active
    $startLink2 = 'Start';                // [optional] not active

    $endLink1 = 'End';                    // [optional] Active
    $endLink2 = 'End';                    // [optional] not active
    $nextLink1 = 'Next';                // active
    $nextLink2 = 'Next';                // [optional] inactive
    $nextMore  = '...';                    // [optional] if more

    $prevLink1 = 'Prev';                // Active
    $prevLink2 = 'Prev';                // [optional] inactive
    $prevMore  = '...';                    // [optional] if more..

kan sagents indeholde htmlkode... fx

$startLink1 = '<img src="/gfx/start.gif" border=0>';
Avatar billede downloadcentral.dk Nybegynder
14. juni 2004 - 12:36 #11
Hmmm lidt under 500 tror jeg
Avatar billede dennismp Nybegynder
14. juni 2004 - 13:19 #12
og den første gang du ser på siden, viser den intet? Slet ingenting?
Avatar billede downloadcentral.dk Nybegynder
14. juni 2004 - 13:31 #13
Nej, koden er stadig sat ind. Du kan selv kigge på hvilken som helst "kategori-side" på www.dload.dk
Avatar billede dennismp Nybegynder
14. juni 2004 - 13:37 #14
Hvordan har du sat den ind? Hvordan ser (php-delen) category.php ud?
Avatar billede downloadcentral.dk Nybegynder
15. juni 2004 - 06:59 #15
Jeg har blot added en require('paging2.php'); - Hele category.php ser således ud:

<?
require('header.php');

$categoryid = $_REQUEST["categoryid"];
$sql = "SELECT category, description FROM dlc_categories WHERE id=$categoryid";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($result);

require('paging2.php');

echo '<h1>'.$row['category'].'</h1>
<img src="/images/category/'.$categoryid.'.gif" alt="" class="categorypic" />
<p>'.htmlspecialchars($row['description']).'</p>';


$sql = "SELECT id FROM dlc_files WHERE category=$categoryid ORDER BY title, subtitle";

$result = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_array($result)) {
  echo getFileDisplay($row['id']);
}

require('footer.php');
?>
Avatar billede jakobclausen Nybegynder
15. juni 2004 - 15:38 #16
Jeg har lige sidde og leget lidt med scriptet jeg linkede til i starten - og det virker altså uden problemer her hos mig. Jeg har prøvet så godt som jeg nu kan at rette det til så det passer til din database - så prøv lige at teste:

- - -
<?
    require('header.php');
    mysql_select_db("databasenavn");

    $limit=10;  // Hvor mange rækker der skal vises på hver side
   
    $categoryid = $_REQUEST["categoryid"];
    $numresults=mysql_query("SELECT category, description FROM dlc_categories WHERE id=".$categoryid);
    $numrows=mysql_num_rows($numresults);

    if (empty($offset))
    {
        $offset=0; // Ved hvilken værdi begynder listen.
    }

    // Henter data fra databasen
    $result=mysql_query("SELECT category, description FROM dlc_categories WHERE id=".$categoryid." LIMIT $offset,$limit");

    // beregner antallet af sider der skal bruges
    $pages=intval($numrows/$limit);

    // hvis ovenstående division giver en rest tælles $pages én op
    if ($numrows%$limit)
    {
        $pages++;
    }
   
    // Udskriver data
    while($r = mysql_fetch_array($result))
    {
        echo getFileDisplay($row['id']);   
    }
    echo "<br>";

    // Generere side navigering
    echo "Side [";
    for ($i=1;$i<=$pages;$i++)
    {
        $newoffset=$limit*($i-1);
        if ($offset==$newoffset)
        {
            echo (" &nbsp; <font color='#ff0000'><b>$i</b></font> &nbsp; \n");
        }
        else
        {
            echo "<a href='$PHP_SELF?offset=$newoffset'>$i</a>\n";
        }
    }
    echo "]\n<br>\n";
    require('footer.php');
?>
- - -
NB! Du skal lige rettet "databasenavn" i toppen, så det passer
Avatar billede dennismp Nybegynder
15. juni 2004 - 15:47 #17
.. og paging2.php er det du postede i "14/06-2004 08:58:58"?

Ellers forsæt med jacob's løsning. At implementere to løsninger på een gang og fejlrette begge på samme tid bliver noget rod. Begge løsninger virker/kan virke. Det ender bare een bruger en masse tid forgæves og så kan jeg nok finde på noget andet at bruge den til :)
Avatar billede downloadcentral.dk Nybegynder
15. juni 2004 - 18:56 #18
Dennis vi kan godt prøve videre, hvis du er klar - Jakob har givet op :o(
Hvis du har ICQ/MSN vil jeg gerne give lidt info så du kan kigge i databasen mv, da det nok vil hjælpe?
Avatar billede dennismp Nybegynder
15. juni 2004 - 20:57 #19
Hvis der bare er info i databasen, så burde det være fint nok. Men hvis du kalder min kode, så burde den skrive en "Start Prev sidetal Next End" .. Også selvom sql'en ikke virker..
Avatar billede downloadcentral.dk Nybegynder
15. juni 2004 - 21:29 #20
Jeg kigger lige på det igen!
Avatar billede thorus Nybegynder
17. juni 2004 - 12:33 #21
Avatar billede downloadcentral.dk Nybegynder
03. januar 2005 - 07:59 #22
Jeg lukker spørgsmålet da selv om hjælpen har været stor ikke har været noget der virkede i praktis på min side :o(
Avatar billede dennismp Nybegynder
07. januar 2005 - 19:36 #23
Det er også svært at hjælpe når problemet ikke bliver beskrevet :-|
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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