Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод изображения из базы
 
 автор: juliya   (02.03.2006 в 10:28)   письмо автору
 
 

Всем доброго утра! Вчера положились сами картинки в базу, но оттуда выводится абракадабра на экран. А сегодня еще и ошибка при добавлении записи в базу. Помогите разобраться где ошибка.
Добавляю в базу так:

include "connect_db.php";
ini_set("max_execution_time",999999); 
$photo = $_FILES['photo']['tmp_name'];  
$file = fopen($photo, "r"); 
$buffer = fread($file, filesize($photo)); 
fclose($file);
   if (empty($error))
   {
   $buffer = addslashes($buffer); 
   $query = "INSERT INTO vsm_notebook (f_id, f_surname, f_date_time, f_photo) VALUES
   ('', '$HTTP_POST_VARS[surname]', NOW(), '".mysql_escape_string($buffer)."')";
   $result = mysql_query($query);
   if ($result)
     {
         echo "Add\n";
       }
      else
      {
          echo "Error\n";
      }
}

Вобщем мне тенерь всегда пишет, произошла ошибка при добавлении записи в базу (Error). Может с синтаксисом что не так?

А вывожу из базы изображение так:

 while ($row = mysql_fetch_array($result))
 {    $id = $row["f_id"];
    $surname = $row["f_surname"];
      $photo= $row["f_photo"];
    $date_time=$row["f_date_time"];
if (!empty($photo))
{
//header("Content-Type: image/jpeg"); 
print $photo;
}
?>    

Может в print надо не так писать?

   
 
 автор: cheops   (02.03.2006 в 12:37)   письмо автору
 
   для: juliya   (02.03.2006 в 10:28)
 

Вывести сразу несколько изображений в цикле не получиться, для этого следует придерживаться алгоритма представленного в теме http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5173

   
 
 автор: Trianon   (02.03.2006 в 13:15)   письмо автору
 
   для: juliya   (02.03.2006 в 10:28)
 

$buffer = addslashes($buffer); 
   $query = "INSERT INTO vsm_notebook (f_id, f_surname, f_date_time, f_photo) VALUES 
   ('', '$HTTP_POST_VARS[surname]', NOW(), '".mysql_escape_string($buffer)."')"; 


Не многовато ли эскейпов для одной фотографии?
Наверное имеет смысл оставить что-то одно - либо addslashes либо mysql_escape_string?

   
 
 автор: juliya   (02.03.2006 в 15:04)   письмо автору
 
   для: Trianon   (02.03.2006 в 13:15)
 

Да у меня ведь даже и без фоток данные не хотят в базу ложиться. Посмотрите, плиз, что не так

   
 
 автор: Trianon   (02.03.2006 в 15:12)   письмо автору
 
   для: juliya   (02.03.2006 в 15:04)
 

Вы бы показали, на что смотреть...
echo "Error"; заменили бы на echo "Error on INSERT: " . mysql_error();
Структуру таблицы бы привели. Вслепую тут ничего не подскажешь.

   
 
 автор: juliya   (02.03.2006 в 15:32)   письмо автору
 
   для: juliya   (02.03.2006 в 15:04)
 

Структура таблицы вот:

CREATE TABLE vsm_notebook (
  f_id tinyint(10) NOT NULL auto_increment,
  f_surname varchar(100) default NULL,
  f_date_time datetime NOT NULL default '0000-00-00 00:00:00',
  f_photo blob,
  UNIQUE KEY id (f_id)
) TYPE=MyISAM;

Вобщем полей много, т.к. у меня это записная книжка. А как заносятся в базу показано выше

   
 
 автор: Trianon   (02.03.2006 в 16:30)   письмо автору
 
   для: juliya   (02.03.2006 в 15:32)
 

<?php
   
include "connect_db.php"
  
$f_id 0;
  if(isset(
$_GET['f_id']))
     
$f_id += $_GET['f_id'];
  if(
$f_id != 0)
  {
    
header ("Content-type: image/jpeg");
    
$res=mysql_query(" SELECT  f_photo  FROM  vsm_notebook WHERE f_id = $f_id ");
    if((
$row=@mysql_fetch_array($res)) != 0)
       echo 
$row['f_photo'];
    exit;
  }
  
?>
  <html><body>
  <?php
     
if(isset($_REQUEST['del'])&&count($_REQUEST['del']))
     {
         
$selected implode(',',$_REQUEST['del']);
         
$query "DELETE from vsm_notebook WHERE f_id IN ($selected)";
         
$result mysql_query($query);
        if (!
$result)
           echo 
"Error on delete: " .mysql_error();
     }
     if(isset(
$_FILES['photo']['tmp_name']))
     {
        
$buffer file_get_contents($_FILES['photo']['tmp_name']);
  
$query "INSERT INTO vsm_notebook (f_surname, f_date_time, f_photo)VALUES('"
                
.mysql_escape_string($_POST['surname'])."', NOW(),'"
                
.mysql_escape_string($buffer)."')";
        
$result mysql_query($query);
        if (!
$result)
           echo 
"Error on insert: " .mysql_error();
     }


   
$result=mysql_query(" SELECT  f_id,f_surname, f_date_time  FROM  vsm_notebook");
   if(
$result == 0)
       echo 
"error in select:"mysql_error();
    
$total 0;
    while((
$row=mysql_fetch_array($result)) != 0)
    {
       if(!
$total++)
           echo 
"<form method=post>";
       
$f_id $row['f_id'];
       
$f_surname $row['f_surname'];
       
$f_date_time $row['f_date_time'];
       echo 
""
       
"<input type=checkbox name=del[] value=$f_id />"
       
"<a target=_blank href='?f_id=$f_id'>$f_date_time</a> "
       
"<img src='?f_id=$f_id' />"
       
htmlspecialchars($f_surname)
       . 
"<br/>\r\n";
    }
    if(
$total)
        echo 
"<input type=submit value='Delete selected rows'></form>\r\n";
    echo 
"Total: $total rows";
  }
  
?>

  <form method=post enctype=multipart/form-data >
  Photo:  <input type=file name=photo  />
  Surname: <input name=surname>
   <input type=submit value="Add to gallery" /></form>
</body></html>

Это в любом случае учебный пример. Код не защищен от атак.

   
 
 автор: Trianon   (02.03.2006 в 16:41)   письмо автору
 
   для: juliya   (02.03.2006 в 10:28)
 

В Вашем же коде ошибка здесь:
" ..., '$HTTP_POST_VARS[surname]', NOW()..."
Если Вы хотите подставить в строку значение из элемента массива, следует писать либо явно указывая контекст подстановки фигурными скобками:
" ..., '{$HTTP_POST_VARS['surname']}', NOW()..."
либо отказаться от подстановки вообще и сцепить строку из кусочков:
" ..., '"  .    $HTTP_POST_VARS['surname']  .   "', NOW()..."
В любом случае константу surname надо брать в кавычки.
Я решил, что поскольку слэши и кавычки экранировать все равно придется, то проще сцепить.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования