Ребят, доброго времени суток. Такая вот проблемка уже голову сломал себе. В общем отправляю через форму Код (PHP): <p><input type="file" name="files[]"></p> <p><input type="file" name="files[]"></p> <p><input type="file" name="files[]"></p> изображения, запись в бд происходит нормально. к объекту добавляется сразу 3 фото. Но проблема в том что фото эти все одинаковые. Вот сам код. Код (PHP): if (isset($_FILES['files'])) { $id_news = $objekt_id; foreach ($_FILES['files']['name'] as $k => $files) { $ext = strrchr($files, "."); $filetypes = array('.jpg','.gif','.bmp','.png','.JPG','.BMP','.GIF','.PNG','.jpeg','.JPEG'); if (!in_array($ext,$filetypes)) { msgbox('Обнаружена ошибка', 'Вы пытаетесь загрузить запрещенный к загрузке файл.'); } else { $imagepath = "uploads/photo/" . date("YmdHis", time()) . "$ext"; if ($r = move_uploaded_file($_FILES['files']['tmp_name'][$k], $imagepath)) { $files = $db->query("INSERT INTO photos VALUES(NULL,'$id_news', '$imagepath')"); } else { msgbox('Обнаружена ошибка заполнения формы', 'Ошибка загрузки файла.'); } } } } В чем ошибка? подскажите пожалуйста почему в бд появляется 3 записи к объекту, но фото во всех трех записях одинаковые. Заранее благодарен за помощь. Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
всё станет понятней, если перед выполнением insert-запроса в БД, сделать вывод самой строки запроса - как она сформировалась (;
Код (PHP): Array ( [files] => Array ( [name] => Array ( [0] => изображение viber.jpg [1] => изображение viber2.jpg [2] => изображение viber3.jpg [3] => изображение viber4.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg [2] => image/jpeg [3] => image/jpeg ) [tmp_name] => Array ( [0] => C:\Windows\TEMP\phpEA41.tmp [1] => C:\Windows\TEMP\phpEA42.tmp [2] => C:\Windows\TEMP\phpEA43.tmp [3] => C:\Windows\TEMP\phpEA44.tmp ) [error] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 ) ) ) Вот aray
Код (PHP): echo "INSERT INTO photos VALUES(NULL,'$id_news', '$imagepath')" (; Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Код (PHP): INSERT INTO photos VALUES(NULL,'203', 'uploads/photo/20160225210650.jpg') INSERT INTO photos VALUES(NULL,'203', 'uploads/photo/20160225210650.jpg') INSERT INTO photos VALUES(NULL,'203', 'uploads/photo/20160225210650.jpg') INSERT INTO photos VALUES(NULL,'203', 'uploads/photo/20160225210651.jpg') Добавлено спустя 1 минуту 24 секунды: первые 3 почему то заменились, и стали одинаковыми "20160225210650.jpg" хотя загружаю 4 разных фото
предположу, что у тебя ошибка, как раз строкой выше перед выполнением sql-запроса в БД (( дебаж - и смотри, почему не меняется...
да нет, там формат-то времени правильный. его использование не очень правильно. у тебя много картинок за одну единицу времени успевает залиться вот они друг друга и перетирают. добавь какую-нибудь переменную-счетчик к своей итерации массива загруженных файлов и получишь для них для всех уникальные имена.
Суть в том что с инпутов, данные приходит нормально. В БД пишется тоже правильное количество. Но вот имя файла приписывается либо одинаковое у всех, либо у всех кроме одного. Так же и в папке за груженых изображений появляется только то изображение которое прописалось в бд.
* рядом с уникальными тут умалчивается фраза "в рамках твоего проекта и уровня познаний". потом научишься как лучше делать.
предложу заменить на такой вариант Код (PHP): date( 'YmdHis' ) . '-' . rand( 10 , 100 ) свой Код (PHP): date("YmdHis", time()) (;
тебе уже объяснили почему у тебя только один файл. исправляй. Добавлено спустя 1 минуту 23 секунды: p@R@dox 55RU, не надо рандома. рандом может случайно дать одинаковое число. он же псевдорандом. и что тогда? счетчик, ну ё-моё, счетчик. и все дела.
ну не знаю. ты взял ружье с отсыревшими патронами, направил себе в лицо и дрочишь курок, убеждая окружающих в том, что ружье НИКОГДА не выстрелит. а оно ведь может выстрелить. и скорее всего выстрелит. ну это ж физический процесс, в котором много случайностей. подсохнут патроны и твои мозги украсят потолок. так же и такой код (назовем своими именами - говнокод. без обид). в нем уникальность только мнимая. а когда вдруг случится коллизия ты ой. потому что зачем тебе правильно писать если и такие костыли работают. ты сейчас зачем-то отстаиваешь право на логические ошибки в алгоритме. для решения твоего затыка достаточно просто подставить переменную $k в нужное место. идеология "объявить переменную-счетчик перед циклом, а в цикле подставлять инкремент её значения" у тебя уже наполовину доступна через то как ты итерируешь массив.
Ganzal, это чисто твое воображение, а я тебе говорю о своей действительности - то что у меня ни раз было на практике. Смекаешь? К тому же, чем больше разброс между числами, тем менее вероятнее, что будут совпадения. Допустим, не от 10 до 100, а от 1 до 1000. Я лишь предложил вариант, который мне пришел по памяти, а выбирать только автору ((
p@R@dox 55RU, да я-то смекаю. просто не очень понимаю почему ты не допускаешь для себя использования нормально алгоритма, зато с пеной у рта отстаиваешь условно неправильный. но это твоё личное дело. проехали.
p@R@dox 55RU псевдослучайное число или другое случайное число в конкретно этой задачи это гавнокод. Ganzal думаю счётчик тоже не подойдёт, так как несколько пользователей могут отправить в один момент форму. Я бы получил auto_increment строки в базу и дал имя картинки по id.
блин... я что-то представил что он новости на сайт выкладывает. подумал что он один, и поэтому проблемы не возникнет.
Это я образно написал о новостях. В общем сделал так, Код (PHP): $imagepath = "uploads/photo/". md5(uniqid().$files).'_'.rand(1,1000) . "$ext"; Что скажете гуру?