2013-12-17 2 views
0

Привет, мои друзья-разработчики кодирования.PHP - Вставить изображение в базу данных

Мне нужна помощь, у меня есть эта проблема. У меня есть эта база данных, и я хочу извлечь эти данные в свой код через JS.

Моя информация базы данных:

create table datadatabase (
id    int(10) not null AUTO_INCREMENT PRIMARY KEY, 
name   varchar(25) not null default '', 
text   longtext(25) not null default '', 
image   blob  not null ); 

И я хочу, данные в этих полях.

<img src="<?php echo $img ?>"/> 
<h3> <?php echo $text.','.$name ?> </h3> 

Но проблема в том, текст & изображение представляет собой слайдер и я хочу retrive новые данные каждый раз, когда есть функция нажмите на кнопку «Далее» & идентификатор должен быть случайным, так что первый слайды могут быть id 99, а следующий слайд может быть 158 и так далее.

$('.Next').click(function(e) { 
e.preventDefault(); 
Slide.appendSlide('<img src"<?php echo $img ?>"/><h3> </h3>') 
}) 

Как я должен подходить к этому? И спасибо вам большое. :)

+4

Вначале вы не должны хранить изображения в своей базе данных. То, что вы должны делать, - это сохранить ваши изображения в каталоге, а затем ссылаться на их имена файлов в базе данных, что позволит вам просто эхом отослать имя файла в атрибут src. – mtanti

+0

Я согласен с @mtanti. Но если вы настроены на это с помощью blobs, вы можете попробовать второй ответ в этом SO http://stackoverflow.com/questions/3259967/sending-displaying-a-base64-encoded-image. Я никогда не пробовал что-то вроде этого поэтому я не даю никаких гарантий относительно того, будет ли это работать, но вы можете дать ему выстрел. – elitechief21

ответ

1

Прежде всего, это не хорошая практика хранения изображений в базах данных, но если вы хотите это сделать, вам нужно создать скрипт, который выводит конкретную ima ge из db (т.е. по идентификатору), а затем выводить необработанные данные с определенным типом контента. (Я также рекомендую вставить тип изображения в одно из полей базы данных).

URL: /image.php?id=5 image.php

<?php 
$id = isset($_GET['id'])?intval($_GET['id']):0; 
$query = mysql_query("SELECT img FROM datadatabase WHERE id = '$id'"); 
$row = mysql_fetch_array($query); 
if($type=="pjpeg") 
$type="jpeg"; // the type could change depending on the database image type 
header("Content-type:$type"); 
echo $row['image']; 
?> 

для других полей, просто прочитать базу данных как обычно. Результат:

<img src="http://..../image.php?id=<?php echo $id ?>"/> 
<h3> <?php echo $text.','.$name ?> </h3> 

$('.Next').click(function(e) { 
e.preventDefault(); 
Slide.appendSlide('<img src"http://..../image.php?id=<?php echo $id?>"/><h3> </h3>') 
}); 

Рекомендуется использовать кэш и изменение размера изображения перед загрузкой, чтобы избежать загрузки сервера.

Есть другие подходы, такие как base64. Я предпочитаю самостоятельно использовать файловую систему с метаданными изображения вместо того, чтобы использовать только базу данных для хранения изображений, чтобы сделать ее масштабируемой.

+0

'intval' - очень плохая альтернатива [правильному экранированию] (http://bobby-tables.com/php).Это также очень плохая форма, чтобы привести примеры с устаревшим «mysql_query», когда 'mysqli' и PDO сложнее. – tadman

+0

Спасибо за советы по изменению размера кеша и изображения, получили какие-либо документы, как это сделать? – user2563959

+0

http://www.w3bees.com/2013/03/resize-image-while-upload-using-php.html – cardeol

-1

insert.php:

$bin_string = file_get_contents($_FILES["file"]["name"]); 
$mysqli->query("INSERT INTO upload(image) VALUES ('" . $bin_string . "')"); 

Retrieve.php ID = 1:

$result = $mysqli->query("SELECT * FROM upload id=1"); 
$output_bin_string = $result["image"]; 
header("Content-Type: image/png"); 
header("Content-Length: " . strlen($output_bin_string));  
echo $output_bin_string; 

Доступ Via Js:

<img src="Retrieve.php?id=1" /> 
+1

Вы ** должны ** использовать экранирование здесь. Ошибка в двоичной строке запроса неверна. – tadman

Смежные вопросы