Avatar billede axel21 Juniormester
27. oktober 2008 - 00:26 Der er 17 kommentarer og
2 løsninger

PHP billed skal ikke vises

Hej, jeg henter billeder fra min database, men når der ikke er gemt et billed viser den bare en tom ramme med et rødt kryds inden i, kan dette ikke fjernes så når der ikke er et billed tilgængeligt, så vises der ikke noget?:


billedside.php

echo '<img src="logo.php?logo='.$row['id'].'" height="40" width="236">';



logo.php

<?php
if(is_numeric($_GET['logo']))
{
    $id = intval($_GET['logo']);
    require_once('./../connect.php');
    $query = mysql_query("SELECT logo FROM kopitest WHERE id = '$id'");
    if(mysql_num_rows($query) == 1)
    {
        $row = mysql_fetch_assoc($query);
        header('Content-type: image/jpeg');
        echo $row['logo'];
    }
}
?>
Avatar billede fant0mas Nybegynder
27. oktober 2008 - 07:33 #1
http://dk2.php.net/file_exists
<?php
$filename = '/path/to/foo.txt';

if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
    echo "The file $filename does not exist";
}
?>
Avatar billede jakobdo Ekspert
27. oktober 2008 - 08:57 #2
Hvis dit billede er gemt i databasen, burde du kunne lave et tjek, om $row['logo'] indeholder noget, hvis ikke, så kunne du jo vise: BILLEDET FINDES IKKE (altså som et billede eller noget)
Avatar billede jensgram Nybegynder
27. oktober 2008 - 09:04 #3
Ja, der er vel to tilgange (hvor jeg læser det som om du er ude efter den første):

1) billedside.php bør tjekke, om der i DB findes et logo for ID - hvis ikke, skal
echo '<img src="logo.php?logo='.$row['id'].'" height="40" width="236">';
ignoreres.

2) logo.php kan generere (eller, mere optimalt; returnere et forudgenereret) et billede a lá "intet billede"...
Avatar billede axel21 Juniormester
27. oktober 2008 - 19:05 #4
Tak for de fine forslag.

Burde dette ikke virke? For det gør det ikke.....


if (file_exists($row[logo])) {
        echo '<img src="logo.php?logo='.$row['id'].'" height="40" width="236">';
}
Avatar billede jensgram Nybegynder
27. oktober 2008 - 19:28 #5
Hmmm - jo, hvis $row['logo'] er en komplet eller relativ sti til en billed-FIL. Jeg læser imidlertid dit eksempel derhen, at billederne opbevares _i_ databasen. Og så holder den naturligvis ikke.
Avatar billede axel21 Juniormester
27. oktober 2008 - 22:33 #6
Det har du helt ret i, men så er jeg da helt på gale spor, få billederne opbevares i databasen
Avatar billede axel21 Juniormester
27. oktober 2008 - 23:14 #7
har prøvet denne, men vil heller ikke, nogen der kan hjælpe?

if (filesize($row[logo]) >=  1)
        {
        echo '<img src="logo.php?logo='.$row['id'].'" height="40" width="236">';
        }
else    {
        echo 'Intet billede';
        }
Avatar billede fant0mas Nybegynder
27. oktober 2008 - 23:37 #8
$filename = '/path/to/foo.txt';

Husk komplet sti som sagt før.
Avatar billede jakobdo Ekspert
28. oktober 2008 - 06:59 #9
fant0mas: Der er ikke tale om en sti, men billedet er gemt som en blob i databasen.
Kunne du måske ikke lave noget ala:

<?php
if(is_numeric($_GET['logo']))
{
    $id = intval($_GET['logo']);
    require_once('./../connect.php');
    $query = mysql_query("SELECT logo FROM kopitest WHERE id = '$id'");
    if(mysql_num_rows($query) == 1)
    {
        header('Content-type: image/jpeg');
        $row = mysql_fetch_assoc($query);
        if(strlen($row['logo'])>0){
                    echo $row['logo'];
                }else{
                    $im = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
                    $text_color = imagecolorallocate($im, 233, 14, 91);
                    imagestring($im, 1, 5, 5,  'Intet billede', $text_color);
                    imagejpeg($im);
                    imagedestroy($im);
                }
    }
}
?>
Avatar billede axel21 Juniormester
31. oktober 2008 - 18:23 #10
Hej igen, kan ikke få det til at virke, den viser stadig en kasse med et rødt kryds i må gøre noget forkert, nogle forslag???

