Avatar billede kren1000 Nybegynder
10. juni 2007 - 10:43 Der er 35 kommentarer og
1 løsning

hjælp til mindre galleri problem

Hej eksperter

Jeg er igang med at udarbejde et simpelt billedgalleri, hvor billeder ligger i en database i forskellige kategorier.

Jeg for fint vist billederne i den valgte kategori, 3 stk. ad gangen, samt en "forrige" og "næste" knap hvis der er flere.

Mit problem er at når jeg vælger et billede og for vist thumbnail og lidt tekst, kan jeg ikke få link til næste og forrige link til resten af den valgte kategori til at virke.

Jeg har prøvet en hel de, men er tilsyneladende bare ikke god nok. Jeg har rodet så meget med det at

Understående er fra billeder_valgt.php, noget jeg har fundet herinde og forsøgt mig med, uden held.

# antal til at vise på skærm
    $display = 1;
    if (!isset($_GET['pointer']) && !is_int($_GET['pointer'])) $pointer = 0;
    else $pointer = $_GET['pointer'];
   
    # tæl maks antal elementer
    $sql = mysql_query("
        SELECT COUNT(id)
        FROM kunst WHERE id = ".$_GET['id'].";
    ") or die(mysql_error());

    $foo = mysql_fetch_row($sql);
    $antalElementer = $foo[0];   
   
    # udskriv elementer på side
    $sql = mysql_query("
        SELECT *
        FROM kunst WHERE id = ".$_GET['id']."
        LIMIT $pointer,$display
    ") or die(mysql_error());
   
    while ($foo = mysql_fetch_assoc($sql)) {
        # Udskriv dine billeder her
        echo "<table align='center' border='0' cellspacing='0' cellpadding='0'>";
        echo "<tr><td><img src=\"admin/$foo[thumbnail]\" border='0'></td></tr>";
        echo "<tr><td align='left'>Navn: $foo[navn]</td></tr>";
        echo "<tr><td align='left'>Pris: $foo[pris],- kr</td></tr>";
        echo "<tr><td align='left'>År: $foo[aarstal]</td></tr>";
        echo "<tr><td align='left'>Kategori: $foo[kategori]</td></tr>";
        echo "<tr><td align='left'>Størrelse: $foo[storrelse]</td></tr>";
        echo "<tr><td align='left'>Beskrivelse: $foo[tekst]</td></tr>";
        echo "</table>";
   
    }
   
    # tilbage knap
    if ($pointer != 0) echo '<a href="billeder_valgt.php?pointer='.($pointer-$display).'">Forgående</a> ';
    else echo 'Forgående ';

    # side indexeringer
    $maxIndex = floor($antalElementer/$display);
    for ($i=0;$i<$maxIndex;$i++) echo '<a href="billeder_valgt.php?pointer='.($i*$display).'">'.$i.'</a> ';
 
    # frem knap
    if ($pointer < $antalElementer) echo '<a href="billeder_valgt.php?pointer='.($pointer+$display).'">Næste</a> ';
    else echo 'Næste ';
Avatar billede gider_ikke_mere Nybegynder
11. juni 2007 - 04:26 #1
Det virker da fint nok.
Avatar billede kren1000 Nybegynder
11. juni 2007 - 08:50 #2
Ja ok, men jeg for denne fejl: 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 '' at line 2.

Det er sikkert fordi jeg har forskellige kategorier med billeder?
Avatar billede michael_stim Ekspert
11. juni 2007 - 08:55 #3
Så pröv at udskriv din SQL.
Avatar billede gider_ikke_mere Nybegynder
11. juni 2007 - 09:37 #4
Hvad med denne:

    $id = $_GET['id'];
    $sql = mysql_query("
        SELECT COUNT(id)
        FROM kunst WHERE id =  \"$id\"") or die(mysql_error());
Avatar billede gider_ikke_mere Nybegynder
11. juni 2007 - 09:41 #5
... og så skal du være sikker på at din $_GET['id'] har en værdi. Hvis $id ikke er en global variabel, skal du smide den med videre:


//?id='.$id.'
    if ($pointer != 0) echo '<a href="galleri.php?id='.$id.'&pointer='.($pointer-$display).'">Forgående</a> ';
    else echo 'Forgående ';

// o.s.v
Avatar billede kren1000 Nybegynder
11. juni 2007 - 11:30 #6
Jeg prøvet at skrive som foreslået, Akyhne, men der er stadig noget galt.

Når jeg prøver at skrive echo "$antalElementer";, står der kun 1, den skulle vel gerne tælle alle dem der hører til f.eks. kategori 14 for at lave næste og foregående.

Jeg har nu følgende, håber ikke jeg har misforstået noget?:)

# antal til at vise på skærm
    $display = 1;
    if (!isset($_GET['pointer']) && !is_int($_GET['pointer'])) $pointer = 0;
    else $pointer = $_GET['pointer'];
   
    # tæl maks antal elementer
    $id = $_GET['id'];
    $sql = mysql_query("
        SELECT COUNT(id)
        FROM kunst WHERE id =  \"$id\"") or die(mysql_error());
   
    $foo = mysql_fetch_row($sql);
    $antalElementer = $foo[0];   
       
    # udskriv elementer på side
    $sql = mysql_query("
        SELECT *
        FROM kunst WHERE id = ".$_GET['id']."
        LIMIT $pointer,$display
    ") or die(mysql_error());
   
    while ($foo = mysql_fetch_assoc($sql)) {
        # Udskriv dine billeder her
        echo "<table align='center' border='0' cellspacing='0' cellpadding='0'>";
        echo "<tr><td><img src=\"admin/$foo[thumbnail]\" border='0'></td></tr>";
        echo "<tr><td align='left'>Navn: $foo[navn]</td></tr>";
        echo "<tr><td align='left'>Pris: $foo[pris],- kr</td></tr>";
        echo "<tr><td align='left'>År: $foo[aarstal]</td></tr>";
        echo "<tr><td align='left'>Kategori: $foo[kategori]</td></tr>";
        echo "<tr><td align='left'>Størrelse: $foo[storrelse]</td></tr>";
        echo "<tr><td align='left'>Beskrivelse: $foo[tekst]</td></tr>";
        echo "</table>";
        echo "$antalElementer";
    }
   
    # tilbage knap
    if ($pointer != 0) echo '<a href="billeder_valgt.php?id='.$id.'&pointer='.($pointer-$display).'">Forgående</a> ';
    else echo 'Forgående ';

    # side indexeringer
    $maxIndex = floor($antalElementer/$display);
    for ($i=0;$i<$maxIndex;$i++) echo '<a href="billeder_valgt.php?pointer='.($i*$display).'">'.$i.'</a> ';
 
    # frem knap
    if ($pointer < $antalElementer) echo '<a href="billeder_valgt.php?pointer='.($pointer+$display).'">Næste</a> ';
    else echo 'Næste ';
Avatar billede gider_ikke_mere Nybegynder
11. juni 2007 - 11:55 #7
Først og fremmest:
Du skal have >>> ?id='.$id.' <<< på både tilbage, indexering, samt frem for at få $id med videre.

Dernæst: Hvor mange billeder vil du have link til? Alle eller få stykker ad gangen?

Du skal jo også rette

    # udskriv elementer på side
    $sql = mysql_query("
        SELECT *
        FROM kunst WHERE id = ".$_GET['id']."
        LIMIT $pointer,$display
    ") or die(mysql_error());

til

    # udskriv elementer på side
    $sql = mysql_query("
        SELECT *
        FROM kunst WHERE id =  \"$id\"")
        LIMIT $pointer,$display
    ") or die(mysql_error());

Desuden kan du ikke have LIMIT på en SELECT. Hvad vil du med den?
Avatar billede gider_ikke_mere Nybegynder
11. juni 2007 - 12:09 #8
Ups, det passer ikke du ikke kan bruge LIMIT i en SELECT...
Avatar billede gider_ikke_mere Nybegynder
11. juni 2007 - 12:12 #9
Du får ikke antal elementer med

echo "$antalElementer";

... men med

echo $antalElementer;
Avatar billede kren1000 Nybegynder
11. juni 2007 - 12:35 #10
Ok nu har jeg ændret, jeg for dog stadig kun en fra antal elementer.

Det er sådan at man kan vælge en kategori med billeder, det virker fint så der kommer f.eks. 7 billeder, 3 pr.side, med frem og tilbage knap, samt sidetal i midten.

Ovenstående kode er så til den side der kommer hvis man klikker på et valgt billede af de 7. Dvs. et lag dybere.

Det er det med at få kategorien med ind i det:).
Avatar billede gider_ikke_mere Nybegynder
11. juni 2007 - 12:36 #11
Og så ville jeg lave følgende om:

    # side indexeringer
    $maxIndex = floor($antalElementer/$display);
    for ($i=0;$i<$maxIndex;$i++) echo '<a href="billeder_valgt.php?pointer='.($i*$display).'">'.$i.'</a> ';

til...

    # side indexeringer
    $maxIndex = floor($antalElementer/$display);
    for ($i=1;$i<$maxIndex+1;$i++) {
        $Y = $i*$display+1-$display.'-'.$i*$display;
        echo '<a href="billeder_valgt.php?id='.$id.'&pointer='.($i*$display).'">'.$Y.'</a> ';
    }

Så får du:
   
    Forgående 1-3 4-6 7-9 10-12 13-15 (o.s.v.) Næste
Avatar billede kren1000 Nybegynder
11. juni 2007 - 12:39 #12
Ja det har du da også ret i, det er bedre:)
Avatar billede kren1000 Nybegynder
11. juni 2007 - 12:39 #13
Altså til den første side kan det være bedre mener jeg.
Avatar billede gider_ikke_mere Nybegynder
11. juni 2007 - 12:48 #14
11/06-2007 12:35:25 er jeg ikke lige med på...
Du sender jo bare en variabel med fra foregående kategoriside.

Hvis det er et link på kategorisiden:
echo '<a href="billeder_valgt.php?id='.$id.'">'.$Y.'</a> ';

id bliver så en variabel som både php & for den sags skyld Javascript kan fange. Dette kræver dog at du har register_globals sat til on. Alternativt henter du din id via et hiddenfield.
Avatar billede kren1000 Nybegynder
11. juni 2007 - 19:48 #15
Ok, jeg kigger på det imorgen igen, er i tidsnød dagen ud og vender tilbage der.
Avatar billede kren1000 Nybegynder
12. juni 2007 - 21:21 #16
Nu har jeg rodet noget mere med det, men endnu uden held. Jeg kan godt se hvad du mener, men har problemer med at få det til at virke i praksis.
Avatar billede gider_ikke_mere Nybegynder
13. juni 2007 - 07:41 #17
Har du styr på de begreber jeg snakker om? Ellers smid noget kode. For begge sider.
Avatar billede kren1000 Nybegynder
13. juni 2007 - 08:16 #18
Nej nok ikke helt:), men fedt du vil hjælpe, håber det er til at overskue, det er 2 næsten ens scrips jeg nu har taget udgangspunkt i.

