webForumDet fria alternativet

50 på varje sida.

PHP

18 svar · 834 visningar · startad av Simpa

Medlem sedan aug. 20002 992 inlägg
Frågan#1

Hur skriver jag ut 50 styckna poster på en ny sida, sen börjar på en ny sida ditt jag länkar under pga hur många det behövs?

På ett lätt och smidigt sätt? :/

Medlem sedan aug. 20002 975 inlägg
#2

Om jag förstår frågan rätt så är det någon form av paging du frågar efter. För att i såfall göra det enkelt för mig vill jag hänvisa till den här sidan: http://www.a-kok.com/php/paging.php

Medlem sedan aug. 20002 992 inlägg
#3

wee tack Matte :)

Medlem sedan jan. 200293 inlägg
#4

Är det bara jag som fått error på MySql pagingen ?
Fick iaf lägga till en;
function pagingList() {
för att få de att fungera..

Medlem sedan juli 2000221 inlägg
#5

Jag sökte och fann den här tråden, detta är det jag söker efter men jag får det inte att fungera! Det är MySQL pagingen jag testar.

Mitt felmeddelande:

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in c:\[...]\paging.php on line 20

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\[...]\paging.php on line 40

Så här ser koden ut:

<?php
$sql = "SELECT id FROM bilder ORDER BY id DESC";
$result = mysql_query($sql,$connection);
$antal = mysql_result($result, 0); // rad 20

$inlaggPerSida = 2; // Välj antal inlägg per sida, minst 1
$antalPagLankar = 9; // Välj max antal visade paginglänkar

$pageNumbers = ceil($antal/$inlaggPerSida);

if (isset($HTTP_GET_VARS["page"])){
    $page = $HTTP_GET_VARS["page"];
} else $page = 1;
if ($page > $pageNumbers) $page = $pageNumbers;
if ($page < 1) $page = 1;

$start = ($page-1) * $inlaggPerSida;

if ($pageNumbers > 1)
    pagingList($page, $pageNumbers, $antalPagLankar, "left");

$sql = "SELECT id FROM bilder ORDER BY id DESC LIMIT $start,$inlaggPerSida";
$result = mysql_query($sql,$connection);
while ($row = mysql_fetch_array($result)){ // rad 40
  // Kod för att skriva ut
  $id = $row["id"];
}
echo "$id";
?>

Skulle någon kunna berätta hur man fick det att fungera? Jag vet inte var/hur jag ska lägga in "function pagingList() {" som det stod i inlägget innan.

Tack på förhand!

Medlem sedan aug. 20002 975 inlägg
#6

Lägg denna kod antingen någonstans på sidan, eller (helst) lägg den i en egen fil och inkludera den.

<?php

/*
    En funktion som ger sidlänkar i anslutning till utskrift från
    textfil eller databas.
    $page är vilken sida som är den aktuella.
    $pageNumbers är antal sidor som utskriften är uppdelad på.
    $numLinks är antal sidlänkar som ska visas.
    $align är antingen 'left' eller 'right'. Pagingen justerad 
    höger eller vänster.
    De variabler som finns i querystringen flyttas med 
    till nya sidor.
*/
function pagingList($page, $pageNumbers, 
                    $numLinks, $align){
    global $HTTP_SERVER_VARS, $HTTP_GET_VARS;
    
    $file = $HTTP_SERVER_VARS['PHP_SELF'];
    $getvar = "";
    foreach($HTTP_GET_VARS as $key => $val){
        if($key!="page") $getvar .= "&".$key."=".$val; 
    }
    
    $startLink = $page - floor($numLinks/2);
    if ($startLink<1) $startLink = 1;
    $stopLink = $startLink + $numLinks -1;
    if ($stopLink>$pageNumbers) $stopLink=$pageNumbers;

    echo "<div class=\"paging\" style=\"text-align:$align\">\n";
    if ($page>1){
        echo "<a href=\"$file?page=1$getvar\" class=\"paging\" ";
        echo "title=\"F&ouml;rsta sidan\">&laquo;</a>";
    } else echo "<span class=\"pagingDim\">&laquo;</span>";
    if ($startLink > 1){
        echo " ... ";
    } else echo " -";
    for ($i=$startLink; $i<=$stopLink; $i++){
        if ($i != $page){
            echo " <a href=\"$file?page=$i$getvar\" ";
            echo "class=\"paging\">$i</a> ";
        } else {
          echo " <span class=\"pagingDim\">( $i )</span> ";
        }
        if ($i<$stopLink) echo "-";
    } 
    if ($stopLink < $pageNumbers){
        echo " ... ";
    } else echo "- ";
    if ($page<$pageNumbers){
        echo "<a href=\"$file?page=$pageNumbers$getvar\" ";
        echo "class=\"paging\" ";
        echo "title=\"Sista sidan\">&raquo;</a>\n";
    } else echo "<span class=\"pagingDim\">&raquo;</span>\n";
    echo "</div>";

}

?>

Vill du ladda ner den som fil direkt kan du göra det här: pagfunc.php

Medlem sedan juli 2000221 inlägg
#7

Man skall alltså ha båda filerna på sidan? Den som du skrev nu, och sen efter den så ska man ha den som jag skrev? Jag testade iaf med det men får samma felmeddelande... Kan det ha något med inställningar å sånt att göra? Testade också att med

Edit:

Jag tror jag hade lite fel kod i mitt första test. Så här ser ALLT ut nu:

<?php
include_once ('pagfunc.php');
?>
<?php
$sql = "SELECT COUNT(*) FROM bilder";
$result = mysql_query($sql,$connection);
$antal = mysql_result($result, 0);

$inlaggPerSida = 4; // Välj antal inlägg per sida, minst 1
$antalPagLankar = 9; // Välj max antal visade paginglänkar

$pageNumbers = ceil($antal/$inlaggPerSida);

if (isset($HTTP_GET_VARS["page"])){
    $page = $HTTP_GET_VARS["page"];
} else $page = 1;
if ($page > $pageNumbers) $page = $pageNumbers;
if ($page < 1) $page = 1;

$start = ($page-1) * $inlaggPerSida;

if ($pageNumbers > 1)
    pagingList($page, $pageNumbers, $antalPagLankar, "left");

$sql = "SELECT id FROM bilder ORDER BY id DESC 
        LIMIT $start,$inlaggPerSida";
$result = mysql_query($sql,$connection);
while ($row = mysql_fetch_array($result)){
  // Kod för att skriva ut
  $id = $row["id"];
}
echo "$id";

?>
Medlem sedan maj 2002647 inlägg
#8

Denna kod använder jag och den fungerar fin fint:

<?PHP
// Antal poster per sidan
$ppp = 20;

$list_sql = "SELECT * FROM tabell WHERE dittID= '".$_GET['id']."'";
$list_result = mysql_db_query("din databas","$list_sql");
$posts = mysql_num_rows($list_result);

$pages = ceil($posts/$ppp); // Räknar ut antalet sidor

if(empty($_GET["pagenumber"])){
  $currentpage = $pages;
}
else{
  $currentpage = $_GET["pagenumber"];
}
if($currentpage>$pages){
  $currentpage = $pages;
}

// Bestämmer vilket första sidnummer som ska visas
$pages_start = $currentpage-5;
if($pages_start<1){
  $pages_start=1;
}

// Bestämmer vilket sista sidnummer som ska visas
$pages_end = $currentpage+5;
if($pages_end>$pages){
  $pages_end=$pages;
}

// Listar ut sidnummren
if(!($pages==1)){
  echo "<a href=\"dinsida.php?pagenumber=1\" class=\"link_normal\"><<-</a> ";
  if($pages_start>1){
    echo " ... ";
  }
  for($i=$pages_start; $i<=$pages_end; $i++){
    if($i==$currentpage){
      echo "<span class=\"text\">[".$i."]</span> ";
    }
    else{
      echo "<a href=\"dinsida.php?pagenumber=".$i."\" class=\"link_normal\">".$i."</a> ";
    }
  }
  if($pages_end<$pages){
    echo " ... ";
  }
  echo "<a href=\"dinsida.php?pagenumber=".$pages."\" class=\"link_normal\">->></a>";
}

// Räknar ut vart posterna ska börja räknas ut
if($currentpage==1){
  $start=0;
}
else{
  $start=$ppp*$currentpage-$ppp;
}
?>

Kanske inte den snyggaste koden (det vet jag att den inte är) men den fungerar fint för mig.

Medlem sedan juli 2000221 inlägg
#9

Nej äsch vad dumt av mig, jag hade ju inte anslutit till någon databas :) Förlåt!

