Такая задача, надо сделать возможным сохранение картинки в бд(если возможно) через админку. Я хочу создать что-то вроде магазина(фото товара, наименование, описание, цена, количество), создал таблицу на 6 столбцов, но вот только не знаю как выводить и сохранять фотографии. Что делать?
ну как как.. загружаем картинку на сервер в какую-нибудь папку, а путь к этой картинке записываем в какое-нибудь поле в БД
упрощенный вариант: 1. таблица - картинки (id, имя файла, mime и тд) 2. таблица - пути (id, path, webpath и тд). path - физ путь на диске 3. таблица - свзь картинки (или любого другого объекта для хранения на физикле) и пути. создание картинки: 1. upload. 2. связка id картинки (из созданного в базе) с id путей. ps: ну и объект (товар) связать с id картинки.
ИМХО можно вообще не хранить пути. Просто разработать стандартный механизм... Например: 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 ну и так далее.
imho: 1. id и название - не оптимально. нужно иметь возможность менять имя (не важно нужно это сейчас или потом). У меня лично имя генерится из префикса 'img_' и id (filename = img_21.jpg). 2. вообще не хранить пути - не оптимально . парадигма: создается коллекция контэйнеров для хранимого барахла, которым можно рулить как угодно. ps: но вообще это конечно все сугубо имхо - на вкус и цвет все фломастеры разные. инетерсно что выберет автор
можно сделать префикс типа md5(microtime()) ну или PHP: <? function copycopy($file_name,$dir) { if (file_exists($dir.'/'.$file_name) || is_dir($dir.'/'.$file_name)) { if (!preg_match("#Copy_#i",$file_name) && !preg_match("#Copy\(([0-9]+)\)_#i",$file_name)) { $file_name='Copy_'.$file_name; if (file_exists($dir.'/'.$file_name) || is_dir($dir.'/'.$file_name)) { return copycopy($file_name,$dir); }else { return $file_name; } }else { if (!preg_match("#Copy\(([0-9]+)\)_#i",$file_name)) { $file_name=str_replace("Copy_","",$file_name); $file_name='Copy(1)_'.$file_name; if (file_exists($dir.'/'.$file_name) || is_dir($dir.'/'.$file_name)) { return copycopy($file_name,$dir); } else { return $file_name; } }else { preg_match("#Copy\(([0-9]+)\)_#i",$file_name,$num); $file_name=str_replace("Copy(".$num[1].")_","",$file_name); $num[1]++; $file_name='Copy('.$num[1].')_'.$file_name; if (file_exists($dir.'/'.$file_name) || is_dir($dir.'/'.$file_name)) { return copycopy($file_name,$dir); }else { return $file_name; } } } } else { return $file_name; } } ?>
<зануда> Mr.M.I.T., ну да я в курсе что все проблемы обходятся, вот только зачем их вообще создавать если у нас есть замечательный auto_increment id? </зануда> Впрочем это просто моя любовь к картинко-цифрам. С ними (мне лично) как то удобнее....
Что-то я все равно не очень воткнул, как мне сделать так, чтобы в админке можно было добавлять картинку(закачивать с рабочего стола) и заносить ее в бд(ее путь), чтобы потом вывести ее где надо на странице.
MaRvel Почитай, может "воткнешь" http://phpclub.ru/faq/UploadOfLargeFiles?v=bma http://phpclub.ru/detail/article/upload
Ладно, с фотографиями я разобрался, теперь надо сделать так, чтобы выводилось не больше 5 наименований. Я использую do - while и у меня поку получилось сделать так, что выводиться будет все. PHP: while ($myrow = mysql_fetch_array ($result)); Как сделать так, чтобы он выводил не больше 5 наименований?
оффтоплю жёстко, знаю, beer как раз и виноват но ИМХО перед тем, как пить всякую дрянь, которая есть в бутылке, лучше делать так: Код (Text): if($beer instanceof Beer) drink($beer); ))))
Ура! У меня получилось загружать картинки на сервер через форму, теперь осталось только научиться вытаскивать их оттуда, засовывать в дб и вывести. Ток вот как это реализовать? :?