Avatar billede jsmitx Nybegynder
10. december 2003 - 10:58 Der er 26 kommentarer og
1 løsning

hent billede fra sql database

Jeg har fået oprettet en database hvori jeg opret_billeder.php og billede_vis.php kan oploade og se hvilke billeder jeg har i databasen.

Hvordan får jeg lavet det sådan at jeg på min hjemmeside kun ser ét billede og så have to knapper som får siden til at vise henholdsvis det næste og det forrige billede?
Avatar billede Slettet bruger
10. december 2003 - 11:16 #1
Husk at rette det til, så det passer med dine oplysninger fra databasen.

<?PHP
// husk adgang til databasen

$view = $_GET[view];
if(!$view) {
    $view = 1;
}

$getfirst = mysql_query("select * from tabel ORDER BY id ASC LIMIT 0,1") or die (mysql_error());
$r = mysql_fetch_array($getfirst);
$first = $r[id];

$getlast = mysql_query("select * from tabel ORDER BY id DESC LIMIT 0,1") or die (mysql_error());
$q = mysql_fetch_array($getlast);
$last = $q[id];

$query = mysql_query("SELECT * from tabel WHERE id = '$view'") or die(mysql_error());
$row = mysql_fetch_array($query);
$id = $row[id];
$billede = $row[ditbillede];

if($id < $last) {
    $onemore = $row[id] + 1;
    $next = "<a href=\"?view=$onemore\">Næste billede</a>";
} else {
    $next = "Næste billede";
}

if($id > $first) {
    $oneprev = $row[id] - 1;
    $prev = "<a href=\"?view=$oneprev\">Forrige billede</a>";
} else {
    $prev = "Forrige billede";
}

  echo "
    <img src=\"$billede\" alt=\"\"> <br><br>
    $next | $prev
  ";
?>
Avatar billede jsmitx Nybegynder
10. december 2003 - 11:23 #2
ups glemte lige at nævne at det er ibase sql og ikke mysql jeg bruger.
Men er det ikke nogenlunde det samme der skal stå? Har bare ikke haft held med det LIMIT ;-(
Avatar billede Slettet bruger
10. december 2003 - 11:39 #3
Det har jeg ingen kendskab til.
Avatar billede Slettet bruger
10. december 2003 - 11:45 #4
Så lænde det er en SQL burde det virke. Du skal bare skifte ud med funktionskald til din database i stedet for mysql_query.

Det eneste krav cypermans kode har er, at der ikke er huller i indholdet af ID-kolonnen. Selve SQL-koden er helt standard.
Avatar billede jsmitx Nybegynder
10. december 2003 - 11:47 #5
ok - tak det vil jeg lige prøve så :-)
Avatar billede jsmitx Nybegynder
10. december 2003 - 12:22 #6
Så får jeg nogle fejl.

skyldes det at jeg er et fjols eller er det fordi 'view' og LIMIT er mysql og ikke "standard" sql?

PHP Notice: Use of undefined constant view - assumed 'view' in c:\inetpub\wwwroot\billeder_vis.php on line 51

PHP Notice: Undefined index: view in c:\inetpub\wwwroot\billeder_vis.php on line 51

PHP Warning: ibase_query(): Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 40 LIMIT in c:\inetpub\wwwroot\billeder_vis.php on line 56
Avatar billede Slettet bruger
10. december 2003 - 12:28 #7
Prøv lige at vise din kode...

view er bare en PHP-vaiabel, der bliver brugt til formålet. Den har ikke noget som sådan med databasen at gøre.

Til gengæld bør linien  $view = $_GET[view]; rettes til

$view=$_GET['view'];

Men det er bare en skønhedsfejl.

LIMIT er standard SQL.
Avatar billede sukos Juniormester
10. december 2003 - 12:29 #8
Prøv med

if(!isset($_GET["view"])) {
$view = 1;
}else{
$view = $_GET["view"];
}

i stedet for

$view = $_GET[view];
if(!$view) {
    $view = 1;
}
Avatar billede jsmitx Nybegynder
10. december 2003 - 12:31 #9
<?PHP

include "db.inc";
$view = $_GET['view'];
if(!$view) {
    $view = 1;
}

$getfirst = ibase_query("select * from BILLEDER ORDER BY NR ASC LIMIT 0,1") or die ("virker ikke");
$r = ibase_fetch_array($getfirst);
$first = $r[id];

$getlast = ibase_query("select * from BILLEDER ORDER BY NR DESC LIMIT 0,1") or die ("virker stadig ikke");
$q = ibase_fetch_array($getlast);
$last = $q[id];

