webForumDet fria alternativet

Får inte ut bild ur databas

PHPur PHP

6 svar · 647 visningar · startad av Thistel

ThistelMedlem sedan aug. 200470 inlägg
#1

Håller på med min första php sida. Jag skall lista upp produkter ur en databas baserad på flera tabeller. Jag får ut listan fint men bilderna får jag inte ut. Jag får fram url:en som ligger i databasen men jag vill ju att det skall vara en bild. Provade en lösning med att läga in bilden i ett blob fält och då funkade det men jag vill inte ha bilderna sparade i databasen. Någon vänlig själ som vill hjälpa mig?
Bifogar kod.

<?
$länk = @mysql_connect("localhost", "root")
or die ("Kunde inte ansluta! Är MySQL igång?");
$databas = mysql_select_db("swaf");
$sql = 'SELECT `tbl_37`.`Serial` , `tbl_colors`.`Colors` , `tbl_37_version`.`Version` , `tbl_37`.`In service` , `tbl_37`.`Withdrawn from use` , `tbl_unit`.`Unit` , `tbl_37`.`Latest code` , `tbl_37`.`Previous codes` , `tbl_status`.`Status` , `tbl_37`.`Note` , `tbl_37_picture`.`Picture` '
        . ' FROM tbl_37, tbl_colors, tbl_37_version, tbl_unit, tbl_status, tbl_37_picture'
        . ' WHERE ( ( `tbl_colors`.`ColorsID` = tbl_37.Colors ) AND ( `tbl_37_version`.`VersionID` = tbl_37.version ) AND ( `tbl_unit`.`UnitID` = tbl_37.unit ) AND ( `tbl_status`.`StatusID` = tbl_37.status ) AND ( `tbl_37_picture`.`Serial` = tbl_37.serial ) )'
        . ' LIMIT 0 , 10';  
$result = mysql_query("$sql");
?>
//Lägger ut rubrikerna
<table class="tableborder" width="100%" cellspacing="0" cellpadding="3">
  <tr class="databastext">
  <td>Serial</td>
  <td>Version</td>
  <td>Colors</td>
  <td>In service</td>
  <td>Withdrawn</td>
  <td>Unit</td>
  <td>Latest code</td>
  <td>Previous codes</td>
  <td>Status</td>
  <td>Notes</td>
  <td>Image</td></tr>
<?

while ($rad = mysql_fetch_array($result)) {
//färgar varanan rad
$bgColor = (++$i & 1) ? '#f6f7f7' : '#C7C7C7';
//presenterar resultatet
echo "<tr bgcolor=\"$bgColor\"><td>".$rad["Serial"]."</td>
<td>".$rad["Version"]."</td>
<td>".$rad["Colors"]."</td>
<td>".$rad["In Service"]."</td>
<td>".$rad["Withdrawn from use"]."</td>
<td>".$rad["Unit"]."</td>
<td>".$rad["Latest code"]."</td>
<td>".$rad["Previous codes"]."</td>
<td>".$rad["Status"]."</td>
<td>".$rad["Note"]."</td>
<td>".$rad[Serial]."</td></tr>";
}
?>
</table>
<?
mysql_close($länk);
?>
MatteMedlem sedan aug. 20002 975 inlägg
#2

Går det inte att göra så här:

<td><img src='".$rad['picture']."'></td></tr>";

Bör fungera om sökvägen till bilden är rätt.

ThistelMedlem sedan aug. 200470 inlägg
#3

Ah nu funkar det..hjärnan hade nog bara tagit ledigt :)
frågan är bara vad som är rätt sökväg för bilden sen.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#4

Tja tja,

Har lite problem med att få ut en bild (MEDIUMBLOB).
Det här är min kod:

