IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   сохранение и извлечения изображения в mysql (http://www.imho.ws/showthread.php?t=142924)

sambik 08.02.2010 00:34

сохранение и извлечения изображения в mysql
 
помогите пожалуста с проблемой сохранение и извлечения изображения в mysql с использованием php моя таблицы images.


CREATE TABLE `images` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`content` blob NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
и код по идеи при загрузки изображения она должна высвечиваться с базу на экран но не работает может мы сможети помочь или подсказать свою версию ввода и вывода изображения
<?php
// Соединяемся с сервером БД
mysql_connect ( 'localhost', 'root', '' );
mysql_query( 'SET NAMES cp1251' );
mysql_select_db ( 'images' );

if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
// Проверяем пришел ли файл
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 );
$title = mysql_escape_string( $_POST['title'] );
// Формируем запрос на добавление файла в базу данных
$query="INSERT INTO `images` VALUES(NULL, '".$title."', '".$image."')";
// После чего остается только выполнить данный запрос к базе данных
mysql_query( $query );
}
}
}
}
?>
<html>
<head>
<title>Загрузка изображений</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<h3>Загруженные изображения</h3>
<p>
<?php
$query = "SELECT id, title FROM images WHERE 1 ORDER BY id";
$res = mysql_query( $query );
while( $img = mysql_fetch_array( $res ) ) {
echo '<img src="image.php?id='.$img['id'].'" alt="'.$img['id'].'" />';
}
?>
</p>
<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
Наименование: <input type="text" name="title" value="" /><br/>
Изображение: <input type="file" name="image" /><br/>
<input type="submit" value="Загрузить" />
</form>
</body>
</html>

EvroStandart 08.02.2010 11:39

И что там неработает? Какие ошибки?

sambik 09.02.2010 09:59

не выходит изображение

EvroStandart 09.02.2010 10:52

Куда не выходит?
В таблицу базы? В броузер?
image.php вообще существует?

BorLase 09.02.2010 11:42

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

1) слышал про такой сайт - google.com? запрос http://www.google.com.ua/search?q=php+mysql+image выдает столько ссылок на статьи и примеры, аналогичные твоему, что способен разобраться даже начинающий. не надо с первой же проблемой ломиться на форумы - другое дело, если вопрос нетривиальный или же по теме ничего не нашлось

2) если уж задаешь вопрос - то максимально точно указывай, в чем проблема. EvroStandart тебя правильно переспрашивает - слова "помогите, не работает что-то, где-то, почему-то" говорят очень мало по сравнению с описанием "вот тут вот в ХХХ строке выдает ошибку ХХХ"

3) опять же - задавая вопрос, предоставляй не просто кусок своего кода, а именно то место, где загвоздка. если у тебя не выводится картинка из базы на страничку, то телепатов, способных на расстоянии прочесть, что же у тебя там в файле image.php, еще не родили и даже не зачали.

4) и последнее: на сайте есть замечательный тег CODE, который, как ни странно, предназначен для публикации листингов

sambik 10.02.2010 18:05

[img]C:\1.jpg[/img]
[img]C:\2.jpg[/img]
у меня проблемы с выводом изображения у меня установлен wampserver2 по идеи должен поддерживать.
После загрузки должно появляться изображение которое загрузилась но появляется (x1).на explorer и google ch.p.
а на mozille и opere толька (1).
И еще хотел спросить как можно через браузер сохранять изображение в папку. А путь к папке можно хоронить в базе а так можно вытащить из базы я думаю так <img srt="<? row ["imag"]?>"> заранее спасибо.

<?php
// Соединяемся с сервером БД
mysql_connect ( 'localhost', 'root', '' );
mysql_query( 'SET NAMES cp1251' );
mysql_select_db ( 'test2' );


if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
// Проверяем пришел ли файл
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 );
$title = mysql_escape_string( $_POST['title'] );
// Формируем запрос на добавление файла в базу данных
$query="INSERT INTO `images` VALUES(NULL, '".$title."', '".$image."')";
// После чего остается только выполнить данный запрос к базе данных
mysql_query( $query );
}
}
}
}
?>
<html>
<head>
<title>Загрузка изображений</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<h3>Загруженные изображения</h3>
<p>
<?php
$query = "SELECT id, title FROM images WHERE 1 ORDER BY id";
$res = mysql_query( $query );
while( $img = mysql_fetch_array( $res ) ) {
echo '<img src="img2.php?id='.$img['id'].'" alt="'.$img['id'].'" />'; // вывод изображений из базы данных
}

?>
</p>
<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
Наименование: <input type="text" name="title" value="" /><br/>
Изображение: <input type="file" name="image" /><br/>
<input type="submit" value="Загрузить" />
</form>
</body>
</html>


img2.php

Код: Выделить всё

<?
mysql_connect ( 'localhost', 'root', '' );
mysql_query( 'SET NAMES cp1251' );
mysql_select_db ( 'test2' );


$sql = "SELECT * FROM images WHERE id=$_GET[id]";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$pic = $row["content"];
mysql_free_result($result);