$query = ibase_query("SELECT * from BILLEDER WHERE NR = '$view'") or die("stadig ikke");
$row = ibase_fetch_array($query);
$id = $row[nr];
$billede = $row[nr];

if($id < $last) {
    $onemore = $row[id] + 1;
    $next = "<a href=\"?view=$onemore\">Næste billede</a>";
} else {
    $next = "Næste billede";
}

if($id > $first) {
    $oneprev = $row[id] - 1;
    $prev = "<a href=\"?view=$oneprev\">Forrige billede</a>";
} else {
    $prev = "Forrige billede";
}

  echo "
    <img src=\"$billede\" alt=\"\"> <br><br>
    $next | $prev
  ";
?>
Avatar billede jsmitx Nybegynder
10. december 2003 - 12:39 #10
kanon så kom jeg af med 'view' fejlen.

men den brokker sig stadig over LIMIT ??
SQL error code = -104 Token unknown - line 1, char 40 LIMIT in
Avatar billede Slettet bruger
10. december 2003 - 12:54 #11
Det ser virkelig ud til at LIMIT ikke er med i interbase...

Prøv bare at fjerne LIMIT 0,1 i SQL-koden. Den burde virke uden.
Avatar billede jsmitx Nybegynder
10. december 2003 - 13:25 #12
tak det virkede.

Men nu brokker den sig over ibase_fetch_array()...

Tror da vist jeg skal bruge noget andet end ibase..
Avatar billede Slettet bruger
10. december 2003 - 13:31 #13
prøv ibase_fetch_assoc istedet.
Avatar billede jsmitx Nybegynder
10. december 2003 - 13:46 #14
så kom det også til at virke. så har jeg et sidste spørgsmål:

Det der står inde i [] henholdsvis [id] og [nr] er det, i det her tilfælde, kolonnerne i databasen. Som i mit tilfælde ville være navn og nr?
Avatar billede Slettet bruger
10. december 2003 - 14:16 #15
Ja.

Og lige som min første rettelse, som fjernede PHPs NOTICE, skal du skrive kolonnenavnene med gnyffer om.

$row['id'] i stedet for $row[id]
Avatar billede jsmitx Nybegynder
10. december 2003 - 19:37 #16
nu har jeg prøvet på at få det til at virke det meste af dagen uden held. er der nogen der har andre muligheder? eller som evt kan se noget "fejl" i koden?
Avatar billede Slettet bruger
10. december 2003 - 21:37 #17
Hvordan ser din kode ud nu?

Prøv eventuelt at erstatte die("virker ikke"); og de lignende fejlbeskeder med die(ibase_errmsg());
Avatar billede jsmitx Nybegynder
10. december 2003 - 21:43 #18
kan det skyldes at min billede kolonne er en BLOB? Skal det hentes på en anden måde så?
Avatar billede Slettet bruger
10. december 2003 - 21:57 #19
Forstår jeg det korrekt, at det er selve billedet og ikke bare en URL, som ligger i din database?
Avatar billede jsmitx Nybegynder
10. december 2003 - 22:06 #20
Har lige fået af vide at det åbentbart kun er url´en der ligger databasen, og at selve billederne bliver lagt i en mappe med navnet tmp.

jeg ligger det op med:

<?php

include 'db.inc';