if(isset($_GET['avatar']) && is_numeric($_GET['avatar'])){
	$query	= "SELECT "
			 ."user_picture, user_picture_ext "
			 ."FROM school_user "
			 ."WHERE user_id = " . $avatar . " "
			 ."LIMIT 1";

	$result = mysql_query($query) or die((DEBUG ? "<h2>An error occurred</h2>\n<p>" . mysql_error() . "<br />\n" . $query . "</p>\n" : "<p>An error has occurred, please contact site admin.</p>\n"));
	if(!(mysql_num_rows($result) == false)){
		$blob	  = mysql_result($result, 0, 0);
		$file_ext = mysql_result($result, 0, 1);
	}
	mysql_free_result($result);

}else{
	$image	= "pics/noavatar.gif";
	$blob	= file_get_contents($image);

	list($width, $height, $type, $attr) = getimagesize($image);
	$file_ext = $type;
}

header('Content-Length: '.strlen($blob));
header("Content-type: image/" . $file_ext);
echo $blob;

Det som händer är att filnamnet (ajax.loadpicture.php?avatar=1581) skrivs ut i webbläsaren och inte bilden.

Vad kan vara fel?

yellesMedlem sedan sep. 200813 inlägg
#5

Du skriver aldrig ut någon bild utan endast $blod som i sig är
$blob = file_get_contents($image);

Du får mha IDet, i detta fall 1581 skriva fram vilken användare den tillhör och på så sätt lokalisera bilden...

MickeA.comMedlem sedan feb. 20034 441 inlägg
#6

yelles skrev:

Du skriver aldrig ut någon bild utan endast $blod som i sig är
$blob = file_get_contents($image);

Du får mha IDet, i detta fall 1581 skriva fram vilken användare den tillhör och på så sätt lokalisera bilden...

Hmm, jag är inte med på hur du menar alls faktiskt.
Jag kör:

<img src="ajax.loadimage.php?avatar=1581" alt="image" />

och inget alls skrivs ut, förutom alt texten.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#7

Nu upptäckte jag precis att det är uppladdningen som strular. Går jag in på användaren i phpMyAdmin och laddar upp bilden visas den schysst.

Såhär ser koden ut som sparar bilden:

if(isset($_FILES['user_picture']['name']) && strlen(trim($_FILES['user_picture']['name'])) > 0){
	if(!in_array($_FILES['user_picture']['type'], $valid_picture)){
		$error[] = "Tillåtna bildformat är JPG, GIF, PNG och BMP";
	}

	list($width, $height, $type, $attr) = getimagesize($_FILES['user_picture']['tmp_name']);
	if($width > 110 || $height > 120){
		$error[] = "Bilden får inte vara större än 110px bred och 120px hög";
	}

	[b]$user_picture = file_get_contents($_FILES['user_picture']['tmp_name']);
	$user_picture = mysql_real_escape_string($user_picture);[/b]

	@list(, , $imtype, ) = getimagesize($_FILES['user_picture']['tmp_name']);
	if($imtype == 3){
		$user_picture_ext = "png";
	}elseif ($imtype == 2){
		$user_picture_ext = "jpeg";
	}elseif ($imtype == 1){
		$user_picture_ext = "gif";
	}
	$user_upload_picture = "user_picture = '" . $user_picture . "', "
   			      ."user_picture_ext = '" . $user_picture_ext . "', ";
}

if(sizeof($error) <= 0){
	$query = "UPDATE school_user SET "
		."user_firstname = '" . $user_firstname . "', "
		."user_lastname = '" . $user_lastname . "', "
		."user_gender = " . $user_gender . ", "
		.$user_upload_picture
		."user_allow_pics = " . $user_allow_pics . " "
		."WHERE user_id = " . $session->get("userid") . " "
		."LIMIT 1";

	mysql_query($query) or die((DEBUG ? "<h2>An error occurred</h2>\n<p>" . mysql_error() . "<br />\n" . $query . "</p>\n" : "<p>An error has occurred, please contact site admin.</p>\n"));
	if(!(mysql_affected_rows() == -1)){
		$_onload = " alert('Dina inställningar sparades!\\n');";
	}else{
		$error[] = "Ett fel uppstod och dina inställningar kunde inte sparas.";
	}
}

Något är fel där, men vad?
Jag har kollat på diverse exempel och jag tycker jag gjort allt rätt, men något i ovanstående kod bör vara fel.

Tacksam för alla tips jag kan få!

264 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
134 ms — hämta forumlista (db)
126 ms — hämta statistik (db)
125 ms — hämta tråd, inlägg och bilagor (db)