Avatar billede technux Nybegynder
22. marts 2006 - 17:32 Der er 25 kommentarer og
1 løsning

Galleri: Forrige/Næste

Jeg har lavet et galleri som jeg henter ud fra en databse vha. koden nedenfor:

<?php
mysql_connect($mysqlhost,$mysqlusr,$mysqlpass);
mysql_select_db($dbname);

if (mysql_num_rows(mysql_query("select id from galleri")) != 0) {
$get = mysql_query("select navn, dimension, aarstal, pris, filnavn from galleri order by ID desc");
while ($stuff = mysql_fetch_array($get)) {
   
extract ($stuff);
?>


Navn: <?php echo $navn ?><br>
Dimension: <?php echo $dimension ?><br>
Årstal: <?php echo $aarstal ?><br>
Pris: <?php echo $pris ?><br><br>

<img src="/galleri/<?php echo $filnavn ?>" alt="" border="0"><br>
                       
<?php
        }
}
else {
    print "Ingen billeder iøjeblikket....";
}
?>

Jeg kunne imidlertid godt tænke mig en "forrige/næste" funktion, så man kan bladre gennem billederne i stedet for at se alle på en side. Er der nogen der kan hjælpe mig til hvordan den klares?
Avatar billede Slettet bruger
22. marts 2006 - 17:47 #1
Så vidt jeg kan se i dette script, henter du alt indhold af databasen ud på samme side.

Hvis du vil lave en bladre-funktion, skal du starte med at finde ud af hvor mange billeder du vil vise på hver side, og derefter lave et offest som du går ud fra.

Den mest brugte måde er så at putte dette offset ind i dit SQL-kald, med LIMIT x,y.

Jeg ved ikke om du er bekendt med brugen af LIMIT? - Herefter er det sådan set bare at tage højde for hvornår du er på første og sidste side.
Avatar billede baitianlong Nybegynder
22. marts 2006 - 17:57 #2
<?php
$id = $_GET['id'];
if(empty($id)) $id = 1;
mysql_connect($mysqlhost,$mysqlusr,$mysqlpass);
mysql_select_db($dbname);

if (mysql_num_rows(mysql_query("select id from galleri")) != 0) {
$get = mysql_query("select navn, dimension, aarstal, pris, filnavn from galleri where ID='".$id."'");
if ($stuff = mysql_fetch_array($get)) {
 
?>


Navn: <?php echo $stuff['navn'] ?><br>
Dimension: <?php echo $stuff['dimension'] ?><br>
Årstal: <?php echo $stuff['aarstal'] ?><br>
Pris: <?php echo $stuff['pris'] ?><br><br>

<img src="/galleri/<?php echo $stuff['filnavn'] ?>" alt="" border="0"><br>
                       
<?php
        }
}
else {
    print "Ingen billeder iøjeblikket....";
}
?>
<input type="button" onclick="window.location.href='<? print($_SERVER['PHP_SELF']."?id=".--$id)?>'" value="Forrige">
<input type="button" onclick="window.location.href='<? print($_SERVER['PHP_SELF']."?id=".++$id)?>'" value="Naeste">

Proev med det der :)
Avatar billede technux Nybegynder
22. marts 2006 - 18:34 #3
legende: Det virker ikke umiddelbart. Den virker kun det sidste først billede i min database og når jeg klikker næste/tilbage sker der intet :(
Avatar billede baitianlong Nybegynder
22. marts 2006 - 20:06 #4
Der er sikkert huller i id listen. Proev at skrive:

<?php
//connect og alt det der
$result = mysql_query("SELECT id FROM galleri ORDER BY id ASC");
while($row = mysql_fetch_assoc($result)) {
  print($row['id']);
}
?>

og kopier siden/resultatet herind...
Avatar billede baitianlong Nybegynder
22. marts 2006 - 20:07 #5
print($row['id']."<br>");
Avatar billede technux Nybegynder
22. marts 2006 - 20:23 #6
Der er ikke holder i ID listen. Lige nu eksisterer der blot 2 numre, ID1 og ID2.

Når jeg trykker "forrige" bliver ID til 0 og når jeg trykker "næste" sker der intet.
Avatar billede technux Nybegynder
22. marts 2006 - 20:25 #7
Resultatet af dit query er blot 1 og 2.
Avatar billede technux Nybegynder
22. marts 2006 - 20:26 #8
pacroon: Kan du give mig et eksempel på din løsning? Den lyder umiddelbart god :)
Avatar billede Slettet bruger
22. marts 2006 - 20:33 #9
Ja, jeg kan lige give det et forsøg.

Hvis vi siger du gerne vil have 10 billeder på hver side, så gør du noget á la:

<?php
if(!isset($_GET['offset']) {
$offset = 0;
} else {
$offset = $_GET['offset'];
}

mysql_connect($mysqlhost,$mysqlusr,$mysqlpass);
mysql_select_db($dbname);

if (mysql_num_rows(mysql_query("select id from galleri")) != 0) {
$get = mysql_query("select navn, dimension, aarstal, pris, filnavn from galleri order by ID desc LIMIT $offset,10");
while ($stuff = mysql_fetch_array($get)) {
 
extract ($stuff);
?>


Navn: <?php echo $navn ?><br>
Dimension: <?php echo $dimension ?><br>
Årstal: <?php echo $aarstal ?><br>
Pris: <?php echo $pris ?><br><br>

<img src="/galleri/<?php echo $filnavn ?>" alt="" border="0"><br>
                     
<?php
        }
}

echo '<a href="?offset='.$offset-10.'">Tilbage</a>;
echo '<a href="?offset='.$offset+10.'">Frem</a>';

?>

Jeg har ikke lige testet det, men det skulle virke nogenlunde. Her bliver der dog ikke taget højde for om du er på først eller sidste side.
Avatar billede technux Nybegynder
22. marts 2006 - 20:40 #10
Jeg får fejl i den første linie med !isset... "Unexpected {"
Avatar billede Slettet bruger
22. marts 2006 - 20:43 #11
oh, så fjern den sidste { - det er vist et levn fra din kode som jeg stjal :)
Avatar billede technux Nybegynder
22. marts 2006 - 20:48 #12
Tror ikke problemet ligger der - Roder lige lidt med koden :)
Avatar billede technux Nybegynder
22. marts 2006 - 21:05 #13
Kan desværre ikke få det til at virke :(
Avatar billede technux Nybegynder
22. marts 2006 - 21:10 #14
Nå, nu fik jeg modificeret det lidt. Følgende virker umiddelbart:

<?php
if (!isset ($_GET['offset'])) {
$offset = 0;
} else {
$offset = $_GET['offset'];
}

mysql_connect($mysqlhost,$mysqlusr,$mysqlpass);
mysql_select_db($dbname);

if (mysql_num_rows(mysql_query("select id from galleri")) != 0) {
$get = mysql_query("select * from galleri order by ID desc LIMIT $offset,1");
while ($stuff = mysql_fetch_array($get)) {

extract ($stuff);
?>


Navn: <?php echo $navn ?><br>
Dimension: <?php echo $dimension ?><br>
Årstal: <?php echo $aarstal ?><br>
Pris: <?php echo $pris ?><br><br>

<img src="/galleri/<?php echo $filnavn ?>" alt="" border="0"><br>
                   
<?php
        }
}
?>

<a href="<? $PHP_SELF ?>?offset=<? echo $offset-1; ?> ">Previous</a>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Next</a>

Problemet er så, at den bladrer viderer selvom der ikke er flere billeder.
Avatar billede Slettet bruger
22. marts 2006 - 21:19 #15
Nemlig, den tjekker ikke om den er på første eller sidste side.

Det kan du så gøre ved, at hvis offset er 0, skal den ikke vise knappen "Previous", og hvis offset er større end mysql_num_rows(), så skal den ikke vise next.

Eller noget i den stil.
Avatar billede technux Nybegynder
22. marts 2006 - 22:25 #16
Jeg har forsøgt at lave det du forslår, men det virker desværre ikke for mig. Kan du hjælpe? :)

<?php
if (!isset ($_GET['offset'])) {
$offset = 0;
} else {
$offset = $_GET['offset'];
}

mysql_connect($mysqlhost,$mysqlusr,$mysqlpass);
mysql_select_db($dbname);

if (mysql_num_rows(mysql_query("select id from galleri")) != 0) {
$get = mysql_query("select * from galleri order by ID desc LIMIT $offset,1");
$num_rows = mysql_num_rows($get);
while ($stuff = mysql_fetch_array($get)) {

extract ($stuff);
?>


Navn: <?php echo $navn ?><br>
Dimension: <?php echo $dimension ?><br>
Årstal: <?php echo $aarstal ?><br>
Pris: <?php echo $pris ?><br><br>

<img src="/galleri/<?php echo $filnavn ?>" alt="" border="0"><br>
                   
<?php
        }
}
?>

<?php if ($offset = 0 ) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset-1; ?> ">Previous</a>
<?php } ?>

<?php if (($offset > 0) && ($offset < $num_rows)) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset-1; ?> ">Previous</a> <a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Next</a> <? echo $offset ?>
<?php } ?>

<?php if ($offset = $num_rows ) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Next</a> <? echo $offset ?>
<?php } ?>
Avatar billede technux Nybegynder
22. marts 2006 - 22:27 #17
Echo af offset har jeg blot sat til for bedre at kunne finde fejlen - hvilket endnu ikke er lykkes.
Avatar billede Slettet bruger
22. marts 2006 - 22:44 #18
Fremad-linket virker godt nok, ikke?

$num_rows = mysql_num_rows($get); <- der skal du nok ikke få resultatet fra det sql kald du laver. Men i stedet fra et SQL kald der finder alle rækkerne i din tabel.

