13. januar 2006 - 20:03Der er
19 kommentarer og 1 løsning
hvordan får jeg vist 5 records pr. side. "paging"
Jeg har nedenstående kode, og mit spørgsmål går på hvordan jeg kan få den til at vise 5 records pr. side? har prøvet at se her inde på exp. men jeg kan ikke få det til at virke..
<?php require_once("../members/common.php"); // Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", ) // str klip(str tekst, int længde, int tolerance)
function klip($tekst, $laengde = 200, $tolerance = 10) // $laengde og $tolerance kan udelades { $punktum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum $mere = "..."; // punktummer hvis mere tekst
if (strlen($tekst) <= $laengde + $tolerance) { $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance $mere = ""; // ikke andet } elseif ($punktum !== false) { $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum } elseif ($mellemrum !== false) { $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum } else { $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over) }
// Hent først data ud $resultat = mysql_query("select * from salgAfProdukt left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc") or die(mysql_error());
// Kør så igennem for hver række while ($raekke = mysql_fetch_array($resultat)) { echo " <table width=\"560\" border=\"0\" cellspacing=\"5\" cellpadding=\"0\" bgcolor=\"#FFFFFF\"> <tr> <td width=\"360\" valign=\"top\"><span class=\"mellem\"><a href=\"vis.php?id=$raekke[Id]\" target=\"vs\">$raekke[produkt]</a></span> <br><span class=\"lille\">".klip($raekke['supplerendeTekst'])."</span></td> <td width=\"70\" align=\"center\" valign=\"top\"><span class=\"lilleS\">".$raekke['pris']." Kr.</span></td> <td width=\"130\" align=\"center\" valign=\"top\"><span class=\"lilleS\">".$raekke['bynavn']."</span></td></tr></table> <table width=\"560\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"bgcolor=\"#CAD9EA\"> <tr> <td><span class=\"mini\"> </span></td> </tr> </table>"; }
Nu har jeg selv fået det til at virke.. Men jeg er meget interesseret i at en expert evt. kunne se på det og komme med kommentarer til om det er den optimale måde jeg har gjort det på;) Det giver 60 point hvis det er gode kommentarer til evt en effektivisering af koden;)
<table width="560" border="0" cellspacing="5" cellpadding="0" bgcolor="#CAD9EA"> <tr> <td width="360" valign="top"><span class="stor"><b><u>Annonce</u></b></span></td> <td width="70" align="center" valign="top"><span class="stor"><b><u>Pris</u></b></span></td> <td width="130" align="center" valign="top"><span class="stor"><b><u>Område</u></b></span></td> </tr> </table> <?php require_once("../members/common.php"); // Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", ) // str klip(str tekst, int længde, int tolerance)
function klip($tekst, $laengde = 200, $tolerance = 10) // $laengde og $tolerance kan udelades { $punktum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum $mere = "..."; // punktummer hvis mere tekst
if (strlen($tekst) <= $laengde + $tolerance) { $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance $mere = ""; // ikke andet } elseif ($punktum !== false) { $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum } elseif ($mellemrum !== false) { $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum } else { $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over) }
$pr_side = "5"; //Definerer antal resultater pr. side
if (!isset($s)) { $s = "0"; //Tjekker om $s - som står for start - er sat, hvis ikke sættes den }
$query = mysql_query("select * from salgAfProdukt left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc limit $s,$pr_side") or die(mysql_error());
$g_total = mysql_query("select count(id) as total from salgAfProdukt") or die(mysql_error()); $total = mysql_result($g_total,0);
## #Find ud af om derskal være et Forrige link ## if ($s >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side $previous_s = $s-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes echo "<a href='?s=$previous_s'>Forrige</a> "; //Udskriver linket }
## #Find ud af hvis/hvor mange sider der er rows til ## $page = 1; //Definerer hvor sidetal skal starte for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere if ($start != $s) { //Tjekker om linket vil komme til at pege på den side man er på echo "<a href='?s=$start'>$page</a> "; //...hvis ikke, udskrives link med værdien af $page } else { //Ellers, dvs. hvis linket vil pege på den side man er på.. echo "$page "; //...udskrives værdien af $page bare, altså ikke som link } $page++; //Lægger en til $page til næste gang løkken køres }
## #Find ud af om der skal være et næste link ## if ($total > $s+$pr_side) { //Tjekker om der er flere sider $next_s = $s+$pr_side; //Regner ud hvor mysql skal starte hvis næste side kaldes echo "<a href='?s=$next_s'>Næste</a>"; //Udskriver linket "næste" }
Du har to selects, den der selecter, og den der tæller hvor mange der er. Den version jeg linker til, gør brug af SQL_CALC_FOUND_ROWS og SELECT FOUND_ROWS() - Det er en smule mere servervenligt :)
NEDENSTÅENDE kode, er det den optimale at bruge i forhold til den jeg bruger nu? og hvis, hvornnn fann får jeg den sat ind.. synes den virker lidt indviklet;)
Hvis jeg nu skulle beholde den jeg har, hvordan får jeg den så til at lade være med at skrive et 1-tal hvis der kun er én side som vises?
$page = 1; //Definerer hvor sidetal skal starte for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere if ($start != $s) { //Tjekker om linket vil komme til at pege på den side man er på echo "<a href='?s=$start'>$page</a> "; //...hvis ikke, udskrives link med værdien af $page } else { //Ellers, dvs. hvis linket vil pege på den side man er på.. echo "$page "; //...udskrives værdien af $page bare, altså ikke som link } $page++; //Lægger en til $page til næste gang løkken køres }
Kan næsten gætte mig til at det er i noget af nedenstående som det skal ind i, men hvor? sorry hvis det er et dumt spørgsmål;)
$g_total = mysql_query("select count(id) as total from salgAfProdukt") or die(mysql_error()); $total = mysql_result($g_total,0);
## #Find ud af om derskal være et Forrige link ## if ($s >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side $previous_s = $s-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes echo "<a href='?s=$previous_s'>Forrige</a> "; //Udskriver linket }
## #Find ud af hvis/hvor mange sider der er rows til ## $page = 1; //Definerer hvor sidetal skal starte for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere if ($start != $s) { //Tjekker om linket vil komme til at pege på den side man er på echo "<a href='?s=$start'>$page</a> "; //...hvis ikke, udskrives link med værdien af $page } else { //Ellers, dvs. hvis linket vil pege på den side man er på.. echo "$page "; //...udskrives værdien af $page bare, altså ikke som link } $page++; //Lægger en til $page til næste gang løkken køres }
$g_total = mysql_query("select count(id) as total from salgAfProdukt") or die(mysql_error()); $total = mysql_result($g_total,0); if($total>$pr_side){
## #Find ud af om derskal være et Forrige link ## if ($s >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side $previous_s = $s-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes echo "<a href='?s=$previous_s'>Forrige</a> "; //Udskriver linket }
## #Find ud af hvis/hvor mange sider der er rows til ## $page = 1; //Definerer hvor sidetal skal starte for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere if ($start != $s) { //Tjekker om linket vil komme til at pege på den side man er på echo "<a href='?s=$start'>$page</a> "; //...hvis ikke, udskrives link med værdien af $page } else { //Ellers, dvs. hvis linket vil pege på den side man er på.. echo "$page "; //...udskrives værdien af $page bare, altså ikke som link } $page++; //Lægger en til $page til næste gang løkken køres }
## #Find ud af om der skal være et næste link ## if ($total > $s+$pr_side) { //Tjekker om der er flere sider $next_s = $s+$pr_side; //Regner ud hvor mysql skal starte hvis næste side kaldes echo "<a href='?s=$next_s'>Næste</a>"; //Udskriver linket "næste" } }
Super sejt.. det virker sku:) Jeg kan fornemme at du er en ægte expert, og vil du ikke lige gøre mig en sidste tjeneste, nemlig lige se om min kode er ok, eller om der er fejl jeg ikke har set. Det virker, men det kunne alligevel godt være at der var et par brølere.. og så smid lige et svar så du kan få dine velfortjente point... takker
<table width="560" border="0" cellspacing="5" cellpadding="0" bgcolor="#CAD9EA"> <tr> <td width="360" valign="top"><span class="stor"><b><u>Annonce</u></b></span></td> <td width="70" align="center" valign="top"><span class="stor"><b><u>Pris</u></b></span></td> <td width="130" align="center" valign="top"><span class="stor"><b><u>Område</u></b></span></td> </tr> </table> <?php require_once("../members/common.php"); // Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", ) // str klip(str tekst, int længde, int tolerance)
function klip($tekst, $laengde = 200, $tolerance = 10) // $laengde og $tolerance kan udelades { $punktum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum $mere = "..."; // punktummer hvis mere tekst
if (strlen($tekst) <= $laengde + $tolerance) { $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance $mere = ""; // ikke andet } elseif ($punktum !== false) { $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum } elseif ($mellemrum !== false) { $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum } else { $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over) }
$pr_side = "20"; //Definerer antal resultater pr. side
if (!isset($s)) { $s = "0"; //Tjekker om $s - som står for start - er sat, hvis ikke sættes den }
$query = mysql_query("select * from salgAfProdukt left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc limit $s,$pr_side") or die(mysql_error());
} $g_total = mysql_query("select count(id) as total from salgAfProdukt") or die(mysql_error()); $total = mysql_result($g_total,0); if($total>$pr_side){
## #Find ud af om derskal være et Forrige link ## if ($s >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side $previous_s = $s-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes echo "<a href='?s=$previous_s'>Forrige</a> "; //Udskriver linket }
## #Find ud af hvis/hvor mange sider der er rows til ## $page = 1; //Definerer hvor sidetal skal starte for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere if ($start != $s) { //Tjekker om linket vil komme til at pege på den side man er på echo "<a href='?s=$start'>$page</a> "; //...hvis ikke, udskrives link med værdien af $page } else { //Ellers, dvs. hvis linket vil pege på den side man er på.. echo "$page "; //...udskrives værdien af $page bare, altså ikke som link } $page++; //Lægger en til $page til næste gang løkken køres }
## #Find ud af om der skal være et næste link ## if ($total > $s+$pr_side) { //Tjekker om der er flere sider $next_s = $s+$pr_side; //Regner ud hvor mysql skal starte hvis næste side kaldes echo "<a href='?s=$next_s'>Næste</a>"; //Udskriver linket "næste" } }
$query = mysql_query("select * from salgAfProdukt left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc limit $s,$pr_side") or die(mysql_error());
indsætter $g_total = mysql_num_rows($query)
så kører du ikke din select 2 gange, som kan være belastende for serveren. Funktionen henter antal records fra din sql-statement. Nu har du antallet i en variabel som kan bruges istedet for din 2. sql query.
Hmmm.. virker ikke:( <?php require_once("../members/common.php"); // Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", ) // str klip(str tekst, int længde, int tolerance)
function klip($tekst, $laengde = 200, $tolerance = 10) // $laengde og $tolerance kan udelades { $punktum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum $mere = "..."; // punktummer hvis mere tekst
if (strlen($tekst) <= $laengde + $tolerance) { $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance $mere = ""; // ikke andet } elseif ($punktum !== false) { $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum } elseif ($mellemrum !== false) { $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum } else { $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over) }
$pr_side = "20"; //Definerer antal resultater pr. side
if (!isset($s)) { $s = "0"; //Tjekker om $s - som står for start - er sat, hvis ikke sættes den }
$query = mysql_query("select * from salgAfProdukt left join postnr on salgAfProdukt.postNr = postnr.postnr order by id desc limit $s,$pr_side") or die(mysql_error()); $total = mysql_num_rows($query);
## #Find ud af om derskal være et Forrige link ## if ($s >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side $previous_s = $s-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes echo "<a href='?s=$previous_s'>Forrige</a> "; //Udskriver linket }
## #Find ud af hvis/hvor mange sider der er rows til ## $page = 1; //Definerer hvor sidetal skal starte for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere if ($start != $s) { //Tjekker om linket vil komme til at pege på den side man er på echo "<a href='?s=$start'>$page</a> "; //...hvis ikke, udskrives link med værdien af $page } else { //Ellers, dvs. hvis linket vil pege på den side man er på.. echo "$page "; //...udskrives værdien af $page bare, altså ikke som link } $page++; //Lægger en til $page til næste gang løkken køres }
## #Find ud af om der skal være et næste link ## if ($total > $s+$pr_side) { //Tjekker om der er flere sider $next_s = $s+$pr_side; //Regner ud hvor mysql skal starte hvis næste side kaldes echo "<a href='?s=$next_s'>Næste</a>"; //Udskriver linket "næste" } }
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.