Kode: billeder_kategori3.php
-------------------------------------------------------------------------------------
db connect
/* Antallet af poster vi ønsker vist på hver side */
    $pr_side = 3;
   
    /* Vi tæller antallet af poster i tabellen husk at ændre ‘table’ til dit eget tabelnavn */
    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM kunst WHERE kategori = ".$_GET['id'].""),0) or die(mysql_error());

    $vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;

/* Vi laver et database udtræk med limit, så den kun hiver det rigtige antal ud fra tabellen, husk at ændre ‘table’ til dit eget tabelnavn */
       
    $result = "<table width='650'>\n";
    $kunstquery = mysql_query("
    SELECT
        *
    FROM
        kunst WHERE kategori = ".$_GET['id']."
    ORDER BY
        navn
    ASC limit $vis_fra, $pr_side");
$i_tmp = 1;
$i_antal = 4;
while($kunstinfo = mysql_fetch_array($kunstquery)) {
    if($i_tmp == 1)
        $result .= "\t<tr>\n";
        $result .= "\t\t<td class='produkt' align='center'><a href='billeder_valgt.php?kategori=".$_GET['id']."&id=$kunstinfo[id]'><img src='admin/$kunstinfo[thumbnail]' style=\"border-color:#353647\"></a><br><a href='billeder_valgt.php?kategori=".$_GET['id']."&id=$kunstinfo[id]'>".$kunstinfo[navn]."</a></td>\n";
    if($i_tmp == $i_antal)
        $result .= "\t</tr>\n";
    $i_tmp = ($i_tmp == $i_antal ? 1 : $i_tmp+1);

}
$result .= "</table>\n";
print $result;

    if ($vis_fra > 0) {

    $back= $vis_fra - $pr_side;
    echo "<table align='center' cellpadding='0' cellspacing='0' border='0'><tr><td class='email' align='center' valign='bottom'>";
    echo "<a href='$_SERVER[PHP_SELF]?id=".$_GET['id']."&visfra=$back'>&nbsp;Forrige&nbsp;</a>";

    }

    $page = 1;

    /* Alle siderne udskrives så man med et klik kan få resultaterne fra fx 90-100 */

    for ($start = 0; $antal > $start; $start = $start + $pr_side) {

    if($vis_fra != $page * $pr_side - $pr_side) {

    echo "<span class='email'><a href='$_SERVER[PHP_SELF]?id=".$_GET['id']."&visfra=$start'>&nbsp;$page&nbsp;</a></span>";

    } else {
   
    echo $page." ";
   
    }

    $page++;

    }

    /* Der undersøges om der skal udskrives et ”næste side”-link, er dette tilfældet udskrives linket */

    if ($vis_fra < $antal - $pr_side) {

    $next = $vis_fra + $pr_side;

    echo "<span class='email'><a href='$_SERVER[PHP_SELF]?id=".$_GET['id']."&visfra=$next'>&nbsp;Næste&nbsp;</a></span></td></tr></table>";
    }

Jeg har forsøgt mig med koden fra ovenstående side som jeg ved virker, og det er blevet bedre. Jeg kan nu fint vælge og få vist det rigtige billede, og for vist 1,2,3,4,5,6,7,8 som er antallet af billeder i kategorien. Det fungerer dog ikke med indexeringen, da 1 er markeret uanset hvilket jeg vælger fra start.

billeder_valgt.php
-------------------------------------------------------------------------------------

db connect

/* Antallet af poster vi ønsker vist på hver side */
    $pr_side = 1;
   
    /* Vi tæller antallet af poster i tabellen husk at ændre ‘table’ til dit eget tabelnavn */
    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM kunst WHERE kategori = ".$_GET['kategori'].""),0) or die(mysql_error());

    /* Hvis visfra-variablen ikke findes i URL-feltet og den ikke er et nummer og den er større end antallet i databasen, så sættes den til 0, ellers sættes den til værdien fra URL feltet */

    $vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;

/* Vi laver et database udtræk med limit, så den kun hiver det rigtige antal ud fra tabellen, husk at ændre ‘table’ til dit eget tabelnavn */
    $kategori =    $_GET['kategori'];
    $result = "<table width='650' border='1'>\n";
    $kunstquery = mysql_query("
    SELECT
        *
    FROM
        kunst WHERE kategori = $kategori AND id = ".$_GET['id']."
    ORDER BY
        navn
    ASC limit $vis_fra, $pr_side");
$i_tmp = 1;
$i_antal = 4;
while($kunstinfo = mysql_fetch_array($kunstquery)) {
    if($i_tmp == 1)
        $result .= "\t<tr>\n";
        $result .= "\t\t<td><img src='admin/$kunstinfo[thumbnail]' style=\"border-color:#353647\"><br>$kunstinfo[pris]\n";
        $result .= "\t$kunstinfo[tekst]</td>\n";
   
    if($i_tmp == $i_antal) 
        $result .= "\t</tr>\n";
    $i_tmp = ($i_tmp == $i_antal ? 1 : $i_tmp+1);

}
$result .= "</table>\n";
print $result;
echo "<br>";
echo $antal;
echo "<br>";
echo $id;
echo "<br>";
echo $kategori;
echo "<br>";
   
    $page = 1;

    /* Alle siderne udskrives så man med et klik kan få resultaterne fra fx 90-100 */

    for ($start = 0; $antal > $start; $start = $start + $pr_side) {

    if($vis_fra != $page * $pr_side - $pr_side) {

    echo "<span class='email'><a href='$_SERVER[PHP_SELF]?kategori=".$_GET['kategori']."&visfra=$start'>&nbsp;$page&nbsp;</a></span>";

    } else {
   
    echo $page." ";
   
    }

    $page++;

    }
------------------------------------------------------------------------------------
Avatar billede kren1000 Nybegynder
13. juni 2007 - 08:18 #19
Og der kommer fejl når jeg klikker på et tal fra indexeringen:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in -----/billeddatabase/billeder_valgt.php on line 64

Det er denne linie: while($kunstinfo = mysql_fetch_array($kunstquery)) {
Avatar billede gider_ikke_mere Nybegynder
13. juni 2007 - 19:18 #20
Hvad indeholder kategorierne id, kategori og navn?
Avatar billede kren1000 Nybegynder
13. juni 2007 - 22:57 #21
id = tal (120,121 osv.)
navn = varchar, bogstaver
kategori = tal, der refererer til en kategori tabel, med id og navn.

Var det sådan du mente?
Avatar billede gider_ikke_mere Nybegynder
14. juni 2007 - 09:03 #22
Ja, det var det jeg mente, men jeg er nødt til at vide lidt mere.
du skriver at du henter fra 2 tabeller.
billeder_kategori3.php henter fra 1 tabel & billeder_valgt.php henter fra en anden.
Men det gør du ikke i dine scripts! Der henter du kun fra 1 tabel, kaldet kunst!

Derfor er det lidt svært for mig at finde ud af hvad scriptene egentlig skal.
Dog skal du lave følgende ændringer:

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM kunst WHERE kategori = ".$_GET['id'].""),0) or die(mysql_error());

skal være

$id = $_GET['id'];
$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM kunst WHERE kategori = \"$id\""),0) or die(mysql_error());

og

$kunstquery = mysql_query("SELECT * FROM kunst WHERE kategori = ".$_GET['id']." ORDER BY navn ASC limit $vis_fra, $pr_side");

skal være

$kunstquery = mysql_query("SELECT * FROM kunst WHERE kategori = \"$id\" ORDER BY navn ASC limit $vis_fra, $pr_side");

og

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM kunst WHERE kategori = ".$_GET['kategori'].""),0) or die(mysql_error());

skal være

$kategori = $_GET['kategori'];
$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM kunst WHERE kategori = \"$kategori\""),0) or die(mysql_error());

