Web-мастер: курс молодого бойца

Хранение изображений в базе данных MySQL

 Страницы: 1 | 2 | 3 ... >>
 

 Добавлено 2008-10-10 19:17:52



Сообщений: 8
Зарегистрирован: 08.10.2008

Цитировать
Здравствуйте. Я вас уже немного пытал по этой темe:
Хранение изображений в базе данных MySQL
С помощью коллег, я нашел способ как выводить картинку, но он отличается от вашего. Но мне хотелось бы разобраться и с тем, что предлагаете вы.
В чем вопрос. Ниже ваш скрипт.

<?php
if ( isset( $_GET['id'] ) ) {
  
// Здесь $id номер изображения
  
$id = (int)$_GET['id'];
  if ( 
$id ) {
    
$query "SELECT * FROM `images` WHERE `id`=".$id;
    
// Выполняем запрос и получаем файл
    
$res mysql_query($query);
    if ( 
mysql_num_rows$res ) == ) {
      
$image mysql_fetch_array($res);
      
// Отсылаем браузеру заголовок, сообщающий о том, что сейчас будет передаваться файл изображения
      
header("Content-type: image/*");
      
// И  передаем сам файл
      
echo $image['content'];
    }
  }
}
?>

1. в форме отправки изображения - метод POST, а вы проверяете $_GET - почему?, а если вывод из базы будет в другой день, или $_GET к форме отношения не имеет?
2. На второй вопрос ответ уже нашел, если никто не читал, то и хорошо. Просто, вчера ночью был уставший и не внимательный, а щас сразу увидел ошибку.
Наверх  Посмотреть профиль   Отредактировано модератором evgenijj 10.10.2008

 Добавлено 2008-10-10 21:05:33
evgenijj
Модератор




Сообщений: 1371
Зарегистрирован: 09.11.2007

Цитировать
ant пишет:
в форме отправки изображения - метод POST, а вы проверяете $_GET - почему?
Ничего сложного. Здесь есть два скрипта:

1. Для добавления изображения в таблицу базы данных. Этот скрипт (файл putimage.php) - обработчик формы
<form enctype="multipart/form-data" method="post" action="putimage.php">
Изображение: <input type="file" name="image" />
<input type="submit" value="Загрузить" />
</form>
И вот как он выглядит
<?php
// Проверяем пришел ли файл
if( isset( $_FILES['image']['tmp_name'] ) ) {
  
// Проверяем, что при загрузке не произошло ошибок
  
if ( $_FILES['image']['error'] == ) {
    
// Если файл загружен успешно, то проверяем - графический ли он
    
if( substr($_FILES['image']['type'], 05)=='image' ) {
      
// Читаем содержимое файла
      
$image file_get_contents$_FILES['image']['tmp_name'] );
      
// Экранируем специальные символы в содержимом файла
      
$image mysql_escape_string$image );
      
// Формируем запрос на добавление файла в базу данных
      
$query="INSERT INTO `images` VALUES(NULL, '".$image."')";
      
// После чего остается только выполнить данный запрос к базе данных
      
mysql_query$query );
    }
  }
}
?>

2. Для извлечения изображения из базы данных. Когда мы загрузили изображение в базу данных, то планируем в будущем его использовать. Ведь так? Как мы можем использовать изображение? Да очень просто - вывести его на страницу:
<html>
<head>
<title>Вывод изображения из базы данных</title>
</head>
<body>
<img src="image.php?id=17" alt="" />
</body>
</html>
Видишь, как мы обращаемся к скрипту image.php? Таблица базы данных images имеет поле id (уникальный идентификатор изображения). Чтобы вывести на странице нужное изображение, мы скрипту image.php методом GET передаем ID нужного нам изображения:
<?php
if ( isset( $_GET['id'] ) ) {
  
// Здесь $id номер изображения
  
$id = (int)$_GET['id'];
  if ( 
$id ) {
    
$query "SELECT * FROM `images` WHERE `id`=".$id;
    
// Выполняем запрос и получаем файл
    
$res mysql_query($query);
    if ( 
mysql_num_rows$res ) == ) {
      
$image mysql_fetch_array($res);
      
// Отсылаем браузеру заголовок, сообщающий о том, что сейчас будет передаваться файл изображения
      
header("Content-type: image/*");
      
// И  передаем сам файл
      
echo $image['content'];
    }
  }
}
?>



Денежные купюры пронумерованы для того, чтобы когда-нибудь я мог сложить их все одну к одной, по порядку.
Наверх  Посмотреть профиль   Сайт автора Отредактировано автором 10.10.2008

 Добавлено 2008-10-10 21:54:42



Сообщений: 8
Зарегистрирован: 08.10.2008

Цитировать
Ура!Ура! Ваш вариант тоже работает. Видимо вчера я был слишком вымотан, много ошибок по невнимательности, у меня поле id наз - id_im.
Но одну вещь я пока не понимаю - почему проверка существования $_GET, идет до отправки запроса к базе?
Наверх  Посмотреть профиль    

 Добавлено 2008-10-11 11:42:16
evgenijj
Модератор




Сообщений: 1371
Зарегистрирован: 09.11.2007

Цитировать
ant пишет:
Но одну вещь я пока не понимаю - почему проверка существования $_GET, идет до отправки запроса к базе?
Ну смотри: задача скрипта image.php - получить изображение из таблицы базы данных по его ID. Если ID изображения не передан методом GET - мы не можем ничего сделать. Ну, может быть, вывести какую-нибудь картинку с надписью "Произошла ошибка". Перед тем, как подставлять $_GET['id'] в запрос, мы должны убедиться в том, что нам передали именно число, чтобы не получить SQL-инъекцию. И даже убедившись в том, что $_GET['id'] - целое положительное число, мы еще проверяем факт наличия в таблице БД изображения с таким ID.


Денежные купюры пронумерованы для того, чтобы когда-нибудь я мог сложить их все одну к одной, по порядку.
Наверх  Посмотреть профиль   Сайт автора  

 Добавлено 2008-10-11 23:16:31



Сообщений: 8
Зарегистрирован: 08.10.2008

Цитировать
Я не понимаю последовательности действий (либо метода GET).
Чтобы база сообщила id, ей надо отправить запрос mysql_query, такой запрос отправляется ниже. Или откуда и где есть обращение к базе, по которому она передаст свое содержимое?
Наверх  Посмотреть профиль    
 Страницы: 1 | 2 | 3 ... >>
 
Быстрый ответ
 
Цвет шрифта: Закрыть все теги
Сообщение
Защитный код