Avatar billede BTEngineer Novice
13. august 2006 - 20:26 Der er 18 kommentarer og
1 løsning

Forrige og næste

Hej.

Jeg går lige til sagen, hvordan skal jeg lave forrige og næste i dette script:

<?
include("inc/cfg.php");

$q = mysql_query("SELECT * FROM funnypics WHERE id = '$_GET[id]'") or die(mysql_error());
$vis = mysql_fetch_array($q);
?>

<b>Fuld størrelse af billedet <? echo $vis[navn]; ?></b><br>
<table border="0" width="100%">
    <tr>
        <td>HER SKAL FORRIGE OG NÆSTE STÅ.</td>
    </tr>
    <tr>
        <td><img src="<? echo $vis[billede]; ?>" border="0"></td>
    </tr>
    <tr>
        <td>..</td>
    </tr>
</table>

<?
}
}
mysql_close();
?>

Jeg vil gerne have at man har mulighed for at trykke forrige eller næste billede. Hvis der ikke er nogen forrige, så skal knappen være disabled, og det samme hvis der ikke er nogen næste.
Jeg håber i vil prøve at kode det ind i mit script ovenfor..

På forhånd tak.

// Henrik
Avatar billede jakobdo Ekspert
13. august 2006 - 20:34 #1
Jeg tror du kan finde alt hvad du søger her: http://www.eksperten.dk/spm/720196 (sidste indlæg/svar fra MichaelTryl)
Hvis ikke, så spørg bare.
Avatar billede boost Nybegynder
13. august 2006 - 20:49 #2
Avatar billede boost Nybegynder
13. august 2006 - 20:51 #3
<?
include("inc/cfg.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

$q = mysql_query("SELECT * FROM funnypics WHERE id = '$_GET[id]' ORDER BY id DESC LIMIT $offset,$pr_side") or die(mysql_error());
$vis = mysql_fetch_array($q);
?>

<b>Fuld størrelse af billedet <? echo $vis[navn]; ?></b><br>
<table border="0" width="100%">
    <tr>
        <td>
        <?
$antal = mysql_result(mysql_query('SELECT COUNT(*) FROM funnypics'),0); // Tæller antal poster i tabellen "tabel" (husk at ændre til den tabel du bruger)

if ($offset >= $pr_side) { // Tester om det er nødvendigt med et "forrige-link"
$forrige = $offset-$pr_side; // Finder ud af hvor forrige skal starte fra
echo "<a href='?offset=$forrige'>Forrige</a> "; // Udskriver link
}
if ($antal > $offset+$pr_side) { // Tester om det er nødvendigt med et "næste-link"
$naeste = $offset+$pr_side; // Finder ud af hvor næste skal starte fra
echo "<a href='?offset=$naeste'>Næste</a>"; // Udskriver link
}
        ?>
        </td>
    </tr>
    <tr>
        <td><img src="<? echo $vis[billede]; ?>" border="0"></td>
    </tr>
    <tr>
        <td>..</td>
    </tr>
</table>

<?
}
}
mysql_close();
?>
Avatar billede boost Nybegynder
13. august 2006 - 20:53 #4
Sådan..

<?
include("inc/cfg.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

$q = mysql_query("SELECT * FROM funnypics WHERE id = '$_GET[id]' ORDER BY id DESC LIMIT $offset,$pr_side") or die(mysql_error());
$vis = mysql_fetch_array($q);
?>

<b>Fuld størrelse af billedet <? echo $vis[navn]; ?></b><br>
<table border="0" width="100%">
    <tr>
        <td>
        <?
$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM funnypics WHERE id = '$_GET[id]'"),0); // Tæller antal poster i tabellen "tabel" (husk at ændre til den tabel du bruger)

if ($offset >= $pr_side) { // Tester om det er nødvendigt med et "forrige-link"
$forrige = $offset-$pr_side; // Finder ud af hvor forrige skal starte fra
echo "<a href='?offset=$forrige'>Forrige</a> "; // Udskriver link
}
if ($antal > $offset+$pr_side) { // Tester om det er nødvendigt med et "næste-link"
$naeste = $offset+$pr_side; // Finder ud af hvor næste skal starte fra
echo "<a href='?offset=$naeste'>Næste</a>"; // Udskriver link
}
        ?>
        </td>
    </tr>
    <tr>
        <td><img src="<? echo $vis[billede]; ?>" border="0"></td>
    </tr>
    <tr>
        <td>..</td>
    </tr>
</table>

<?
}
}
mysql_close();
?>
Avatar billede coderdk Praktikant
13. august 2006 - 21:45 #5
Hvis det kun er det næste billede og det forrige:

<?
include("inc/cfg.php");

if ( !empty( $_GET['next'] ) )
{
    $q = mysql_query("SELECT * FROM funnypics WHERE id > '$_GET[id]' ORDER BY id ASC LIMIT 1") or die(mysql_error());
}
elseif ( !empty( $_GET['prior'] ) )
{
    $q = mysql_query("SELECT * FROM funnypics WHERE id < '$_GET[id]' ORDER BY DESC ASC LIMIT 1") or die(mysql_error());
}
else
{
    $q = mysql_query("SELECT * FROM funnypics WHERE id = '$_GET[id]'") or die(mysql_error());
}
$vis = mysql_fetch_array($q);
?>

<b>Fuld størrelse af billedet <? echo $vis[navn]; ?></b><br>
<table border="0" width="100%">
    <tr>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?prior=1&amp;id=<?= $vis['id'] ?>">forrige</a>
        og <a href="<?= $_SERVER['PHP_SELF'] ?>?next=1&amp;id=<?= $vis['id'] ?>">næste</a></td>
    </tr>
    <tr>
        <td><img src="<? echo $vis[billede]; ?>" border="0"></td>
    </tr>
    <tr>
        <td>..</td>
    </tr>
</table>

<?

mysql_close();
?>

Meget simpelt, men mangler lidt sikkerhed i og med at den sikkert ikke kan lide at man går før den første og efter den sidste ;)
Avatar billede BTEngineer Novice
13. august 2006 - 22:25 #6
coderdk ->
kan ikke rigtig få det til at virke..
<?
include("inc/cfg.php");

if (!empty($_GET['next'])) {
    $q = mysql_query("SELECT * FROM funnypics WHERE ID > '$_GET[id]' ORDER BY ID ASC LIMIT 1") or die(mysql_error());
}
elseif (!empty($_GET['prior'])) {
    $q = mysql_query("SELECT * FROM funnypics WHERE ID < '$_GET[id]' ORDER BY DESC ASC LIMIT 1") or die(mysql_error());
} else {
    $q = mysql_query("SELECT * FROM funnypics WHERE ID = '$_GET[id]'") or die(mysql_error());
}
$vis = mysql_fetch_array($q);
?>

<b>Fuld størrelse af billedet <? echo $vis[navn]; ?></b><br>
<table border="0" width="100%">
    <tr>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?prior=1&amp;id=<?= $vis['ID'] ?>">forrige</a>
        og <a href="<?= $_SERVER['PHP_SELF'] ?>?next=1&amp;id=<?= $vis['ID'] ?>">næste</a></td>
    </tr>
    <tr>
        <td><img src="<? echo $vis[billede]; ?>" border="0"></td>
    </tr>
    <tr>
        <td>..</td>
    </tr>
</table>

<?
mysql_close();
?>

Hvis man trykker på "forrige" kommer følgende fejlmeddelse:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC ASC LIMIT 1' at line 1

Hvis man trykker næste går den godt nok videre til et andet billede, men ikke lige det billede som gerne skulle komme efter. Og så skulle det også være sådan at forrige var disabled hvis den ikke eksistere, og samme ved næste.. det skal jo være button knapper..

håber på noget mere hjælp :-)
Avatar billede jakobdo Ekspert
13. august 2006 - 22:58 #7
DESC skal rette til id i linien: $q = mysql_query("SELECT * FROM funnypics WHERE ID < '$_GET[id]' ORDER BY DESC ASC LIMIT 1")
Avatar billede coderdk Praktikant
13. august 2006 - 23:17 #8
hmmm nej, linjen skal vist være:

$q = mysql_query("SELECT * FROM funnypics WHERE ID < '$_GET[id]' ORDER BY ID DESC LIMIT 1") or die(mysql_error());

:)
Avatar billede jakobdo Ekspert
13. august 2006 - 23:33 #9
Det var jo også det jeg skrev! :o)
Avatar billede coderdk Praktikant
13. august 2006 - 23:41 #10
heheh nej du skrev at DESC skulle erstattes af ID, men ASC skal slettes og ID skal indsættes før DESC ;)
Avatar billede BTEngineer Novice
13. august 2006 - 23:42 #11
Okay, men det virker stadigvæk ikke.
Kan ikke se nogen forandring.
og hvordan laver jeg sådan at button knappen er disabled HVIS forrige eller næste ikke findes?
Avatar billede coderdk Praktikant
14. august 2006 - 00:17 #12
Virker ikke? Hvordan? Sker der intet eller hvordan?

Jeg har ikke testet noget, og har aldrig påstået at løsningen var god ;) Men her er en hvor forrige/næste ikke vises hvis der ingen er:

<?
include("inc/cfg.php");

$qNext = mysql_query("SELECT * FROM funnypics WHERE ID > '$_GET[id]' ORDER BY ID ASC LIMIT 1") or die(mysql_error());
$hasNext = ( mysql_num_rows( $qNext ) > 0 );

$qPrior = mysql_query("SELECT * FROM funnypics WHERE ID < '$_GET[id]' ORDER BY ID DESC LIMIT 1") or die(mysql_error());
$hasPrior = ( mysql_num_rows( $qPrior ) > 0 );

if ( !empty( $_GET['next'] ) && $hasNext )
{
    $q = $qNext;
}
elseif ( !empty( $_GET['prior'] ) && $hasPrior )
{
    $q = $qPrior;
} else {
    $q = mysql_query("SELECT * FROM funnypics WHERE ID = '$_GET[id]'") or die(mysql_error());
}
$vis = mysql_fetch_array($q);
?>

<b>Fuld størrelse af billedet <? echo $vis[navn]; ?></b><br>
<table border="0" width="100%">
    <tr>
        <td>
<?php if ( $hasPrior ) { ?>
        <a href="<?= $_SERVER['PHP_SELF'] ?>?prior=1&amp;id=<?= $vis['ID'] ?>">&laquo; forrige</a>
<?php } if ( $hasNext ) { ?>
        <a href="<?= $_SERVER['PHP_SELF'] ?>?next=1&amp;id=<?= $vis['ID'] ?>">næste &raquo;</a>
<?php } ?>
        </td>
    </tr>
    <tr>
        <td><img src="<? echo $vis[billede]; ?>" border="0"></td>
    </tr>
    <tr>
        <td>..</td>
    </tr>
</table>

<?
mysql_close();
?>
Avatar billede BTEngineer Novice
14. august 2006 - 12:37 #13
Det virker nu :-).
Men har stadig 2 problemer.

1: Når man trykker 'næste billede', så kommer man godt til det næste billede, men så kan man ikke trykke 'forrige billede', først næste gang med trykker næste billede. Altså først efter 2 gange.

2: Jeg har lavet næste og forrige i knapper, men hvordan laver jeg sådan at knappen er disabled hvis forrige eller næste ikke findes?

Her er scriptet:
<?
include("inc/cfg.php");

$qNext = mysql_query("SELECT * FROM funnypics WHERE ID > '$_GET[id]' ORDER BY ID ASC LIMIT 1") or die(mysql_error());
$hasNext = (mysql_num_rows($qNext) > 0 );

$qPrior = mysql_query("SELECT * FROM funnypics WHERE ID < '$_GET[id]' ORDER BY ID DESC LIMIT 1") or die(mysql_error());
$hasPrior = (mysql_num_rows($qPrior) > 0 );

if(!empty($_GET[next]) && $hasNext) {
    $q = $qNext;
}