og

$kunstquery = mysql_query("SELECT * FROM kunst WHERE kategori = $kategori AND id ".$_GET['id']." ORDER BY navn ASC limit $vis_fra, $pr_side");

skal være

$id = $_GET['id'];
$kunstquery = mysql_query("SELECT * FROM kunst WHERE kategori = \"$kategori\" AND id = \"$'id'\" ORDER BY navn ASC limit $vis_fra, $pr_side");

Så skulle du slippe for dine warnings.
Avatar billede kren1000 Nybegynder
14. juni 2007 - 10:50 #23
Ja du har ret, nu er alle warnings væk, og den tager fint, det rigtige id og kategori med over i urlen.

Jeg forsøger at uddybe lidt:
1. Inde i billeder_kategori.php er der en menu med kategorinavne, hentet fra tabellen kategori.
2. Når man vælger en kategori, for man på siden vist de billeder der er i tabellen kunst som hører til kategorien. De bliver vist 3 stk. pr. side, med forrige og næste knap osv.
3. Man kan klikke på et billede for at se den større version, samt beskrivelse osv., hvilket skulle ske på billeder_valgt.php. Her skal man så kunne vælge forrige og næste, samt billederne ud fra numre osv. Denne info kommer fra kunst tabellen, samt de alle selvfølgelig skal være fra den valgte kategori samtidig.

Håber det hjælper.
Avatar billede gider_ikke_mere Nybegynder
14. juni 2007 - 17:07 #24
I din kode henter du da kun fra 1 tabel? Men du har 2 tabeller med navnet kategori & kunst?

I så fald har du vel i kategori:
id, kategori

og i kunst:
id, kategori, pris, tekst

Er det korrekt?
Avatar billede kren1000 Nybegynder
14. juni 2007 - 19:44 #25
Det er korrekt ja.

Til visning af menuen henter jeg fra tabellen kategori, ellers ikke.
Men så viderefører jeg jo "kategori id" fra tabellen, for der skal kun vises billeder fra den valgte kategori.
Avatar billede gider_ikke_mere Nybegynder
14. juni 2007 - 20:03 #26
Jeg er på vej på arbejde og min testserver driller voldsom, men her er billeder_kategori3.php:

/* Antallet af poster vi ønsker vist på hver side */
    $pr_side = 3;
   
/* Vi tæller antallet af poster i tabellen husk at ændre ‘table’ til dit eget tabelnavn */

    $id = (isset($_GET["id"])) ? $_GET["id"] : 1;

    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM kunst WHERE kategori = \"$id\""),0) or die(mysql_error());
    echo 'Der er '.$antal.'<br>';
    $vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal ) ? $_GET["visfra"] : 0;