MIN BILLEDSIDE.PHP

echo '<img src="logo.php?logo='.$row['id'].'">';



MIN LOGO.PHP

<?php
if(is_numeric($_GET['logo']))
{
    $id = intval($_GET['logo']);
    require_once('./../connect.php');
    $query = mysql_query("SELECT logo FROM kopitest WHERE id = '$id'");
    if(mysql_num_rows($query) == 1)
    {
        $row = mysql_fetch_assoc($query);
        header('Content-type: image/jpeg');
        echo $row['logo'];
    }
        else{
        $im = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
                    $text_color = imagecolorallocate($im, 233, 14, 91);
                    imagestring($im, 1, 5, 5,  'Intet billede', $text_color);
                    imagejpeg($im);
                    imagedestroy($im);

}
}
?>
Avatar billede jakobdo Ekspert
31. oktober 2008 - 19:13 #11
Test lige:

<?php
if(isset($_GET['logo']) && is_numeric($_GET['logo'])){
    $id = intval($_GET['logo']);
    require_once('./../connect.php');
    $query = mysql_query("SELECT logo FROM kopitest WHERE id = '$id' LIMIT 1");
    if(mysql_num_rows($query) == 1){
        $row = mysql_fetch_assoc($query);
        header('Content-type: image/jpeg');
        echo $row['logo'];
    }else{
        header('Content-type: image/jpeg');
        $im = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
        $text_color = imagecolorallocate($im, 233, 14, 91);
        imagestring($im, 1, 5, 5,  'Intet billede', $text_color);
        imagejpeg($im);
        imagedestroy($im);
    }
}
?>
Avatar billede axel21 Juniormester
31. oktober 2008 - 19:52 #12
samme problem...
Avatar billede jakobdo Ekspert
31. oktober 2008 - 20:17 #13
Prøv så at ret:

header('Content-type: image/jpeg');
til:
header('Content-type: text/html');
(begge steder)

Og kald så:

logo.php?id=(samme id som ikke virker)
Avatar billede axel21 Juniormester
31. oktober 2008 - 20:29 #14
Er ked af at sige det, det funker bare ikke... Hvad kan der mon være galt.?
Avatar billede jakobdo Ekspert
31. oktober 2008 - 20:39 #15
Og der kommer slet ingen fejl eller noget ?

Smid lige denne fil på en server og smid et link til filen herind:

<?php
if(isset($_GET['logo']) && is_numeric($_GET['logo'])){
    $id = intval($_GET['logo']);
    require_once('./../connect.php');
    $query = mysql_query("SELECT logo FROM kopitest WHERE id = '$id' LIMIT 1") or die(mysql_error());
    if(mysql_num_rows($query) == 1){
        $row = mysql_fetch_assoc($query);
        header('Content-type: text/html');
        echo $row['logo'];
    }else{
        header('Content-type: text/html');
        $im = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
        $text_color = imagecolorallocate($im, 233, 14, 91);
        imagestring($im, 1, 5, 5,  'Intet billede', $text_color);
        imagejpeg($im);
        imagedestroy($im);
    }
}else{
    echo 'FEJL : ID ikke sat';
}
?>

Det kan ikke passe det ikke virker eller i de mindste smider en fejl.
Avatar billede jakobdo Ekspert
31. oktober 2008 - 21:16 #16
Problemet er fundet og løst.
Tomme blob's bliver stadig fundet og derfor fejler visningen.
Løsningen blev at lave:
$query = mysql_query("SELECT logo FROM kopitest WHERE id = '$id' AND LENGTH(logo) > 10 LIMIT 1") or die(mysql_error());

Det virker ihf.
Avatar billede jakobdo Ekspert
31. oktober 2008 - 21:16 #17
Og et var!
Avatar billede jakobdo Ekspert
31. oktober 2008 - 21:16 #18
+ s
Avatar billede jakobdo Ekspert
31. oktober 2008 - 21:44 #19
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