|
|
|
| Есть простая табличка , поле content обозначенно типом longblob
CREATE TABLE IF NOT EXISTS `images` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`content` longblob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;
|
Также есть форма и обработчик который посылает картинку в базу.
<form enctype="multipart/form-data" method="post" action="putimage.php">
Изображение: <input type="file" name="image" />
<input type="submit" value="Загрузить" />
</form>
|
Код обработчика putimage.php
<?php
// Проверяем пришел ли файл
if( !empty( $_FILES['image']['name'] ) ) {
// Проверяем, что при загрузке не произошло ошибок
if ( $_FILES['image']['error'] == 0 ) {
// Если файл загружен успешно, то проверяем - графический ли он
if( substr($_FILES['image']['type'], 0, 5)=='image' ) {
// Читаем содержимое файла
$image = file_get_contents( $_FILES['image']['tmp_name'] );
// Экранируем специальные символы в содержимом файла
$image = mysql_escape_string( $image );
// Формируем запрос на добавление файла в базу данных
$query="INSERT INTO `images` VALUES(NULL, '".$image."')";
// После чего остается только выполнить данный запрос к базе данных
mysql_query( $query );
}
}
}
?>
|
На этом месте картинка заносится в базу, причем в базе в поле content - написано следующее: [BLOB - 390B]
|
Ну и сам файл вывода:
<?php
if ( isset( $_GET['id'] ) ) {
// Здесь $id номер изображения
$id = (int)$_GET['id'];
if ( $id > 0 ) {
$query = "SELECT `content` FROM `images` WHERE `id`=".$id;
// Выполняем запрос и получаем файл
$res = mysql_query($query);
if ( mysql_num_rows( $res ) == 1 ) {
$image = mysql_fetch_array($res);
// Отсылаем браузеру заголовок, сообщающий о том, что сейчас будет передаваться файл изображения
header("Content-type: image/*");
// И передаем сам файл
echo $image['content'];
}
}
}
?>
|
При выводе картинки , например ../../image.php?id=1 , вместо картники выводятся
каракули типа :
GIF89aE� �і��ллжЮЮЫ!%u«
|
И выдает обшибку в 25 строке, хотя там указанно, что выводить нужно изображение
header("Content-type: image/*");
|
| |
|
|
|
|
|
|
|
для: kronck
(01.10.2010 в 11:20)
| | Делайте проще! В БД вместо `content` longblob NOT NULL, ставите например `content` varchar(50) NOT NULL,
Создаете папку где у вас будут находиться картинки - images и вставляете туда картинки. В БД в поле content пишите название картинки например sdfdsf.jpg которая имееться в выше указаной папке.
Пишите это:
$result=mysql_query('select * from название_таблицы');
if(mysql_num_rows($result)) { // выводим таблицу
echo "<td valign='right width='12%' height='15px' align='center' bgcolor=#FFFFFF>картинка</td>
while($row = mysql_fetch_assoc($result)) {
echo "</tr>";
echo "<tr>";
echo '<td width=5% align=left bgcolor=#FFFFFF height=5px><img src="images/' . $row['content'] .'" width=75px height=75px></td>';
|
И ВСЕ! | |
|
|
|
|
|
|
|
для: RuslanMRP
(01.10.2010 в 11:49)
| | Не знаю, что то у меня php матом ругается
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
| .
Сперва хотел сделать , что бы картинки хранились допустим в файле на сервере, но встатала проблема вывода этой картинки из папки.
Теперь же хотел сделать место для хранения картинок БД (хоть и понимаю что это плохая затея) и собвственно вывод, опять epic fail :) | |
|
|
|
|
|
|
|
для: kronck
(01.10.2010 в 11:20)
| | А вот возьмут и подделают тип передаваемый, и закачаете вы в свою базу не изображение, а мусор, что тогда?
Да и не стоит хранить в базе изображения, как вам уже сказали, это слишком накладно.
Ошибка при передаче заголовка потому, что значит уже был вывод в браузер. | |
|
|
|
|
|
|
|
для: sim5
(01.10.2010 в 12:06)
| | В БД будет храниться лишь название картинок. | |
|
|
|
|
|
|
|
для: RuslanMRP
(01.10.2010 в 12:10)
| | перепробовал все только мог
Текстовые импуты заносятся в базу, файловые импуты тоже летят в базу (название картинок).
Суть в том , что пользователь допустим в текстовые импуты заносит информацию и загружает картинку, название картинки летит в бд, а сам файл летит в папку -->
Далее, мы выводим эту информацию из бд (она выводится) и пытаемся вывести картинку (вот тут сложности).
Так как не могу понять как картинку прицепить к id пользователя. Помогите балбесу :) | |
|
|
|
|
|
|
|
для: kronck
(02.10.2010 в 07:39)
| | Никакие инпуты никуда не летают.
Первое - вы не можете гарантировать, что пользователи А и В не назовут свое изображение одним и тем же именем, поэтому сохранять изображение в каталоге нужно только под сформированным скриптом уникальным именем, и сохранять это имя в базу только в том случае, если сохранение файла произошло успешно. Кроме этого в базе полезно держать и такую информацию об изображении, как его размеры для помещения ее в тег IMG. Реальное же имя картинки можно сохранять в базу только лишь для того, чтобы, например, сделать подпись под выводимым изображением, а обращение к нему по уникальному имени. Сам путь изображения в базе держать можно, если все жестко привязано к одному каталогу, но если это не так, то пути лучше держать в файле/таблице конфигурации.
Запись в базе для некоего пользователя - это во-первых его уникальный id, а далее все что он помещает в базу - текст, загруженное изображение и т.п., поэтому "привязки" при выводе к id никакой не требуется. Запрашивается запись конкретного id, выводите все что есть, включая:
<img src="path/name_img.ext" параметры размеров из базы и другое>,
если только изображение было успешно загружено, и поле имени изображения в базе не пустое. Если же "привязка", это указать в ссылке id пользователя как параметр, то при выводе записи вы знаете этот id, "привязывайте", какие могут быть проблемы.
Я вам ранее в вашей теме указывал на самое больное место в ваших скриптах - это отсутствие логики диалога между сервером и клиентом. Вы гордо промолчали, и это не так и страшно, плохо то, что до сих пор вы об этом упорно не хотите думать, отсюда и проблемы ваши. Запомните раз и навсегда - все, буквально все делается по принципу от общего к частному, вы же пытаетесь делать все наоборот, застряв в деталях, которые, кстати, зачастую выполняете неверно, от чего весь процесс в общем у вас и не работает.
Было бы хорошо, если я ошибаюсь, но пока не похоже. | |
|
|
|
|
|
|
|
для: sim5
(02.10.2010 в 08:30)
| | Чтоб не плодить сущности, почитайте вот эту тему http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=76192&page=1, возможно в ней будет решение Вашей проблемы. | |
|
|
|
|
|
|
|
для: gghh
(02.10.2010 в 14:42)
| | Спасибо, но у меня нет проблем. | |
|
|
|
|
|
|
|
для: sim5
(02.10.2010 в 14:47)
| | Извините, я по ошибке ответил не автору, а Вам. | |
|
|
|