/* Vi laver et database udtræk med limit, så den kun hiver det rigtige antal ud fra tabellen, husk at ændre ‘table’ til dit eget tabelnavn */
       
    $streng = "<table width='650'>\n";
    $result = mysql_query("SELECT * FROM kunst WHERE kategori = \"$id\" ORDER BY navn ASC limit $vis_fra, $pr_side");


$i_tmp = 1;
$i_antal = 4;
while($kunstinfo = mysql_fetch_array($result)) {
    if($i_tmp == 1)
        $streng .= "\t<tr>\n";
        $streng .= "\t\t<td class='produkt' align='center'><a href='billeder_valgt.php?kategori=".$_GET['id']."&id=$kunstinfo[id]'><img src='admin/".$kunstinfo[thumbnail]."' style=\"border-color:#353647\"></a><br><a href='billeder_valgt.php?kategori=".$_GET['id']."&id=".$kunstinfo[id]."'>".$kunstinfo[navn]."</a></td>\n";
    if($i_tmp == $i_antal)
        $streng .= "\t</tr>\n";
    $i_tmp = ($i_tmp == $i_antal ? 1 : $i_tmp+1);

}
$streng .= "</table>\n";
print $streng;

    if ($vis_fra > 0) {

    $back= $vis_fra - $pr_side;
    echo "<table align='center' cellpadding='0' cellspacing='0' border='1'><tr><td class='email' align='center' valign='bottom'>";
    echo "<a href='$_SERVER[PHP_SELF]?id=".$_GET['id']."&visfra=$back'>&nbsp;Forrige&nbsp;</a>&nbsp;";

    }

    $page = 1;

    /* Alle siderne udskrives så man med et klik kan få resultaterne fra fx 90-100 */

    for ($start = 0; $antal > $start; $start = $start + $pr_side) {

    if($vis_fra != $page * $pr_side - $pr_side) {

    echo "<span class='email'><a href='$_SERVER[PHP_SELF]?id=".$_GET['id']."&visfra=$start'>$page</a></span>&nbsp;";

    } else {
   
    echo $page." ";
   
    }

    $page++;

    }

    /* Der undersøges om der skal udskrives et ”næste side”-link, er dette tilfældet udskrives linket */

    if ($vis_fra < $antal - $pr_side) {

    $next = $vis_fra + $pr_side;

    echo "<span class='email'><a href='$_SERVER[PHP_SELF]?id=".$_GET['id']."&visfra=$next'>Næste</a></span></td></tr></table>";
    }

