Avatar billede jacobs1 Nybegynder
22. maj 2006 - 21:59 Der er 31 kommentarer og
1 løsning

Udskriv fra databasen 25 poster af gangen.

Hej,

Jeg har prøver at lave et meget lille galleri, men jeg vil kun have vist 25 billeder af gangen hvorefter skal der komme et link i bunden hvor man så kan trykke for at se de næste 25 billeder.

Er der nogle der kan hjælpe?
Jeg skal vel stoppe løkken efter de første 25 og lave linket "næste side"-> og ved klik skal den kører løkken igen med denne gang starte ved 25 og frem til 50. altså hvis der er så menge billeder i tabellen.

på forhånd tak :)

<?php
$db=mysql_connect("localhost", "xxxxxx", "xxxxxx");
mysql_select_db("xxxxxxx", $db);

$kategori = $_REQUEST['kategori'];
// Eksempel på en forespørgsel
$resultat = mysql_query("SELECT * from Billeder WHERE type ='$kategori'");

while ($raekke = mysql_fetch_array($resultat)) {
$count++;
if($count<25){
echo "<img src=".$raekke['lillebillede']."></img><br><a href=download.php?DownloadID=".$raekke['id'].">Download</a><br>";
  echo $count;
    //  " Telefon: ".$raekke['lillebillede']."<br />";
}else{
echo "<a href=list.php?cont=".count($resultat)."&kategori=billede>Se næste side >></a>";
break;
}
}

mysql_close();
?>
Avatar billede jakobdo Ekspert
22. maj 2006 - 22:03 #1
Prøv at søg siden her igennem efter paging, det har nemlig været oppe 100 gange (overdrivelse fremmer forståelsen) :o)
Avatar billede jacobs1 Nybegynder
22. maj 2006 - 22:22 #2
Nu har jeg kigget lidt rundt (godt nok kun hurtigt :)) det passer ikke helt til min idé. fx. var der et script der talte alle cellerne i db. men jeg bruger jo en while løkker den ved jo ikke hvor mange billeder der er på forhånd?
Avatar billede leif Seniormester
22. maj 2006 - 22:31 #3
Som sagt har det været oppe et par gange, søg og du skal finde.
Avatar billede hmortensen Nybegynder
22. maj 2006 - 22:36 #4
Her er noget gammel kode du nok kan tilpasse.
<?php
$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 10; // Antal resultater pr. side

// Henter poster fra databasen
$query = mysql_query("SELECT * FROM tabel ORDER BY id DESC LIMIT $offset,$pr_side") or die (mysql_error());
while($row = mysql_fetch_array($query)) {
    echo "$row[id] - $row[felt]<br>";
}
?>
<hr>
<?php
// Tæller antal poster i databasen
$tael = mysql_query("SELECT COUNT(*) AS antal FROM tabel") or die (mysql_error());
$antal = mysql_result($tael,0);


if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href='?offset=$forrige'>Forrige</a> ";
}
$page = 1;
for($start=0; $antal > $start; $start=$start+$pr_side){
    if ($start != $offset) {
        echo "<a href='?offset=$start'>$page</a> ";
    } else {
        echo "$page ";
    }
    $page++;
}
if ($antal > $offset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href='?offset=$naeste'>Næste</a>";
}
?>
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 09:07 #5
Mange tak for koden, det er helt sikkert noget jeg kan bruge :)

Jeg har lige 2 spørgsmål til SQL sætningerne. er dette rigtigt?
$query = mysql_query("SELECT * from Billeder WHERE type ='$kategori' ORDER BY id DESC LIMIT $offset,$pr_side") or die (mysql_error());

og

$tael = mysql_query("SELECT COUNT(*) AS antal FROM Billeder") or die (mysql_error());

Når jeg køre scriptet skriver den ikke nogle billeder ud den laver kun et <hr> og skriver 1.

Min db er lavet sådan at alle billederne er gemt i en tabel der hedder Billeder og hver billede har en celle med et felt der hedder kategori.

