За последние 24 часа нас посетили 15698 программистов и 1661 робот. Сейчас ищут 885 программистов ...

Работа с фотографиями.

Тема в разделе "PHP для новичков", создана пользователем MaRvel, 26 окт 2008.

  1. MaRvel

    MaRvel Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    20
    Симпатии:
    0
    Такая задача, надо сделать возможным сохранение картинки в бд(если возможно) через админку. Я хочу создать что-то вроде магазина(фото товара, наименование, описание, цена, количество), создал таблицу на 6 столбцов, но вот только не знаю как выводить и сохранять фотографии. Что делать?
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    не надо хранить картинки в БД
    храни картинки в файловой системе, а в БД только пути к ним
     
  3. MaRvel

    MaRvel Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    20
    Симпатии:
    0
    Э... И как это реализовать? хотя бы алгоритм
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну как как..
    загружаем картинку на сервер в какую-нибудь папку, а путь к этой картинке записываем в какое-нибудь поле в БД
     
  5. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    упрощенный вариант:
    1. таблица - картинки (id, имя файла, mime и тд)
    2. таблица - пути (id, path, webpath и тд). path - физ путь на диске
    3. таблица - свзь картинки (или любого другого объекта для хранения на физикле) и пути.

    создание картинки:
    1. upload.
    2. связка id картинки (из созданного в базе) с id путей.

    ps: ну и объект (товар) связать с id картинки.
     
  6. dAllonE

    dAllonE Guest

    ИМХО можно вообще не хранить пути. Просто разработать стандартный механизм...

    Например:
    1. Картинки хранятся с названием {ID}.jpg || {ID}-min.jpg && {ID}-max.jpg
    2. В каждой директории хранится, скажем, не более 5000 картинок, т.е. для id<5000 полный путь выглядеть как /img/1/{ID}.jpg, для 5000<id<10 000 - /img/2/{ID}.jpg ну и так далее.
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    id лучше сделать название картинки...
     
  8. dAllonE

    dAllonE Guest

    Mr.M.I.T., у меня, например, картинок 10 называются image1 :)
     
  9. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    imho:
    1. id и название - не оптимально. нужно иметь возможность менять имя (не важно нужно это сейчас или потом). У меня лично имя генерится из префикса 'img_' и id (filename = img_21.jpg).
    2. вообще не хранить пути - не оптимально :). парадигма: создается коллекция контэйнеров для хранимого барахла, которым можно рулить как угодно.

    ps: но вообще это конечно все сугубо имхо - на вкус и цвет все фломастеры разные.
    инетерсно что выберет автор :)
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    можно сделать префикс типа md5(microtime())
    ну или ;)
    PHP:
    1.  
    2. <?
    3. function copycopy($file_name,$dir) {
    4.     if (file_exists($dir.'/'.$file_name) || is_dir($dir.'/'.$file_name)) {
    5.           if (!preg_match("#Copy_#i",$file_name) && !preg_match("#Copy\(([0-9]+)\)_#i",$file_name)) {
    6.                $file_name='Copy_'.$file_name;
    7.                if (file_exists($dir.'/'.$file_name) || is_dir($dir.'/'.$file_name)) {
    8.                    return copycopy($file_name,$dir);
    9.                }else {
    10.                    return $file_name;
    11.                }
    12.           }else {
    13.              if (!preg_match("#Copy\(([0-9]+)\)_#i",$file_name)) {
    14.                  $file_name=str_replace("Copy_","",$file_name);
    15.                  $file_name='Copy(1)_'.$file_name;
    16.                  if (file_exists($dir.'/'.$file_name) || is_dir($dir.'/'.$file_name)) {
    17.                    return copycopy($file_name,$dir);
    18.                  } else {
    19.                    return $file_name;
    20.                  }
    21.               }else {
    22.                   preg_match("#Copy\(([0-9]+)\)_#i",$file_name,$num);
    23.                   $file_name=str_replace("Copy(".$num[1].")_","",$file_name);
    24.                   $num[1]++;
    25.                   $file_name='Copy('.$num[1].')_'.$file_name;
    26.                   if (file_exists($dir.'/'.$file_name) || is_dir($dir.'/'.$file_name)) {
    27.                    return copycopy($file_name,$dir);
    28.                   }else {
    29.                    return $file_name;
    30.                   }
    31.               }
    32.           }
    33.      } else {
    34.          return $file_name;
    35.      }
    36. }
    37. ?>
     
  11. dAllonE

    dAllonE Guest

    <зануда>
    Mr.M.I.T., ну да я в курсе что все проблемы обходятся, вот только зачем их вообще создавать если у нас есть замечательный auto_increment id? :)
    </зануда>

    Впрочем это просто моя любовь к картинко-цифрам. С ними (мне лично) как то удобнее.... :)
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    как это зачем?
    чтобы было...!
     
  13. MaRvel

    MaRvel Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    20
    Симпатии:
    0
    Что-то я все равно не очень воткнул, как мне сделать так, чтобы в админке можно было добавлять картинку(закачивать с рабочего стола) и заносить ее в бд(ее путь), чтобы потом вывести ее где надо на странице.
     
  14. Mete0

    Mete0 Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
  15. MaRvel

    MaRvel Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    20
    Симпатии:
    0
    Ладно, с фотографиями я разобрался, теперь надо сделать так, чтобы выводилось не больше 5 наименований.

    Я использую do - while и у меня поку получилось сделать так, что выводиться будет все.
    PHP:
    1.  
    2.  
    3.         while ($myrow = mysql_fetch_array ($result));
    4.  
    Как сделать так, чтобы он выводил не больше 5 наименований?
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    хмм ;)
    почему?
     
  17. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Код (Text):
    1.  
    2. $d = 5;
    3. while ($myrow = mysql_fetch_array ($result) && --$d);
    наверно так. не проверял )
     
  18. MaRvel

    MaRvel Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    20
    Симпатии:
    0
    Использую do-while, потому что лучшего варианта просто не знаю, ну дак как сделать?
     
  19. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Код (Text):
    1. while()
     
  20. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    по моему тут запрос правильный делать нужно
    [sql]
    SELECT * FROM table LIMIT 5
    [/sql]
     
  21. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Вльдемар
    +10
     
  22. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    оффтоплю жёстко, знаю, beer как раз и виноват

    но ИМХО перед тем, как пить всякую дрянь, которая есть в бутылке, лучше делать так:
    Код (Text):
    1. if($beer instanceof Beer) drink($beer);
    ))))
     
  23. MaRvel

    MaRvel Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    20
    Симпатии:
    0
    Ура! У меня получилось загружать картинки на сервер через форму, теперь осталось только научиться вытаскивать их оттуда, засовывать в дб и вывести.
    Ток вот как это реализовать? :?
     
  24. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    MaRvel
    а я говорил как ;)
     
  25. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Я в 90% процентах случаях пью на разлив :), оно получше будет.