Du mangler lidt sikkerhed til hvis brugeren ikke kommer fra en side hvor $id er defineret. Så får du fejl.
Avatar billede gider_ikke_mere Nybegynder
14. juni 2007 - 20:05 #27
Her er billeder_valgt.php:

$kategori = $_GET['kategori'];
$id = $_GET['id'];

/* Antallet af poster vi ønsker vist på hver side */
    $pr_side = 1;
   
/* Vi tæller antallet af poster i tabellen husk at ændre ‘table’ til dit eget tabelnavn */

    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM kunst WHERE kategori = \"$kategori\""),0) or die(mysql_error());


    /* Hvis visfra-variablen ikke findes i URL-feltet og den ikke er et nummer og den er større end antallet i databasen, så sættes den til 0, ellers sættes den til værdien fra URL feltet */

    $vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;

/* Vi laver et database udtræk med limit, så den kun hiver det rigtige antal ud fra tabellen, husk at ændre ‘table’ til dit eget tabelnavn */
    $result = "<table width='650' border='1'>\n";

    $kategori = $_GET['kategori'];
    $kunstquery = mysql_query("SELECT * FROM kunst WHERE kategori = \"$kategori\" ORDER BY id ASC ");//limit $vis_fra, $pr_side");

$i_tmp = 1;
$i_antal = 4;
while($kunstinfo = mysql_fetch_array($kunstquery)) {
    $page++;
    //$tmp[] = "<a href='$_SERVER[PHP_SELF]?kategori=".$_GET['kategori']."&id=".$kunstinfo['id']."&visfra=$start'>".$page."</a>&nbsp;";
    if($kunstinfo["id"] == $id) {
        $result .= "\t<tr>\n";
        $result .= "\t\t<td><img src='admin/".$kunstinfo["thumbnail"]."' style=\"border-color:#353647\"><br>".$kunstinfo["pris"]."\n";
        $result .= "\t".$kunstinfo["tekst"]."</td>\n";
        $links[] .= $page;
        $vistbillede = $page;
    } else {
        $links[] .= "<a href='$_SERVER[PHP_SELF]?kategori=".$_GET['kategori']."&id=".$kunstinfo['id']."&visfra=$start'>".$page."</a>&nbsp;";
    }
    if($i_tmp == $i_antal) {
        $result .= "\t</tr>\n";
        $i_tmp = ($i_tmp == $i_antal ? 1 : $i_tmp+1);
    }
}
$result .= "</table>\n";
print $result;


    // viser links til de 2 forrige billeder samt de 2 næste
    for ($start = 0; $start = $antal; $start ++) {
        IF ($start > $vistbillede-2 AND $start < $vistbillede+2 ) {
            $temp .= $links[$start];
        }
    }
echo $temp;


Jeg ved ikke om den virker, p.g.a. ovennævnte problemer med serveren!!!
Avatar billede gider_ikke_mere Nybegynder
14. juni 2007 - 20:33 #28
Ups, der var en fejl i den sidste...
Avatar billede gider_ikke_mere Nybegynder
14. juni 2007 - 20:41 #29
Ret lige de sidste linier:

    // viser links til de 2 forrige billeder samt de 2 næste
    for ($start = 0; $start < $page; $start ++) {
        IF ($start >= $vistbillede-3 AND $start < $vistbillede+2) {
            $temp .= $links[$start];
        }
    }