Scriptet skal så selvfølgelig kun skrive de billeder ud som der har denne kategori.
Avatar billede jakobdo Ekspert
23. maj 2006 - 09:19 #6
Spg 1: Det ser rigtigt ud jo.
Spg 2: Hvis du vil tælle alle billeder, så er det rigtigt. Jeg kunne dog forestille mig du ville tælle billeder i kategorien: SELECT COUNT(*) from Billeder WHERE type ='$kategori'

En anden lille ting, brug ikke SELECT * men kun de felter du skal bruge.
Og brug også COUNT(id) og ikke COUNT(*) lidt performance henter du der.
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 09:31 #7
Hvor sejt :) jeg tror det virker.

Jeg tester lige scriptet, og får delt nogle point ud :) mange tak for hjælpen.
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 09:43 #8
hmm når jeg fx. sætter variablen $pr_side = 4;
så laver den ikke et link i bunden til næste omgang billeder.

<?php
$offset = (isset($_GET['offset'])) ? $_GET['offset'] :0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 4; // Antal resultater pr. side

// Henter poster fra databasen
$query = mysql_query("SELECT * from Billeder ORDER BY id DESC LIMIT $offset,$pr_side") or die (mysql_error());
while($row = mysql_fetch_array($query)) {
echo "<img src=".$row['lillebillede']."></img>";
echo "<br><a href=download.php?DownloadID=".$row['id'].">Download</a><br>";
    //echo "$row[id] - $row[lillebillede]<br>";
}
?>
<hr>
<?php
// Tæller antal poster i databasen
$tael = mysql_query("SELECT COUNT(*) from Billeder WHERE type ='$kategori'") or die (mysql_error());

$antal = mysql_result($tael,0);


if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href='?offset=$forrige'>Forrige</a> ";
}
$page = 1;
for($start=0; $antal > $start; $start=$start+$pr_side){
    if ($start != $offset) {
        echo "<a href='?offset=$start'>$page</a> ";
    } else {
        echo "$page ";
    }
    $page++;
}
if ($antal > $offset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href='?offset=$naeste'>Næste</a>";
}
?>
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 09:49 #9
Sådan her ser det ud i browsen:
Download
id=6 - /Billeder/Small/10small.gif

Download
id=5 - /Billeder/Small/10small.gif

Download
id=4 - /Billeder/Small/10small.gif

Download
id=3 - /Billeder/Small/10small.gif

Kan det være fordi den tæller id nedefra og op, altså 6,5,4,3 og ikke 0,1,2,3 ?? er det derfor den ikke laver linket i bunden?
Avatar billede leif Seniormester
23. maj 2006 - 09:55 #10
Grunden til den omvendte tælling er at du har DESC i din SQL sætning, fjern den
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 10:07 #11
så tager den også billeder med fra andre kategorier end den der er valgt.
$query = mysql_query("SELECT * from Billeder ORDER BY id LIMIT $offset,$pr_side") or die (mysql_error());

mærkeligt
Avatar billede jakobdo Ekspert
23. maj 2006 - 10:11 #12
Du mangler WHERE type ='$kategori'
Avatar billede jakobdo Ekspert
23. maj 2006 - 10:12 #13
$query = mysql_query("SELECT * from Billeder WHERE type ='$kategori' ORDER BY id LIMIT $offset,$pr_side") or die (mysql_error());
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 10:26 #14
Det hjalp rigtig meget - nu kom linket frem i bunden. :)
Men så når jeg trykker på linket i bunden udskriver den ikke en ny omgang billder.

<?php
$offset = (isset($_GET['offset'])) ? $_GET['offset'] :0; // Hvis ikke $offset er sat, sættes den til 0
$pr_side = 2; // Antal resultater pr. side

// Henter poster fra databasen
$query = mysql_query("SELECT * from Billeder WHERE type ='$kategori' ORDER BY id LIMIT $offset,$pr_side") or die (mysql_error());
while($row = mysql_fetch_array($query)) {
echo "<img src=".$row['lillebillede']."></img>";
echo "<br><a href=download.php?DownloadID=".$row['id'].">Download</a><br>";
    //echo "$row[id] - $row[lillebillede]<br>";
}
?>
<hr>
<?php
// Tæller antal poster i databasen
$tael = mysql_query("SELECT COUNT(id) from Billeder WHERE type ='$kategori'") or die (mysql_error());