Tack för ditt script också Webslave!

Medlem sedan juli 2000221 inlägg
#10

Jag fick scriptet scriptet att fungera (det med pagfunc-filen, som Matte tipsa om), men jag har 2 frågor! :)

Ett av värdena jag skickar i adressen skickas med

" . urlencode($rubrik) . "

Men pagfunc.php plockar ju upp allt med $getvar (tror jag det var) och så blir inte $rubrik i urlencode utan det blir massa %20 där det skall vara mellanslag, går detta att fixa på nåt sätt?

Sen också, kan man undvika att 1 - 2 - 3 - 4 osv skrivs ut Direkt på sidan där man har lagt in php-koden? Jag har kopierat in kodsnutten som skriver ut detta längre ner på sidan och det fungerar fint, men tar jag bort den biten ur första kodbiten så fungerar inte paging-funktionen.

$pageNumbers = ceil($antal/$inlaggPerSida);

Denna verkar skriva ut siffrorna och rubbet, kan man hejda den från att det skrivs ut direkt på sidan där jag lagt in php-koden?

Tacksam för svar!

Medlem sedan nov. 2000857 inlägg
#11

Det var väldigt vad kod ni använder.. ;) §e
Så här gör jag med mySQL. Kommentera gärna.

<?php
/* Antal gästboksinlägg som skall visas åt gången */
$antal = 10;

/* Kollar upp hur många inlägg som finns i gästboken */
$antal_inlagg = @mysql_num_rows (mysql_query ("SELECT id FROM gastbok"));

/* Beräknar hur många sidor inläggen behöver delas upp på */
if (!isset($sida)) { $sida = 1; }
$sidantal = ceil($antal_inlagg/$antal);
$start = ($sida*$antal)-$antal;

/* Denna koden skapar massa länkar efter varandra: typ 01 02 03 04 05 06
Extra nollor skapas för att alla länkar skall ha lika många tecken. */
echo "Sida: ";
for ($i=1;$i<$sidantal+1;$i++)
{
$e = $i;
while (strlen($e) < strlen($sidantal)) { $e = "0".$e; }
if ($sida == $i) { echo "<b>$e</b> "; } else { echo "<a href=\"?sida=$i\">$e</a> "; }
}

/* Queryn som plockar fram inläggen */
$query = mysql_query("SELECT * FROM gastbok ORDER BY id DESC LIMIT $start, $antal");
?>
Medlem sedan aug. 20002 975 inlägg
#12

Först utskriften. Koden:

$pageNumbers = ceil($antal/$inlaggPerSida);

räknar bara ut hur många sidor det ska delas upp på. Den kod som skriver ut, och som du kan flytta, är:

if ($pageNumbers > 1)
    pagingList($page, $pageNumbers, $antalPagLankar, "left");

Sen till urlencode. Något jag ärligt talat inte funderat på. Borde läggas till något om det. Det borde tills vidare gå att ändra i funktionen raderna:

foreach($HTTP_GET_VARS as $key => $val){
   if($key!="page") $getvar .= "&".$key."=".$val; 
}

till

foreach($HTTP_GET_VARS as $key => $val){
   if($key!="page") $getvar .= "&".$key."=".urlencode($val); 
}

Sen till Niklasson.
Självklart går allt att göra enklare. Detta var ett försök att täcka upp olika behov och problem i ett skript. Kan konstatera att jag ändå inte riktigt lyckats. :)
Använder det dock själv utan problem.

Medlem sedan maj 2002647 inlägg
#13

Niklasson... min kod är ganska jättefet för att jag är inte så vidare bra på att koda. Plus att den lägger till "..." om det är fler än 5 sidor framför eller bakom nuvarande sida så att det inte blir 100 länkar utan bara "<< ... 2 3 4 5 6 [7] 8 9 10 11 12 ... >>"... ;)

Medlem sedan juli 2000221 inlägg
#14

Tack så mycket, det flyter på fint nu !

Medlem sedan nov. 2000857 inlägg
#15

Det låter bra Matte. Matematiskt tänker ju alla olika så sådana här lösningar kan se ut på många sätt..

Webslave: Det var en bra funktion, skall nog lägga till det som ett alternativ till det jag redan har.. ;)

Medlem sedan maj 2002647 inlägg
#16

Niklasson: Cool... det tar jag som en komplimang :)
Btw... såg att du har gjort Mando Diaos sida... kul... roliga pojkar... om man träffade dem lite oftare dvs.

Medlem sedan nov. 2000857 inlägg
#17

Gammalt, missat inlägget. :)
Nja. Jag har inget med deras sida att göra, men de använde visst min gästbok..

Medlem sedan juli 2002405 inlägg
#18

Webslave: Din kod fungerar mycket bra tycker jag.. Ett problem jag har bara är att om man inte skriver pagenumber efter filen så verkar scriptet tolka det som man är inne på sista sidan.. Inläggen från första sidan skrivs ut men sista sidan har hakparanteser runt.. Hur ska jag lösa det?? Har satt en if-sats som sätter pagenumber till 1 om det inte finns med i url:en men det fungerar inte ändå..

Medlem sedan juli 2002405 inlägg
#19

Ändrade från

if(!($_GET["sida"]))
$sida = 1;

till

if(!($_GET["sida"]))
$_GET["sida"] = 1;

så det fungerar nu...

267 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)