[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка аватара
bvn
Есть страница регистрации, где пользователь должен задать себе аватар. По условиям ТЗ аватар - обязательное поле и может быть либо выбрано из списка, либо загружено с локальной машины. В форме я реализовал радио-переключатель выбор/загрузка, при включении варианта "выбор", становится активным элемент select с набором предустановленных аватаров, при выборе аватара меняется, картика - все как положено. Когда переключатель устаналвивается в режим "загрузка", становится активным элемент input type=file, куда пользователь может поместить путь к файлу для загрузки.
И дальше для меня возникают непонятки.
Если дать пользователю засабмитить этот файл, то проверять, является ли он подходящей картинкой прийдется только на сервере, а значит сообщение об ошибке сможет быть выдано лишь постфактум и регистрацию надо будет повторить с начала. Возможно, что это и есть лучший вариант решения.
Но я думаю, нельзя ли это как-то реализовать в стиле аякса - загрузка картинки без перезагрузки страницы? Даже если не говорить о технических сложностях (для меня это пока сложно), то тут есть такой подвох: что если пользователь загрузит одну картинку, потом передумает и загрузит другую картинку, третью, четвертую и т. д. и т. п. Тем самым он завалит каталог uploads своими картинками, что в итоге может привести к исчерпанию места на хостинге. Трудно представить, кто может заниматься таким идиотизмом, но если научить этому действию какой-нибудь бот, то желающие найдутся, я уверен.
Как все-таки лучше реализовать эту задачу?



Спустя 18 минут, 59 секунд (29.09.2008 - 22:27) Ghost написал(а):
ну перезагруза не произойдёт, если название картинки жёстко задать. типа av148.расширение..
другое дело что аяксом этого делать не стоит - вопервых канал в инет юзеру перегрузите, трафик опять таки и т.д.
имхо достаточно будет один раз проверить на сервере, и если это не картинка - попросить ввести корректные данные

Спустя 9 часов, 48 минут, 23 секунды (30.09.2008 - 08:15) sergeiss написал(а):
Цитата(bvn @ 29.9.2008, 23:08) [snapback]49635[/snapback]
...и регистрацию надо будет повторить с начала...

А зачем "с начала"? Кто мешает тебе вывести в нужные поля все данные, которые были заданы корректно, и запросить повторно ввести только некорректные данные? Я надеюсь, что у тебя регистрация на одной странице, а не на двух?
Тогда юзер задает только то, что им же было задано некорректно.

Спустя 1 час, 6 минут, 20 секунд (30.09.2008 - 09:22) bvn написал(а):
что мешает, что мешает... лень мешает smile.gif
лень мне менять одно большое условие if(правильно введены все обязательные пост-данные) на десяток мелких условий if(правильно введено полеN)
так намного проще разделить код сразу на 2 ветки: одна - все правильно: обрабатываем необязательные данные, другая: что-то не так: идем лесом и вводим данные заново smile.gif

Спустя 1 минута, 40 секунд (30.09.2008 - 09:23) bvn написал(а):
PS: А для того, чтобы юзера не напрягать введением повторно данных, у меня javascript-валидатор имеется, т. е.
вариант "идем лесом" срабатывает только тогда, когда есть попытка ввести данные мимо формы.

Спустя 2 минуты, 15 секунд (30.09.2008 - 09:26) bvn написал(а):
PPS: Потому и возник вопрос, что загрузка файла ломает всю логику этого процесса sad.gif
Потому что я не могу произвести валидацию файла до его загрузки на сервер...

Кстати, использование капчи (которую я еще не делал, но прийдется) тоже поломает эту логику... по-любому sad.gif
Надо что-то решать smile.gif

Спустя 16 минут, 49 секунд (30.09.2008 - 09:42) Vaska написал(а):
Ты делаешь для пользователя? Или для заказчика? Или для себя? Старайся для пользователя делать, как ему будет лучше. А ему будет лучше если ты сделаешь подробный вывод ошибок при регистрации, да еще заполнишь за него поля, которые он ввел правильно, да еще и поставишь курсор на то место где у него первая ошибка (если их много).

Спустя 2 часа, 22 минуты, 41 секунда (30.09.2008 - 12:05) bvn написал(а):
Я новичек, ты не забывай... Если я буду делать для пользователя, забывая о себе... то я буду по двадцать раз переписывать один и тот же код, каждый раз, находя еще что-то, что я мог бы улучшить для Его Величества Пользователя... а у меня и так уже сроки сдачи горят...

Спустя 52 минуты, 57 секунд (30.09.2008 - 12:58) sergeiss написал(а):
Если ты один раз перепишешь 20 раз, то на другом проекте сделаешь всё сразу правильно. И выиграешь время.
И правильно тебя спросили: для кого ты делаешь- для пользователя или для себя? Если для себя, то о каких сроках ты говоришь? А если для Пользователя (Заказчика), то зачем делаешь плохо?

Опять же... Вовсе не нужно изменять проверку на сайте. Оставь всё, как есть! Только добавь вывод данных (например, имя, телефон, е-мейл и т.д.), которые пользователь уже ввел, прямо в те поля, где оно всё было введено. Речь идет об этом, а не о том, чтобы менять все условия. То есть, ты должен не удалить нечто и внести что-то вместо этого нечто, а добавить надо добавить немного нового кода.

Спустя 42 минуты, 12 секунд (30.09.2008 - 13:40) bvn написал(а):
Цитата(sergeiss @ 30.9.2008, 12:58) [snapback]49706[/snapback]
Если ты один раз перепишешь 20 раз, то на другом проекте сделаешь всё сразу правильно. И выиграешь время.
И правильно тебя спросили: для кого ты делаешь- для пользователя или для себя? Если для себя, то о каких сроках ты говоришь? А если для Пользователя (Заказчика), то зачем делаешь плохо?

Плохо/хорошо - категории субъективные... Давай не будем играть в идеалистов, есть еще понятие "оптимально", которое учитывает затраты времени и прочие другие факторы... В моем случае оптимально - это используя по максимуму уже готовый код, без переписывания...
Цитата
Опять же... Вовсе не нужно изменять проверку на сайте. Оставь всё, как есть! Только добавь вывод данных (например, имя, телефон, е-мейл и т.д.), которые пользователь уже ввел, прямо в те поля, где оно всё было введено. Речь идет об этом, а не о том, чтобы менять все условия. То есть, ты должен не удалить нечто и внести что-то вместо этого нечто, а добавить надо добавить немного нового кода.

Ну, либо вы не видели мой код, либо я еще плохо представляю, куда и как его вставлять... мне кажется это весьма затруднительным...

Спустя 32 минуты, 49 секунд (30.09.2008 - 14:13) sergeiss написал(а):
Если философствовать smile.gif, то "оптимально" будет как раз однажды сделать по-нормальному (пусть и с 10-й попытки), а потом делать нормально сразу. Иначе - так и будешь каждый раз с 10-й попытки "угадывать", как надо было правильно. Поверь мне, плз! Что это именно так. Собственно, это процесс и называется "обучением": когда ты делаешь ошибки только сначала, а потому уже знаешь про их возможность, и обходишь их стороной.

Что касается кода, то да, я его не видел (ну, не телепат я пока еще) smile.gif Но тем не менее, предположу, что данные выводятся на экран примерно так:
<input name="first_name" type="text" id="first_name"/>

Вот в такие строки и надо внедрить то, что юзер уже ввел.
// где-то в начале
$fname=$_POST['first_name'];
...
// и уже там, где надо вводить данные, встраиваем ПХП код в ХТМЛ
<input name="first_name" type="text" id="first_name" <?php echo if( strlen( $fname) > 0 ) "value=\"$fname\""; ?> />

Имеем:
1. При начальном заходе на сайт нету $_POST['first_name'], поэтому $fname - пустая строка, ничего не выводится в поле.
2. После ПОСТа заходим на эту же страницу. Ты проверяешь, что что-то не так, и просишь повторить ввод данных. НО!!! $fname уже будет иметь некую величину (строку), которая и будет выведена. А будет там то, что юзер уже ввел.
3. Обрати внимание, что я сознательно взял имя переменной $fname, а не $first_name. Чтобы в явном виде уйти от проблемы (потенциальной), связанной с наличием (у хостера) возможности использовать глобальные переменные. То есть, заведомо уменьшил вероятность подлома сайта хакерами.
4. Делаешь то же самое со всеми вводимыми величинами... И получаешь довольного Пользователя, удовлетворенного Заказчика, и тебе на надо переделывать код. Ты его только дополняешь (!).

Спустя 8 минут, 23 секунды (30.09.2008 - 14:21) bvn написал(а):
Ага, спасибо за советы... философствовать у меня тоже нет времени... Если я сорву сроки сдачи проекта и не получу ожидаемых денег в ближайшую неделю, то вероятно, меня отключат от электричества за неуплату и учиться я тога уже буду на счетных палочках... а ты говоришь, оптимально...
тему закрываю.... бесполезной оказалась тема, разве что сам себе помог понять... спасибо smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.