За последние 24 часа нас посетили 20092 программиста и 1722 робота. Сейчас ищет 1571 программист ...

Получение изображения из БД

Тема в разделе "Сделайте за меня", создана пользователем oleg.kan3, 25 июн 2014.

  1. oleg.kan3

    oleg.kan3 Новичок

    С нами с:
    22 июн 2014
    Сообщения:
    4
    Симпатии:
    0
    Программа состоит из формы,ее валидатора и выхода.Пользователь выбирает изображение оно обрабатывается и должно появится на другой странице,но возникла проблема при получении изображения из БД.Браузер раньше выводил Cannot modify header information но после перемещения header("Content-type: image/*"); перед <!doctype html> он просто автоматически скачивает файл(во всех браузерах).Подскажите как решить эту проблему без метода GET.Идея в том чтобы использовать этот скрипт в расширении на wordpress где админ будет вводить информацию и выбирать картинку на своей странице в админ панели а пользователь будет видеть эту картинку и информацию в виджете на главной странице.
    Форма:
    Код (Text):
    1. <head>
    2. <meta charset="UTF-8">
    3. <title>Form</title>
    4. <style>
    5. form {
    6. display:block;
    7. margin:0 auto;
    8. width:250px;   
    9. }
    10. </style>
    11. </head>
    12. <body>
    13.     <form enctype="multipart/form-data" method="post" action="image-validator.php">
    14.         Изображение: <input type="file" name="userfile[]" />
    15.         <input type="submit" value="Загрузить" />
    16.     </form>
    17.     <form method="post" action="compete-validator.php" name="form" >
    18.         <p>Описние:<input id="descr" name="descr" type="text" size="20" value="описание"></p>
    19.         <p>Ссылка<input id="link" name="url" type="url" size="20" value="http://tan.lv"></p>
    20.         <p><input id="save" type="submit"  name="submit" value="Сохранить"><input type="button" id="clear" value="стереть"></p>
    21.     </form>
    22. </body>
    23. </html>
    Валидатор:
    Код (Text):
    1. <!doctype html>
    2. <html>
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Test</title>
    6. </head>
    7. <body>
    8. <p>PHP test validator</p>
    9. <p><a href="form.php">Вернутся к форме</a></p>
    10. <p><a href="test.php">Перейти к тесту результата</a></p>
    11. <?php
    12. include 'img_func.php';
    13. //...
    14. // Используя ранее определенную функцию get_image присваиваем
    15. // переменным содержимое файлов
    16. $image_loaded=get_image(0);
    17. if ($image_loaded == ''){
    18.     unset($image_loaded);
    19. }
    20. // Соединение с сервером БД
    21. $mysqli = new mysqli("localhost", "root", "", "test");
    22. if ($mysqli->connect_errno) {
    23.     echo "Не удалось подключиться к MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    24. }
    25. echo 'Соединение установлено... ' .$mysqli->host_info . "\n</br>";
    26. // Проверяем, установлены ли переменные
    27. if (isset($image_loaded)){
    28.     /* Здесь пишем что можно заносить информацию в базу.
    29.     В нашем случае в базе существует два поля типа
    30.     MEDIUMBLOB:img_before и img_after */
    31.    
    32. if(!$mysqli->query("UPDATE `imagees` SET `img_loaded`='$image_loaded'")) {
    33.     echo "Не удалось создать таблицу: (" . $mysqli->errno . ") " . $mysqli->error;
    34. }
    35. }
    36. else{
    37.     if ($ErrorDescription == ''){
    38.         echo "Вы ввели не всю информацию, поэтому
    39.             изображения в базу не могут быть добавлены.";
    40.     }else{echo $ErrorDescription;}
    41. }
    42. mysqli_close($mysqli);
    43. ?>
    44.  
    45. </body>
    46. </html>
    Выход:
    Код (Text):
    1. <?
    2. header("Content-type: image/*");
    3. ?>
    4. <!doctype html>
    5. <html>
    6. <head>
    7. <link rel="stylesheet" type="text/css" href="res/style.css">
    8. <script src="res/jquery-2.1.0.min.js"></script>
    9. <script src="res/widget_events.js"></script>
    10. <meta charset="utf-8">
    11. <title>Test</title>
    12. </head>
    13. <body><?
    14. // Соединение с сервером БД
    15. $con = new mysqli("localhost", "root", "", "test");
    16. if ($con->connect_errno) {
    17.     echo "Не удалось подключиться к MySQL: (" . $con->connect_errno . ") " . $con->connect_error;
    18. }
    19. $mysqli = "SELECT `img_loaded` FROM `imagees` WHERE `id`='1'";
    20. $result=mysqli_query($con,$mysqli);
    21. if ( mysqli_num_rows( $result ) == 1 ) {
    22.       $image = mysqli_fetch_array($result);
    23.       // Отсылаем браузеру заголовок, сообщающий о том, что сейчас будет передаваться файл изображения
    24.             // И  передаем сам файл
    25.       echo $image['img_loaded'];
    26. }
    27. mysqli_close($con);
    28. ?><ul id="widget_2">
    29. <li><span id="events_toggle">Ближайшие мероприятия</span>
    30.                 <div id="closest_events">
    31.                     <div id="events_bg">
    32.                         <img src="wp-content/themes/Project_TAN/images/news_line/image_12.jpg" width="150" height="100" alt="event_img">
    33.                         <p>24 ноября 2013г. состоится международный турнир для мол...</p>
    34.                         <a href="#">Подробнее</a>
    35.                     </div>
    36.                 </div>
    37.                 <span id="fr_events_toggle">Следующие мероприятия</span>
    38.                 <div class="further_events">
    39.                     <img src="wp-content/themes/Project_TAN/images/news_line/image_12.jpg" width="100" height="100" alt="event_img">
    40.                     <p>Fudzi cup</p>
    41.                     <p>25.03.2014</p>
    42.                     <a href="#">Подробнее</a>
    43.                     <div class="clear"></div>
    44.                 </div>
    45.                 <div class="further_events">
    46.                     <img src="wp-content/themes/Project_TAN/images/news_line/image_12.jpg" width="100" height="100" alt="event_img">
    47.                     <p>Fudzi cup</p>
    48.                     <p>25.03.2014</p>
    49.                     <a href="#">Подробнее</a>
    50.                     <div class="clear"></div>
    51.                 </div>
    52.  
    53.                 <span id="adults">Для взрослых</span>
    54.                 <div class="adults">
    55.                     <img src="wp-content/themes/Project_TAN/images/news_line/1269878970_zen.jpg" width="100" height="100" alt="event_img">
    56.                     <a href="#">Тренировки для взрослых</a>
    57.                     <div class="clear"></div>
    58.                 </div></li>
    59. </ul>
    60. </body>
    61. </html>
    Заранее спасибо за ответы!И не судите строго,я новичек в php!
    P.S. Сервер работает на локалке denwer, а не на хостинге,если это как-то сильно влияет,пожалуйста отпишитесь.
     
  2. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Хранить непосредственно изображение в базе - довольно тухлая идея. Сохраняйте файл где-нибудь на сервере, давайте ему случайное имя (хотя бы хеш от его имени, времени загрузки и случайной строки), и этот хеш записывайте в БД, потом по нему обращайтесь.