$num_rows = mysql_num_rows(mysql_query("SELECT * from galleri");

Så tror jeg den burde virke hvis du lige retter:

<?php if ($offset = $num_rows ) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Next</a> <? echo $offset ?>
<?php } ?>

til:

<?php if ($offset != $num_rows ) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Next</a> <? echo $offset ?>
<?php } ?>

Hvad siger den til det?
Avatar billede technux Nybegynder
23. marts 2006 - 16:45 #19
Du har fuldstændig ret hvad angår $num_rows, men jeg kan stadig ikke får selve bladre funktion til at fungere korrekt :(
Avatar billede technux Nybegynder
23. marts 2006 - 16:48 #20
Min kode ser nu således ud:

<?php
if (!isset ($_GET['offset'])) {
$offset = 0;
} else {
$offset = $_GET['offset'];
}

mysql_connect($mysqlhost,$mysqlusr,$mysqlpass);
mysql_select_db($dbname);

if (mysql_num_rows(mysql_query("select id from galleri")) != 0) {
$get = mysql_query("select * from galleri order by ID desc LIMIT $offset,1");
$num_rows = mysql_num_rows(mysql_query("SELECT * from galleri"));
while ($stuff = mysql_fetch_array($get)) {

extract ($stuff);
?>


Navn: <?php echo $navn ?><br>
Dimension: <?php echo $dimension ?><br>
Årstal: <?php echo $aarstal ?><br>
Pris: <?php echo $pris ?><br><br>

<img src="/galleri/<?php echo $filnavn ?>" alt="" border="0"><br>
                   
<?php
        }
}
?>

<?php if ($offset = 0 ) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Previous</a>
<?php } ?>

<?php if (($offset > 0) && ($offset < $num_rows)) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Previous</a> <a href="<? $PHP_SELF ?>?offset=<? echo $offset-1; ?> ">Next</a> <? echo $offset ?>
<?php } ?>

<?php if ($offset != $num_rows ) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Next</a> <? echo $offset ?>
<?php } ?>

På den første side er $offset = 0 og der står kun "Next", så der virker fint. Når jeg bladrer står der stadig kun "Next" og $offset er STADIG 0, så den vil ikke videre.

Der er altså umiddelbart to problemer: $offset vokser ikke og previous er ikke med på side 2.

Håber der gør det nemmere at hjælpe.
Avatar billede Slettet bruger
23. marts 2006 - 16:55 #21
Nede i dine prev. og next links - ser skulle ?offset= gerne blive højere. Gør de det?
Avatar billede technux Nybegynder
23. marts 2006 - 17:07 #22
Nej, $offset vokser ikke når jeg skifter side og derfor giver +1 heller ikke en større værdi
Avatar billede technux Nybegynder
23. marts 2006 - 17:08 #23
Når jeg ser på koden kan jeg heller ikke helt se hvorfor $offset skulle vokse. Mangler der ikke noget? Den defineres først som 0 og dernærst kaldes variablen med GET, men hvor hentes den fra?
Avatar billede mclemens Nybegynder
23. marts 2006 - 17:17 #24
<?php if ($offset = 0 ) { ?>
skal det ikke være...
<?php if ($offset == 0 ) { ?>
ellers sætter den vel offset til 0 ???
Avatar billede technux Nybegynder
23. marts 2006 - 17:26 #25
mclemens: Det hjalp mig i hvert fald :-) Efter noget tilretning virker det ENDELIG:

<?php
require("$DOCUMENT_ROOT/mysql.php");
?>

<?php
if (!isset ($_GET['offset'])) {
$offset = 0;
} else {
$offset = $_GET['offset'];
}

mysql_connect($mysqlhost,$mysqlusr,$mysqlpass);
mysql_select_db($dbname);

if (mysql_num_rows(mysql_query("select id from galleri")) != 0) {
$get = mysql_query("select * from galleri order by ID desc LIMIT $offset,1");
$num_rows = mysql_num_rows(mysql_query("SELECT * from galleri"));
while ($stuff = mysql_fetch_array($get)) {

extract ($stuff);
?>


Navn: <?php echo $navn ?><br>
Dimension: <?php echo $dimension ?><br>
Årstal: <?php echo $aarstal ?><br>
Pris: <?php echo $pris ?><br><br>

<img src="/galleri/<?php echo $filnavn ?>" alt="" border="0"><br>
                   
<?php
        }
}
?>

<?php if ($offset == 0 ) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Next</a> <? echo $offset ?> <? echo $num_rows ?>
<?php } ?>

<?php if (($offset > 0) && ($offset < $num_rows-1)) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset-1; ?> ">Previous</a> <a href="<? $PHP_SELF ?>?offset=<? echo $offset+1; ?> ">Next</a> <? echo $offset ?>
<?php } ?>

<?php if ($offset == $num_rows-1 ) { ?>
<a href="<? $PHP_SELF ?>?offset=<? echo $offset-1; ?> ">Previous</a> <? echo $offset ?>
<?php } ?>
Avatar billede Slettet bruger
24. marts 2006 - 13:06 #26
Dejligt :)
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