elseif(!empty($_GET[prior]) && $hasPrior) {
    $q = $qPrior;
} else {

    $q = mysql_query("SELECT * FROM funnypics WHERE ID = '$_GET[id]'") or die(mysql_error());
}

$vis = mysql_fetch_array($q);
?>

<b>Fuld størrelse af billedet <? echo $vis[navn]; ?></b><br>
<table border="0" width="100%">
    <tr>
        <td>
<?php if($hasPrior) { ?>
    <button onclick="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?prior=1&id=<?= $vis['ID'] ?>'">Forrige billede</button>
<?php } if($hasNext) { ?>
    <button onclick="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?next=1&amp;id=<?= $vis['ID'] ?>'">Næste billede</button>
<?php } ?>

        </td>
    </tr>
    <tr>
        <td><img src="<? echo $vis[billede]; ?>" border="0"></td>
    </tr>
    <tr>
        <td>..</td>
    </tr>
</table>

<?
mysql_close();
?>
Avatar billede BTEngineer Novice
14. august 2006 - 15:43 #14
Fik lige selv lavet det med knapperne hvor de er disabled..
Så skal bare vide, hvordan mit første problem løses.
Altså.. hvis nu jeg åbner det første billede, som er ID 1, og trykker 'næste billede', så vises 'forrige billede'-knappen ikke, men trykker jeg så næste igen, så vises forrige knappen..
- Hvordan ordnes det?
Avatar billede coderdk Praktikant
14. august 2006 - 16:29 #15
Prøv lige med:

<?
include("inc/cfg.php");

$qNext = mysql_query("SELECT ID FROM funnypics WHERE ID > '$_GET[id]' ORDER BY ID ASC LIMIT 1") or die(mysql_error());
$hasNext = (mysql_num_rows($qNext) > 0 );
if ( $hasNext ) $next = mysql_fetch_assoc( $qNext );

$qPrior = mysql_query("SELECT * FROM funnypics WHERE ID < '$_GET[id]' ORDER BY ID DESC LIMIT 1") or die(mysql_error());
$hasPrior = (mysql_num_rows($qPrior) > 0 );
if ( $hasPrior ) $prior = mysql_fetch_assoc( $qPrior );

$q = mysql_query("SELECT * FROM funnypics WHERE ID = '$_GET[id]'") or die(mysql_error());
$vis = mysql_fetch_assoc($q);

?>

<b>Fuld størrelse af billedet <? echo $vis[navn]; ?></b><br>
<table border="0" width="100%">
    <tr>
        <td>
<?php if($hasPrior) { ?>
    <button onclick="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?id=<?= $prior['ID'] ?>'">Forrige billede</button>
<?php } if($hasNext) { ?>
    <button onclick="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?id=<?= $next['ID'] ?>'">Næste billede</button>
<?php } ?>

        </td>
    </tr>
    <tr>
        <td><img src="<? echo $vis[billede]; ?>" border="0"></td>
    </tr>
    <tr>
        <td>..</td>
    </tr>
</table>

<?
mysql_close();
?>

Det er lidt pænere i mine øjne, måske virker den også bedre ;)
Avatar billede BTEngineer Novice
14. august 2006 - 17:44 #16
Nu virker det som det skal :-).
TAK!

Men hvad er forskellen på mysql_fetch_array og mysql_fetch_assoc?
Avatar billede coderdk Praktikant
14. august 2006 - 17:58 #17
assoc henter kun et associeret array ud - altså $row['feltnavn'] - array henter både et associeret array og et nummerisk array så du både kan tilgå felter som $row['feltnavn'] og $row[0]
Avatar billede coderdk Praktikant
14. august 2006 - 17:58 #18
Og et svar :)
Avatar billede BTEngineer Novice
14. august 2006 - 18:08 #19
Okay, tak igen :-).
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

IT-JOB

Riskpoint A/S (Riskpoint Solutions Limited)

IT Business Analyst

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger en IT-supporterelev til lokal IT på Haderslev Kaserne

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Kryptokustode til opbygning af Forsvarets nye IT-platform