Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: BLOB MySQL PHP
Forum PHP.pl > Forum > PHP
jackow
Witam,
Znalazłem wiele tutoriali odnośnie tego zagadnienia. Jednak nawet kiedy używam kodów z tutoriali nie działają one u mnie poprawnie (?!).
Upload działa poprawnie. Plik znajduje się w bazie. Następnie gdy próbuję go wyciągnąć zaczyna się zabawa:
FF wyświetla mi jedynie link (którego nigdzie w kodzie nie wyświetlam)
Chrome chce wyświetlić obrazek, ale jakby nie wiedział strumienia znaków.
Opera również ma pole z obrazkiem, którego nie wyświetla, ale kiedy zapisuję obrazek to na dysku jest zapisany poprawny (czyli dysk->baza->webpage nie działa, dysk->baza->dysk działa).
Pliku wczytuję podając adres w którym wpisuję id zdjęcia które sprawdzam sobie w bazie np. http://localhost/display.php?id=4 (czyli napjrościej jak się da do celów testowych)
Czy ktoś mógłby mi pomóc. Nie wiem gdzie robię błąd w tak prostym kodzie, a to powoduje wzrost frustracji.

struktura bazy:
CREATE TABLE IF NOT EXISTS `avatars` (
`avatar_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`image_type` varchar(11) CHARACTER SET utf8 NOT NULL,
`avatar_data` mediumblob NOT NULL,
PRIMARY KEY (`avatar_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;

mam prosty formularz w pliku blob.php:
CODE

<head>
<title>blob</title>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<meta http-equiv="Content-Language" content="pl" />
</head>

<body>
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<input type="file" name="imgfile">
<input type=submit value="Dodaj">
</form>
</body>


upload.php
CODE

<?php
require_once('CDatabase.php');
$connection = CDatabase::connect();

try{
if($_FILES['imgfile']['size'] <= 0)
throw new Exception ("Plik nie został załadowany");

$tmpName = $_FILES['imgfile']['tmp_name'];
$fp = fopen($tmpName, 'r');
$imgContent = fread($fp, filesize($tmpName));
$imgContent = addslashes($imgContent);
fclose($fp);

$fileType = $_FILES['imgfile']['type'];

$query = $connection->query("insert into avatars values(NULL, '$fileType', '$imgContent')");
if (!$query)
throw new Exception("Zapytanie nie powiodło się");

} catch (Exception $e){
echo $e->getMessage();
exit(); }

mysqli_close($connection);
?>


oraz display.php
CODE

<?php

require_once('CDatabase.php');
$connection = CDatabase::connect();

try {
$id = $_GET['id'];

$query = $connection->query("SELECT image_type, avatar_data FROM avatars WHERE avatar_id = '$id'");
if (!$query)
throw new Exception("Zapytanie nie powiodło się");

$temp = $query->fetch_assoc();
$type = $temp['image_type'];
header("Content-type: $type");
echo $temp['avatar_data'];

} catch (Exception $e){
echo $e->getMessage();
exit();
}

mysqli_close($connection);
?>


kiler129
Może przewrotnie - po co chcesz trzymać avatary w bazie?
Ja wiem, że są małe ale dla każdego usera musisz wyciągać avatar więc dodajesz pracy serwerowi. Lepiej użyć mechanizmów które są do tego przeznaczone czyli url do normalnego pliku ;]
jackow
piszę portal na zaliczenie.
Jednym z wymagań jest to, aby wszystkie grafiki były zapisane w BLOBie.
Oczywiście, że gdyby nie ten wymóg to zrobiłbym to na url-ach.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.