Заголовок сообщения: image in MySQL Добавлено: 16 Ноябрь 2004, 07:43:43
Если кто знает как картинку записать в базу данных, а затем показать please. Сейчас пишу так:
$upload=addslashes($picture);
$strSQL="INSERT INTO test (picture) VALUES('$upload');
$picture - имя инпут файл в форме с enctype="multipart/form-data"
поле picture - BLOB
Пытаюсь получить:
$res=mysql_query("SELECT picture FROM test");
$image=mysql_result($res, 0, "picture");
header("Content-type: image/gif");
echo $image;
Выдает название временного файла с сервера, какое по видиму и записывает.
1. Предполагается, что мы должны телепатически догадаться, что у тебя лежит в $picture?
2. Нахрена ты кладешь картинку в базу?
_________________ We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
1.В $picture файл jpg or gif.
2.Там можно сохранять бинарные данные. Теперь так он в базу вроде пишется
$upload=implode("",file($picture));
Но читается все равно целая поэма символов.
0 Сообщения: 478 Зарегистрирован: 25.11.02 Откуда: Україна (файне місто Луцьк)
Добавлено: 16 Ноябрь 2004, 09:21:44
хм... а не проще картинку сохранить у себя на сервере, а в базу записать только имя картинки, не временное имя, а имя уже сохраненной картинки. Ведь сохраняя в базу всю картинку, ты ее (базу) можешь роздуть до непотребных размеров...хм...не понимаю...
Сдается мне, что ты гонишь. Как именно туда попадает "файл jpg or gif"? Код в студию!
Цитата:
2.Там можно сохранять бинарные данные.
Я не спрашивал, МОЖНО ли хранить в базе двоичные данные. Я спросил НАХРЕНА.
Цитата:
Теперь так он в базу вроде пишется $upload=implode("",file($picture));
О! А вот и код. Почитаем... Точно! Сбрехал. Ты же только что рассказывал сказку, что в $picture у тебя лежит ФАЙЛ. А из этого фрагмента кода видно, что там ИМЯ файла.
Цитата:
Но читается все равно целая поэма символов.
Поскольку ты сказал браузеру, что это текст -- он и вывел как текст. Хочешь, чтобы браузер вывел как картинку -- скажи ему ПРАВДУ, а не как обычно. И выведет он тебе как картинку.
Я так понимаю, следующим вопросом будет "как сказать браузеру, что это картинка?". Ответ: "выдать в заголовке правильный Content-type". Что такое Content-type, какие они бывают и как их выдавать -- расскажет google.
adebt Обычно сохраняю на диске. В случае что хостер не дает сохранять на диске, хочу написать вариант с базой.
Crazy Я в курсе насчет Content-type. Дело в том, что ты не выводишь обычно только картинку, идет еще хтмл, потому оно давало мусор. Теперь я в отдельный файл беру картинку и потом через img src="этот файл" ее получаю. Сейчас нормально работает и именно в такой форме $upload=implode("",file($picture)); файл получаю на сервере где $picture - имя инпута файл. Google оно конечно хорошо, просто вижу форум, люди на нем вроде отзывчивые, решил спросить. Спасибо.
0 Сообщения: 516 Зарегистрирован: 21.06.03 Откуда: Москва
Добавлено: 16 Ноябрь 2004, 11:55:51
Vadim,
Цитата:
В случае что хостер не дает сохранять на диске, хочу написать вариант с базой.
После сабмита файл сохраняется в TMP директории. Но если хостер не дает сохранять на диске, тем более он не дасть писать в TMP. (личный опыт). Хостер просто upload отключает вообще.
Цитата:
$upload=implode("",file($picture));
это вообще белеберда!!!
Хранение файлов в базе данных mySQL
Если Вы собрались хранить загружаемы файлы в базе данных, Вам необходимо помнить следующие моменты:
Необходимо использовать поле типа BLOB
Перед тем, как класть в базу, не забыть применить к строке mysql_escape_string
При отображении файла необходимо указывать заголовок content/type
Помните, что скрипт отображающий ваш HTML никак не связан со скриптом, который должен выводить изображение. Это должны быть два различные приложения.
Полезно иногда бывает делать base64_encode() при сохранении и base64_decode() при выдаче картинки. Также, если все делать по уму, нужно в той же базе в той же записи сохранять еще и тип картинки (jpg/gif/png).
По опыту — картинки лучше на жестком диске хранить. Ибо база распухает до неприличных размеров, и всё тормозит.
_________________ все приборы врут, все, кто с нами, умрут, кольцевые дороги никуда не ведут
CutCopyPaste Это нормально записывает, я ее взял из какого-то примера когда искал решение, можете проверить.
$upload=implode("",file($picture));
$upload=addslashes($upload);
Вообще сохраняя картинку я записываю в базу ее расширение, а сохраняю как id+"."+ext, просто когда чего-то делаешь всегда чего-то находишь.
triptyl Попробовал с base64_encode, тоже идет, но увеличивает размер файла.
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.