echo $temp;
Avatar billede kren1000 Nybegynder
15. juni 2007 - 09:36 #30
Det er jo helt perfekt, det virker som det skal:).

Nu må jeg lure koderne og se hvad det er jeg har misforstået.

Hvis du smider et svar, for du velfortjente point:)
Avatar billede kren1000 Nybegynder
15. juni 2007 - 10:04 #31
Her på falderebet, ved du så hvordan man tilføjer forrige og næste, ligesom ved billeder_kategori3.php, så man har: Forrige - 1-2-3 - Næste?

Koden er nemlig noget anderledes under billeder_kategori3.php.

Kun hvis du gider:)
Avatar billede gider_ikke_mere Nybegynder
15. juni 2007 - 15:29 #32
Hej igen.

Du har valgt at videreføre dine variabler via links. Dermed skal du enten holde musen over linkene eller kigge i den genererede htmlkode, for at se hvad der mangler af data. Det var i hvertfald nogle af problemerne.

Det næste er måden man skriver en streng til en variabel hhv. et MySql kald.
En variabel som sammensættes af strenge og andre variabler kan sættes sammen på forskellige måder. Den metode jeg bruger mest er:

$Antal = 5;
$nyVariabel = "Du er nr. " . $Antal . " besøgende";

Jeg bruger Dreamweaver til at kode i. Der får jeg forskellige farver på php kode & strenge. Det gør det overskueligt.

En streng til et MySql kald sammensættes på næsten samme måde, blot kan man af en  eller anden grund ikke sætte koden sammen på helt samme måde. MySql kan åbenbart ikke lide [ & ]. Derfor gør jeg det at jeg laver en variabel - som regel med samme navn - som jeg i stedet bruger.


Eksempel: Jeg skal lave et MySql kald der skal indeholde en variabel der har værdien "bananer".:
...FROM kunst WHERE kategori = "bananer"

Da bananer kommer fra en linkvariabel kaldet $kategori, er koden:
...FROM kunst WHERE kategori = \"$_GET["kategori"]\"

Det forstår MySql bare ikke. Derfor:
$kategori = $_GET['kategori'];
...FROM kunst WHERE kategori = \"$kategori\"

Da sætningen skal i gåseøjne, bliver det:
"...FROM kunst WHERE kategori = \"$kategori\""
Backslashene (\) er for at MySql skal opfatte gåseøjne med et backslash foran sig som et gåseøje, og ikke som start- eller slutsignalet i en streng.

Jeg skal ikke kunne sige om der rent faktisk findes en metode som virker.

Den måde som kodekeksemplet du har fundet bruger, bryder jeg mig ikke om.
Jeg foretrækker f.eks tuborgklammer i IF-lykker
IF ($a=1) {
  echo "Ja";
}

... frem for
IF ($a=1) echo "Ja";

På mine webhoteller duer følgende ikke. Det giver ingen fejl. men heller ingen værdi:
echo "Din pris er " . $kunstinfo[pris] . " kr.";
som vil skrive:
Din pris er kr.

Hvorimod:
echo "Din pris er " . $kunstinfo["pris"] . " kr.";
vil skrive:
Din pris er 125 kr

... såfremt $kunstinfo["pris"] er 125. Det er åbenbart afhængig af hvordan PHP er installeret på serveren. Jeg har i hvertfald erfaret at jeg lige så godt kan skrive koden fuldt ud, fremfor at bruge de "sparetricks" man nogle steder kan benytte sig af.

Prøv i øvrigt følgende kode i en php fil:

<body>
<?php
// Begge metoder gælder lige godt. Man skal bare bibeholde, hvad man i en kodelinie er startet med.
$V = '366';
$V = "266"; // Gyldig, og ophæver derfor forrige værdi
//$V = "266'; // vil give fejl hvis koden køres

echo "Du er besøgende nr. " . $V . " i dag.<br>";
echo "Du er besøgende nr. ' . $V . ' i dag.<br>";
echo 'Du er besøgende nr. ' . $V . ' i dag.<br>';

echo 'Du er besøgende nr. ' . $_GET[id] . ' i dag.<br>'; // henter ikke altid en værdi
echo 'Du er besøgende nr. ' . $_GET["id"] . ' i dag.<br>'; // skriver værdien id, hvis du i slutningen af dit link har angivet ?id=tusinde, ?id=1000, eller hvadsomhelst
?>
<br><br>
Indsætning af php variabel i html-kode
<br><br>
Du er besøgende nr. <?php echo $V; ?> i dag.<br>
Du er besøgende nr. <?= $V; ?> i dag.<br>
Begge virker lige godt!
</body>
Avatar billede gider_ikke_mere Nybegynder
15. juni 2007 - 15:34 #33
Med hensyn til forrige og næste.
Hvis der nu står følgende på din htmlside:

forrige 5 6 7 8 9 10 næste

... og billede 8 vises. Hvad skal forrige og næste så vise? Billede 7 hhv. 9? Eller 4 hhv. 11? Eller skal der blot rykkes x antal billeder frem og tilbage?
I mine øjne ville det logiske være 7 hhv. 9. Jeg medtog det ikke, da det giver vidt forskellig kodning. Derfor ville jeg lige være sikker.
Avatar billede kren1000 Nybegynder
15. juni 2007 - 16:04 #34
Mange tak for en super forklaring, den bliver gemt og gransket, kan helt sikekrt lære noget:)

Det var et godt spørgsmål, men jeg tror du har ret i at det vil være mest logisk med 7 og ni.
Avatar billede gider_ikke_mere Nybegynder
16. juni 2007 - 09:53 #35
Så er der kommet forrige- og næste link på. Og siden er w3 valid.

<body>

<?php

$kategori = $_GET['kategori'];
$id = $_GET['id'];

/* Antallet af poster der må være på hver side af det viste billede */
    $pr_side = 2; // værdien må gerne sættes til 0. Så vises kun forrige | aktuelt billede | næste
   
/* Vi tæller antallet af poster i tabellen husk at ændre ‘table’ til dit eget tabelnavn */

    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM kunst WHERE kategori = \"$kategori\""),0) or die(mysql_error());

/* Vi laver et database udtræk med limit, så den kun hiver det rigtige antal ud fra tabellen, husk at ændre ‘table’ til dit eget tabelnavn */
    $result = "<table width='650' border='1'>\n";

    $kategori = $_GET['kategori'];
    $kunstquery = mysql_query("SELECT * FROM kunst WHERE kategori = \"$kategori\" ORDER BY id ASC ");
while($kunstinfo = mysql_fetch_array($kunstquery)) {
    $page++;
    IF($kunstinfo["id"] == $id) { // Vi leder efter det billede der skal vises
        IF (isset($gemforrige)) { // Hvis der har været en forrige, gemmer vi denne som et link
            $temp = "<a href='$_SERVER[PHP_SELF]?kategori=".$_GET['kategori']."&nbsp;id=".$gemforrige."'>Forrige</a>&nbsp;";
        }
        $gemnæste = true; // Næste gang lykken kører, skal der gemmes et "Næste"- link
       
        $result .= " <tr>\n";
        $result .= "  <td><img src=\"admin/".$kunstinfo["thumbnail"]."\" style=\"border-color:#353647\" alt=\"\"><br>".$kunstinfo["pris"]."\n";
        $result .= "  ".$kunstinfo["tekst"]."\n  </td>\n";
        $links[] .= chr(10).' '.$page; // Opbygger arrayet.
        $vistbillede = $page; // Gemmer hvor i arrayet vi henter billedet
    } else {
        $links[] .= "\n <a href='$_SERVER[PHP_SELF]?kategori=".$_GET['kategori']."&nbsp;id=".$kunstinfo['id']."'>".$page."</a>&nbsp;"; // Opbygger arrayet
        if (isset($gemnæste)) {
            $næste="\n <a href='$_SERVER[PHP_SELF]?kategori=".$_GET['kategori']."&nbsp;id=".$kunstinfo['id']."'>N&aelig;ste</a>&nbsp;"; // Gemmer "næste" link
            unset($gemnæste); // sletter variablen, så der ikke bliver lavet flere "Næste"-links
        }
    }
    $gemforrige = $kunstinfo["id"]; // Gemmer id fra forrige
}
$result .= " </tr>\n</table>\n\n"; // Afslut tabellen
print $result; // Vis billedet

// viser links til de 2 forrige billeder samt de 2 næste
for ($start = 0; $start < $page; $start ++) {
    IF ($start >= $vistbillede-$pr_side-1 AND $start < $vistbillede+$pr_side) {
        $temp .= $links[$start]; // Laver alle linkene
    }
}
$temp .= $næste; // Vi afslutter med at sætte et "Næste"- link på
$temp = '<span class="email">'.$temp; // ... og et span
$temp .= chr(10).'</span>'; // ... og et slut span
echo $temp;
?>

</body>
Avatar billede kren1000 Nybegynder
16. juni 2007 - 20:39 #36
Tusind tak, det er fornemt:)
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