1

Тема: Запись текста и изображений в таблицу!

Помогите, пожаалуйста! Весь интернет облазил... Честно...
Последняя надежда на вас
Задача: вставить в базу данных текст вместе с фотографией (с текстом проблем нет). Через php.
Проблема: вместо фотографии появляется ссылка на bin файл, причём размер его не соответствует размеру файла ( если вставить фотографию через сам phpmyadmin, то указывается настоящий размер фотографии.
Что  делать? Нужно, чтобы пользователли загружали свои данные с фотографиями и я без проблем просмотривал...
Заранее спасибо!

2

Re: Запись текста и изображений в таблицу!

В таблице сделайте отдельное поле для текста и отдельное для фотографии (лучше отдельные таблицы). Кроме бинарных данных катринки, рекомендуется создать поля под ее тип, размер и название.

Примерная структура таблицы для хранения картинки:

CREATE TABLE IF NOT EXISTS `file` (
  `id` mediumint(8) unsigned NOT NULL auto_increment,
  `name` varchar(100) NOT NULL,
  `type` varchar(100) NOT NULL,
  `size` int(10) unsigned NOT NULL,
  `content` mediumblob NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;

Допустим, вы загрузили картинку через POST форму, значит появится глобальная переменная $_FILE

<form action="" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo (2*1024*1024); ?>">
    <input type="file" name="file">
</form>

Запись в БД.

<?php

// Размер файла.
if ($_FILES['file']['size'] > 0 && $_FILES['file']['size'] < (2*1024*1024)) upload();

function upload() {
    $handle = fopen($_FILES['file']['tmp_name'], 'rb');
    $contents = fread($handle, filesize($_FILES['file']['tmp_name']));
    fclose($handle);
    $sql = 'INSERT INTO `file` (
                `name`,
                `type`,
                `size`,
                `content`
            ) VALUES (
                "' . addslashes($_FILES['file']['name']) . '",
                "' . addslashes($_FILES['file']['type']) . '",
                 ' . addslashes($_FILES['file']['size']) . ',
                "' . addslashes($contents) . '"
            )';
    mysql_query($sql);

}

?>

Формируем картинку по ссылке file.php?id=1

<?php

if (!isset($_GET['id']) || !preg_match('/^\d{1,8}$/', $_GET['id'])) exit();

$sql = 'SELECT * FROM `file` WHERE `id` = ' . $_GET['id'];
if (!$result = mysql_query($sql)) exit();
if (!$row = mysql_fetch_assoc($result)) exit();

header('Content-length: ' . $row['size']);
header('Content-type: ' . $row['type']);
echo $row['content'];
exit();

?>

3

Re: Запись текста и изображений в таблицу!

У меня не получается...
В таблицу вообще никаких данных не  приходит...

4

Re: Запись текста и изображений в таблицу!

dvv777 сказал:

У меня не получается...
В таблицу вообще никаких данных не  приходит...

Покажите что вы сделали.

5

Re: Запись текста и изображений в таблицу!

<form action="" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo (2*1024*1024); ?>">
    <input type="file" name="file">
  <input type="submit" name="button" id="button" value="Отправить">
</form>
<?php
   mysql_connect("localhost", "root", "12345");
   mysql_select_db("info");
?>
<?php
if ($_FILES['file']['size'] > 0 && $_FILES['file']['size'] < (2*1024*1024)) upload();
function upload() {
    $handle = fopen($_FILES['file']['tmp_name'], 'rb');
    $contents = fread($handle, filesize($_FILES['file']['tmp_name']));
    fclose($handle);
    $sql = 'INSERT INTO `file` (
                `name`,
                `type`,
                `size`,
                `content`
            ) VALUES (
                "' . addslashes($_FILES['file']['name']) . '",
                "' . addslashes($_FILES['file']['type']) . '",
                 ' . addslashes($_FILES['file']['size']) . ',
                "' . addslashes($contents) . '"
            )';
    mysql_query($sql);
}
?>

6

Re: Запись текста и изображений в таблицу!

Все работает, я проверил. Только проверку сделайте таким образом.

if (isset($_FILES['file']) && $_FILES['file']['size'] > 0 && $_FILES['file']['size'] < (2*1024*1024)) upload();

7

Re: Запись текста и изображений в таблицу!

спасибо! в базу загружается, но не выводит на экран (пустая страница)
в базе такая запись:

2    4.jpg    image/jpeg    48709    [BLOB - 47.6КБ]

<?php
   mysql_connect("localhost", "root", "12345");
   mysql_select_db("info");
if (!isset($_GET['id']) || !preg_match('/^\d{1,8}$/', $_GET['id'])) exit();
$sql = 'SELECT * FROM `file` WHERE `id` = ' . $_GET['id'];
if (!$result = mysql_query($sql)) exit();
if (!$row = mysql_fetch_assoc($result)) exit();
header('Content-length: ' . $row['size']);
header('Content-type: ' . $row['type']);
echo $row['content'];
exit();
?>

8

Re: Запись текста и изображений в таблицу!

Этот файл назовите img.php и введите в браузере img.php?id=2