$antal = mysql_result($tael,0);


if ($offset >= $pr_side) {
    $forrige = $offset-$pr_side;
    echo "<a href='?offset=$forrige'>Forrige</a> ";
}
$page = 1;
for($start=0; $antal > $start; $start=$start+$pr_side){
    if ($start != $offset) {
        echo "<a href='?offset=$start'>$page</a> ";
    } else {
        echo "$page ";
    }
    $page++;
}
if ($antal > $offset+$pr_side) {
    $naeste = $offset+$pr_side;
    echo "<a href='?offset=$naeste'>Næste</a>";
}
?>
Avatar billede jakobdo Ekspert
23. maj 2006 - 10:31 #15
Prøv at udskriv offset og om det er sat korrekt?
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 10:42 #16
jeg tror, $offset bliver udskrevet rigtigt ?? når jeg trykker på næste uf skriver den 2 (nu er $pr_side = 2;) og den lille si i URL list.php?offset=2
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 10:44 #17
det gik lidt stætkt, jeg prøver igen :) når jeg trykker på næste linket i bunden udskriver den 2 ($pr_side = 2;) og i URL står der også list.php?offset=2
Avatar billede jakobdo Ekspert
23. maj 2006 - 10:46 #18
Det er måske lidt snyd, men fang mig lige på msn :o)
jakobdo (indsæt @ her) hotmail [og et . her] com
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 10:53 #19
Det kan jeg ikke deværre i aften kan jeg prøve. :)
Avatar billede jakobdo Ekspert
23. maj 2006 - 10:54 #20
Ok.
Prøv evt at udskriv din SQL'er, og se om de indeholder det forventede.
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 10:58 #21
echo $query; = Resource id #2 i browsen

echo $tael; = Resource id #31 i browsen
Avatar billede jakobdo Ekspert
23. maj 2006 - 11:06 #22
Mere i stil med:

$sql = "SELECT * from Billeder WHERE type ='$kategori' ORDER BY id LIMIT $offset,$pr_side";
echo "DEBUG : " . $sql . "<br />";
$query = mysql_query($sql) or die (mysql_error());

$sql = "SELECT COUNT(id) from Billeder WHERE type ='$kategori'";
echo "DEBUG : " . $sql . "<br />";
$tael = mysql_query($sql) or die (mysql_error());
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 11:08 #23
ikke #31 med $tael; = Resource id #3
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 11:10 #24
Sorry - så udskriver den dette:
Resource id #2
--------------------------------------------------------------------------------
Resource id #3slut1 2 3 NæsteDEBUG : SELECT * from Billeder WHERE type ='billede' ORDER BY id LIMIT 0,2
DEBUG : SELECT COUNT(id) from Billeder WHERE type ='billede'
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 11:12 #25
Glem det der :

DEBUG : SELECT * from Billeder WHERE type ='billede' ORDER BY id LIMIT 0,2
DEBUG : SELECT COUNT(id) from Billeder WHERE type ='billede'
Avatar billede jakobdo Ekspert
23. maj 2006 - 11:21 #26
Prøv at klik videre på et link i bunden, så du kommer videre i rækken.
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 11:28 #27
Så skriver den dette her :
DEBUG : SELECT * from Billeder WHERE type ='' ORDER BY id LIMIT 2,2
DEBUG : SELECT COUNT(id) from Billeder WHERE type =''
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 11:31 #28
selvfølgelig så har den nu ikke længere noget i $kategori
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 11:36 #29
Læg et svar Så du kan få dine velfortjente point - Mange mange tak for hjælpen. :)
Avatar billede jakobdo Ekspert
23. maj 2006 - 11:41 #30
Svar! (smid evt kategori med som en offset=$offset&kategori=$kategori)
Avatar billede jacobs1 Nybegynder
23. maj 2006 - 11:53 #31
Det er ordnet :) endnu engang tak!
Avatar billede jakobdo Ekspert
23. maj 2006 - 13:08 #32
Takker for point.
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