if (isset($submit)) {


   
    if (isset ($billedfil))
    {
        print("Server-side filnavn: $billedfil <br>\n");
        print("Client-side filnavn: $billedfil_name <br>\n");
        print("Client side filstørrelse: $billedfil_size <br>\n");
        print("Client-side filtype: $billedfil_type <br>\n");
       
$filnavn = "./tmp/" . $billedfil_name;
        copy ($billedfil, $filnavn)
            or die("Fil IKKE gemt");
           
        print("<h2>Fil gemt som $filnavn!</h2>");
        print("<HR>");
    }

    $dbh = ibase_connect($host, $username, $password)
        or die ("<h2>Database connection ikke etableret</h2>");
    $fil = fopen($filnavn, "r")    
        or die("<h2>Billedfil $filnavn kunne ikke åbnes</h2>");
       
    $trans = ibase_trans();
    $blob_id = ibase_blob_import($fil);
    $sth = ibase_prepare('INSERT INTO BILLEDER 
                          (NR,NAVN,BILLEDE)
                                    VALUES (?,?,?)');
    ibase_execute($sth, $nr ,$navn ,$blob_id)
                or die ("FEJLET i INSERT!!!");
    ibase_commit($trans);
    ibase_free_query($sth);
    ibase_close($dbh);
       

?>
    <h2>Databasen er opdateret</h2>
    <form action="<?php echo $PHP_SELF ?>" method="post">
        <input type="submit" value="En til?" />
        <input type="button" value="Menu"
            onclick="window.location='indsæt.html';" />
        </form>

<?php   
} else {
?>
Avatar billede Slettet bruger
10. december 2003 - 22:34 #21
OK, så ligger selve billedet i databasen.

Så skal du lave et nyt (lille) script til at vise billedet.

Det kunne for eksempel se sådan ud:

<?php

// Her skal du indsætte kode til at åbne databasen.


header("Content-type: image/jpeg");
// hvis billederne ikke er jpg allesammen, skal du også gemme
// filtypen i databasen.

$result=$ibase_query("SELECT billede FROM billeder WHERE nr='{$_GET['nr']}'") or die(ibase_errmsg());
$row=ibase_fetch_assoc($result);

echo $row['billede'];
?>

Gem filen i samme mappe som dit "bladre mellem billeder"-script og kald det viewpic.php
Og dette stykke i dit bladre-script skal laves om til:

GAMMELT:
echo "
    <img src=\"$billede\" alt=\"\"> <br><br>
    $next | $prev
  ";


NYT:
echo "
    <img src=\"viewpic.php?nr=$nr\" alt=\"\"> <br><br>
    $next | $prev
  ";
Avatar billede Slettet bruger
10. december 2003 - 22:37 #22
Ups. Du havde jo hevet nummeret ud i en variabel, der hed $id, så rettelsen skulle være:

NYT:
echo "
    <img src=\"viewpic.php?nr=$id\" alt=\"\"> <br><br>
    $next | $prev
  ";
Avatar billede jsmitx Nybegynder
10. december 2003 - 23:26 #23
jeg får stadig følgende fejl:

PHP Notice: Undefined index: id in c:\inetpub\wwwroot\bamse_og_bjørne\web\datab\billeder_vis_eksperten.php on line 28 PHP Notice: Undefined index: id in c:\inetpub\wwwroot\bamse_og_bjørne\web\datab\billeder_vis_eksperten.php on line 32 PHP Notice: Undefined index: nr in c:\inetpub\wwwroot\bamse_og_bjørne\web\datab\billeder_vis_eksperten.php on line 36 PHP Notice: Undefined index: nr in c:\inetpub\wwwroot\bamse_og_bjørne\web\datab\billeder_vis_eksperten.php on line 37


<?PHP

include "db.inc";

if(!isset($_GET["view"])) {
$view = 1;
}else{
$view = $_GET["view"];
}

$getfirst = ibase_query("select * from BILLEDER ORDER BY NR ASC") or die ("virker ikke");
$r = ibase_fetch_assoc($getfirst);
$first = $r['id'];

$getlast = ibase_query("select * from BILLEDER ORDER BY NR DESC") or die ("virker stadig ikke");
$q = ibase_fetch_assoc($getlast);
$last = $q['id'];

$query = ibase_query("SELECT * from BILLEDER WHERE NR = '$view'") or die("stadig ikke");
$row = ibase_fetch_assoc($query);
$id = $row['nr'];
$billede = $row['nr'];

if($id < $last) {
    $onemore = $row['id'] + 1;
    $next = "<a href=\"?view=$onemore\">Næste billede</a>";
} else {
    $next = "Næste billede";
}

if($id > $first) {
    $oneprev = $row['id'] - 1;
    $prev = "<a href=\"?view=$oneprev\">Forrige billede</a>";
} else {
    $prev = "Forrige billede";
}


  echo "
    <img src=\"viewpic.php?nr=$id\" alt=\"\"> <br><br>
    $next | $prev
  ";
?>


og viewpic.php


<?php

include "db.inc";


header("Content-type: image/jpeg");


$result=$ibase_query("SELECT billede FROM billeder WHERE nr='{$_GET['nr']}'") or die(ibase_errmsg());
$row=ibase_fetch_assoc($result);

echo $row['billede'];
?>
Avatar billede Slettet bruger
11. december 2003 - 08:55 #24
De steder, hvor der står $row['id'] skal du erstatte med $id

Det er derfor $row['nr'] bliver hentet ud i variablen $id lige efter databaseopslaget.
Avatar billede Slettet bruger
11. december 2003 - 08:57 #25
Disse to linier skal også laves om. Der skal stå nr istedetfor id.

$first = $r['id'];
$last = $q['id'];
Avatar billede jsmitx Nybegynder
11. december 2003 - 14:22 #26
Kanon nu får jeg ikke flere fejlmeddelelser, men der kommer stadig ikke noget billede frem. men det må jeg jo lige kigge på.. smid lige et svar så du kan få nogle point.
Avatar billede Slettet bruger
11. december 2003 - 15:26 #27
Du kan prøve at finde nummeret til et billede, du ved er jpg og så åbne det direkte med din browser.
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