header("Content-Type: image/jpg");
echo $pic;
?>

CREATE TABLE `images` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`content` blob NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

EvroStandart 11.02.2010 11:29

Цитата:

Сообщение от sambik (Сообщение 1697982)
появляется (x1).на explorer и google ch.p.
а на mozille и opere толька (1).

Вообще ничего непонял.

Ты результаты проверок "if" в коде проверял? Базу проверял? Или просто скопировал себе готовый код и дальше можешь только спрашивать почему неработает?


Цитата:

Сообщение от sambik (Сообщение 1697982)
И еще хотел спросить как можно через браузер сохранять изображение в папку.

http://www.google.ee/search?hl=et&q=...i&lr=&aq=f&oq=

Olegat 21.03.2010 19:27

Из всегда рабочих "народных советов"

Таблица image
Код:

CREATE TABLE image (
  id_image INT(11) NOT NULL AUTO_INCREMENT,
  name TINYTEXT NOT NULL,
  content LONGBLOB NOT NULL,
  PRIMARY KEY (id_image)
) TYPE=MyISAM;

Загрузка графики в базу

Код:

<form enctype='multipart/form-data' method=post>
<input type="file" name="image"><br>
<input type=submit value='Загрузить'>
</form>
<?php
  // Число изображений на странице
  $pnumber = 3;

  // Устанавливаем соединение с базой данных
  require_once("config.php");

  // Обработчик HTML-формы
  if(!empty($_FILES))
  {
    // Проверяем, является ли переданный файл изображением
    if(substr($_FILES['image']['type'],0,5) == 'image')
    {
      // Читаем содержимое файла
      $content = file_get_contents($_FILES['image']['tmp_name']);
      // Уничтожаем файл во временном каталоге
      unlink($_FILES['image']['tmp_name']);

      // Экранируем спецсимволы в бинарном содержимом файла
      $content = mysql_escape_string($content);

      // Формируем запрос на добавление файла в таблицу
      $query = "INSERT INTO image VALUES(NULL,
                                        '".$_FILES['image']['name']."',
                                        '$content')";
      if(mysql_query($query))
      {
        // Осуществляем автоматическую перезагрузку страницы
        echo "<HTML><HEAD>
          <META HTTP-EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'>
            </HEAD></HTML>";
      } else exit(mysql_error());
    }
  }

  // Проверяем, передан ли номер текущей страницы
  if(isset($_GET['page'])) $page = $_GET['page'];
  else $page = 1;

  // Начальная позиция
  $start = (($page - 1)*$pnumber + 1);

  // Выводим список файлов
  $query = "SELECT * FROM image LIMIT $start, $pnumber";
  $img = mysql_query($query);
  if(!$img) exit(mysql_error());
  // Если имеется хотя бы одна запись,
  // выводим ее
  if(mysql_num_rows($img) > 0)
  {
    while($image = mysql_fetch_array($img))
    {
      echo "<img src=get.php?id_image=$image[id_image]>&nbsp;";
    }
  }
  echo "<br><br>";

  // Число страниц
  $query = "SELECT COUNT(*) FROM image";
  $tot = mysql_query($query);
  if(!$tot) exit(mysql_error());
  $total = mysql_result($tot,0);
  $number = (int)($total/$pnumber);
  if((float)($total/$pnumber) - $number != 0) $number++;

  // Постраничная навигация
  for($i = 1; $i <= $number; $i++)
  {
    if($i != $number)
    {
      if($page == $i)
      {
        echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]&nbsp;";
      }
      else
      {
        echo "<a href=$_SERVER[PHP_SELF]?page=".$i.
            ">[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a>&nbsp;";
      }
    }
    else
    {
      if($page == $i)
      {
        echo "[".(($i - 1)*$pnumber + 1)."-".($total - 1)."]&nbsp;";
      }
      else
      {
        echo "<a href=$_SERVER[PHP_SELF]?page=".$i.
            ">[".(($i - 1)*$pnumber + 1)."-".($total - 1)."]</a>&nbsp;";
      }
    }
  }
?>

Вывод графики из базы

Код:

<?php
  // Устанавливаем соединение с базой данных
  require_once("config.php");

  // Проверяем, передан ли параметр id_image
  // и является ли он целым числом, чтобы
  // предотвратить SQL-инъекцию
  if(!preg_match("|^[\d]+$|",$_GET['id_image']))
  {
    exit("Недопустимый формат URL-запроса");
  }

  // Извлекаем файл изображения из базы данных
  $query = "SELECT * FROM image
            WHERE id_image = $_GET[id_image]";
  $img = mysql_query($query);
  if(!$img) exit(mysql_error());
  $image = mysql_fetch_array($img);

  // Отсылаем заголовки на загрузку файла
  header("Content-type: image/*");
  // Отправляем файл пользователю
  echo $image['content'];
?>

Конфиг надо иметь свой :)


Часовой пояс GMT +4, время: 20:22.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.