09. oktober 2002 - 22:12Der er
15 kommentarer og 1 løsning
Visning af 10 poster af gangen fra SQL
Jeg har lavet mig en lille database i SQL og noget PHP som udtrækker billeder derfra. Nu vil jeg blot have det sådan at den kun udtrækker ex. 10 ad gangen samt der er en "næste" og "forrige" knap så man kan bladre i siderne.
Jeg har søgt i forskellige spørgsmål og prøvet noget kodet - det kunne jeg bare ikke helt få til at virke. Jeg har også læst om LIMIT, men jeg kan ikke få det til at virke...
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
$antal bliver talt 1 op hver gang du lister en bog. ?>
Synes godt om
Slettet bruger
09. oktober 2002 - 22:34#5
<? # Antal billeder på hver side $rowsToReturn = 10;
# Find ud af hvor mange billeder, du har i alt $result = mysql_query("SELECT COUNT(*) AS totalRows FROM billeder") or die(mysql_error()); $array = mysql_fetch_array($result); $totalRows = $array['totalRows'];
# Hent en sides billeder $result = mysql_query("SELECT billede FROM billeder LIMIT ".$offset.",".$rowsToReturn) or die(mysql_error());
# Vis dem $i = 0; while ($array = mysql_fetch_array($result)) { # Tæller så vi ved, hvor mange billeder vi har vist $i++; # Vis dine billeder her echo "<img src='".$array['billede']."><br>"; }
Det her bruger jeg selv, det skal nok lige tilpasses lidt:
<?
$pr_side = "30"; //Definerer antal resultater pr. side $s = $_GET['s']; if (!isset($s)) { $s = "0"; //Tjekker om $s - som står for start - er sat, hvis ikke sættes den }
$g_total = mysql_query("SELECT count(id) as total FROM tabelnavn") 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 side</a> "; //Udskriver linket }
echo "</td><td width=\"33%\" align=\"center\">";
## #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 "<b>$page</b> "; //...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 ##
echo "</td><td width=\"33%\" align=\"right\">"; 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 side »</a>"; //Udskriver linket "næste" }
Jeg må nok indrømme at jeg ikke er det hurtigste dyr i skoven, når det gælder PHP, men alt andet lige ser det ud til at Mercur8's svar passer bedre ind i mit... men det er også kun fordi jeg ser nogle "arrays" hist og her. Min kode er som følger:
og vel egentlig også el barto's... så det først nu :)
Synes godt om
Slettet bruger
09. oktober 2002 - 22:46#9
tbird: Du må lige gøre en indsats selv nu. Det er ganske lidt, der skal ændres ved det script, jeg skrev til dig som eksempel, for at du er færdig.
Synes godt om
Slettet bruger
09. oktober 2002 - 22:46#10
Sat sammen med mit må det være noget i stil med Det her bruger jeg selv, det skal nok lige tilpasses lidt:
<?
$my_db = mysql_connect("xxx","xxx","xxx") or die(mysqlerror()); mysql_select_db("xxx",$my_db);
$pr_side = "30"; //Definerer antal resultater pr. side $s = $_GET['s']; if (!isset($s)) { $s = "0"; //Tjekker om $s - som står for start - er sat, hvis ikke sættes den }
$g_total = mysql_query("SELECT count(id) as total FROM tabelnavn") 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 side</a> "; //Udskriver linket }
echo "</td><td width=\"33%\" align=\"center\">";
## #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 "<b>$page</b> "; //...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 ##
echo "</td><td width=\"33%\" align=\"right\">"; 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 side »</a>"; //Udskriver linket "næste" }
Jeg har før lavet det der med antal - jeg valgte at have to links: - Næste 10 - Forrige 10
Herefter havde jeg en variabel tilknyttet (dvs. jeg kendte jo tallet nu f.eks. 80 (næste ville således hedde 90 - og forrige 70). Denne variabel anvender du direkte ind i din SQL-statement. Så skulle du meget gerne få de rigtige poster frem, når du kører din while-løkke på SQL-statementen (som du faktisk gør).
Det eneste man lige skal være opmærksom på er, at man skal have et check øverst på siden, så man ikke kan klikke videre end det maximale antal billeder ialt (og heller ikke mindre end nul).
man skal vel tænke sig lidt om hvis nu at man er på OFFSET = 10, og man skal minuse md 10, så skal der jo ikke stå ?OFFSET=0, men intet... det kan løses med en
Tak for de mange indslag... jeg prøver lidt videre. Og må så vende tilbage og give point - der kan godt gå lidt tid, men det bliver skam lukket når jeg finder en løsning!
I mellemtiden er folk mere end velkomne til at komme med ideer, så andre også kan få gavn af de forskellige måder det kan gøres på.
Det har været til stor hjælp, og jeg har kunne bruge noget fra de fleste indslag. Men da der ikke rigtig er så mange der har givet et svar går pointene til Mercur8...
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.