webForumDet fria alternativet

Hjälp att skriva ut bild från musql via img tag

PHP

12 svar · 707 visningar · startad av phpNyb

Medlem sedan apr. 201023 inlägg
Frågan#1

Hej,

Jag lagrat bilder i mysql databas via formulär. Det går bra att skriva ut bilder enligt följande:

$q = "SELECT image, image_name, image_type, image_size FROM images WHERE image_id=1";

$r = mysqli_query ($dbc, $q);
if (mysqli_num_rows($r) == 1) {
$row = mysqli_fetch_array ($r, MYSQLI_ASSOC);
mysqli_free_result($r);

header ("Content-Type: {$row['image_type']}\n");
header ("Content-disposition: inline; filename=\"{$row['image_name']}\"\n");
header ("Content-Length: {$row['image_size']}\n");

$bild = $row['image'];
echo $bild;

}

Men jag vill helst använda img tag för att kunna bestämma bredden och höjden på bilden:

<img src="<?php print $bild; ?>" width="100" height="75"/>

Jag får följande error meddelande:Bilden kan inte visas

Är det någon som kan hjälpa mig?
Tack i för hand!

phpNyb

Medlem sedan jan. 2005953 inlägg
#2

Du får då anropa ett php-script som skriver ut bildkoden i <img>-taggen.

Typ så här:

<img src="bild.php?id=1" width="100" height="75">

och bild.php:

$q = "SELECT image, image_name, image_type, image_size FROM images WHERE image_id=" . intval($_GET['id']);

$r = mysqli_query ($dbc, $q);
if (mysqli_num_rows($r) == 1) {
$row = mysqli_fetch_array ($r, MYSQLI_ASSOC);
mysqli_free_result($r);

header ("Content-Type: {$row['image_type']}\n");
header ("Content-disposition: inline; filename=\"{$row['image_name']}\"\n");
header ("Content-Length: {$row['image_size']}\n");

$bild = $row['image'];
echo $bild;

}
Medlem sedan apr. 201023 inlägg
#3

Tack för svaret,
Jag får inte den att fungera än, jag får samma fel-meddelande:
Bilden kan inte visas

$q = "SELECT image, image_name, image_type, image_size FROM images WHERE image_id=" . intval(1);

 $r = mysqli_query ($dbc, $q);


 if (mysqli_num_rows($r) == 1) {


 $row = mysqli_fetch_array ($r, MYSQLI_ASSOC);


mysqli_free_result($r);

header ("Content-Type: {$row['image_type']}\n");
header ("Content-disposition: inline; filename=\"{$row['image_name']}\"\n");
header ("Content-Length: {$row['image_size']}\n");

//$bild = $row\['image'\];
//echo $bild;

?\>
\<img src="bild.php?id=1" width="100" height="75"\>
\<?php

 }
Medlem sedan jan. 2005953 inlägg
#4

HTML-koden (<img>) och PHP-koden måste (läs: bör, det går annars också, men blir krångligare) ligga i olika filer.

Alltså, skapa en fil som heter test.html med följande innehåll:

<img src="test.php?id=1" width="100" height="75">

Sedan skapar du en fil som heter test.php med följande innehåll:

<?php
// OBS! Lägg in din kod för att ansluta till MySQL här...
$q = "SELECT image, image_name, image_type, image_size FROM images WHERE image_id=" . intval($_GET['id']);

$r = mysqli_query ($dbc, $q);

if (mysqli_num_rows($r) == 1) {
    $row = mysqli_fetch_array ($r, MYSQLI_ASSOC);
    mysqli_free_result($r);

    header ("Content-Type: {$row['image_type']}\n");
    header ("Content-disposition: inline; filename=\"{$row['image_name']}\"\n");
    header ("Content-Length: {$row['image_size']}\n");

    $bild = $row['image'];
    echo $bild;
}

Och testa :)

Medlem sedan apr. 201023 inlägg
#5

Tusen Tack!

Jag uppskattar högt din skicklighet!
Det fungerar nu när jag skapat en annan html-fil som du sa:
Test.html
<img src="test.php?id=1" width="200" height="175">

Hälsningar
phpNyb

Medlem sedan apr. 201023 inlägg
#6

Sidan blir tom när jag skriver ut bilden från Mysql

Hej igen,

Det går bra att skriva ut bilder enligt koden nedan, men när jag lägger en rad till högst upp ex:
<?php require_once("includes/functions.inc.php"); ?>
<?php
$dbc = @mysqli_connect('localhost', 'an', 'ln', 'db')
or die ('Could not connect to MySQL: ' . mysqli_connect_error());... eller inbäddad i en annan sida då kommer det ingen bild.
Är det någon vänlig själ som vet vad är lösningen?
Jag är nybörjare på php!

test.html
<img src="test.php?id=16" width="200" height="175" />

test.php:
<?php
$dbc = @mysqli_connect('localhost', 'an', 'ln', 'db')
or die ('Could not connect to MySQL: ' . mysqli_connect_error());

$q = "SELECT image, image_name, image_type, image_size FROM images WHERE image_id=" . intval($_GET['id']);

$r = mysqli_query ($dbc, $q);
if (mysqli_num_rows($r) == 1) {
$row = mysqli_fetch_array ($r, MYSQLI_ASSOC);
mysqli_free_result($r);
header ("Content-Type: {$row['image_type']}\n");
header ("Content-disposition: inline; filename=\"{$row['image_name']}\"\n");
header ("Content-Length: {$row['image_size']}\n");

echo $row['image'];
}
mysql_close ( $dbc );

?>

Medlem sedan jan. 2005953 inlägg
#7

Felet beror på radbrytningen mellan ?> och <?php på rad 1 och 2. Det skickas nämligen till besökaren som "output" och du kan då inte sätta egna headers. Om du testar att surfa direkt till test.php så ska du - om du har aktiverat visning av felmeddelanden - se ett felmeddelande som säger typ "Warning: Cannot modify header information - headers already sent".

Lösning:
Skriv så här istället

<?php require_once("includes/functions.inc.php");
$dbc = @mysqli_connect('localhost', 'an', 'ln', 'db')

Det finns ingen som helst anledning att hoppa in och ur php-läge i det fallet

Medlem sedan apr. 201023 inlägg
#8

Tack metalboy,

Jag provat med följande men bilden syns inte än!

<?php require_once("includes/functions.inc.php");
$dbc = @mysqli_connect('localhost', 'an', 'ln', 'db')

Tack!

Medlem sedan juni 200032 967 inlägg
#9

Prova att gå till url:en direkt via webbläsarens adress-rad istället för att gå via en <img>-tagg - då kan du se om koden genererar något felmeddelande eller om något oväntat skrivs ut som gör att det inte blir någon bild.

mvh

Medlem sedan apr. 201023 inlägg
#10

Jag har provat direkt via webbläsarens adress-rad, jag får fel-meddelande: Bilden kan inte visas, då den innehåller fel.

Men när jag tar bort raden: (require_once("includes/functions.inc.php"); ) så funkar det. Men jag behöver inbädda koden in i sidan i header, funktioner...

Tack!

Medlem sedan juni 200032 967 inlägg
#11

Men jag behöver inbädda koden in i sidan i header, funktioner...

Vad menar du med det? En bild är en bild.

Medlem sedan jan. 2005953 inlägg
#12

Har du någon form av output i functions.inc.php ? Tänk på att radbrytningar och mellanslag utanför "php-läge" räknas som output.

Du kan också prova att kommentera bort dina headers och se om du får något php-felmeddelande då.

Medlem sedan apr. 201023 inlägg
#13

Tack så mycket! det fungerar

Tack så mycket!!!!

Det är just vad det berodde på, jag hade radbrytningar och mellanslag i functions.inc.php, jag tog bort dem sedan började fungera.

Tack för hjälpen!

272 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)