За последние 24 часа нас посетили 30728 программистов и 1809 роботов. Сейчас ищет 861 программист ...

Подскажите как удобнее сделать для юзера

Тема в разделе "PHP для новичков", создана пользователем marsik, 18 янв 2011.

  1. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    есть поле с типом decimal(11,2), в поле поступают данные от юзера с ценой, юзер на дурака может добавить типа 11р20коп, 11,20, 11=20. Как лучше сделать для юзера:
    1. ничего не проверять и не подправлять - майсквил сам все сделает, но юзер может попасть в непонятку.
    2. проверить на соответствие регуляркой на только цифры и точку, в случае не соответствия вывести сообщение об ошибке что только цифры или цифры и разделитель точка.
    3. добавить реплас запятой, знака равно(или любых пробельных символов) на точку и вывести сообщение об ошибке если пытаются добавить буквы вместо цифр
    4. добавить реплас запятой, знака равно(или любых пробельных символов) на точку, реплас любых букв на ничего

    как лучше сделать?
     
  2. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    выводить сообщение об ошибке, а под полем показать пример того, что нужно вводить
     
  3. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    я бы принимал в базу форматы с . - , типа 10.34 10-34 10,34 - проверял бы на соответствие регуляркой и приводил бы к децималу
    Всё что не соответствует - выводить сообщение об ошибке.
    И да - образец помогает
     
  4. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Gromo, tommyangelo спасибо.
     
  5. Carella

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

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    Есть правило которое звучит примерно так "пользователь должен совершать минимум телодвижений" (прочесть инструкцию о том как заполнять - это вообще самый плохой вариант)

    Соответственно, отсюда применительно к твоей задачи тебе желательно сделать следующее:
    1. Не ограничивать (разумно) поле для ввода.
    2. Самостоятельно сделать проверку того чего он туда записал.
    3. Если он записал не то что надо, попытаться определить самому что он туда записал. Например требуем вводить дату, а пользователь может ввести дату кучей разных способов. По уму надо это отследить, затем трансформировать в тот вид который тебе нужен.
    4. Если совсем фигню ввел, выдать сообщение (видное, человеко-понятное, с конкретным указание как исправить) - еще лучше это делать сразу и на этапе заполнения формы (см. асинхронные запросы), поскольку юзер еще в мозгу не потерял момент на котором он находится и ему проще исправить сейчас нежели потом чсмотреть что не так и разбираться. Вывод сообщений типа "поле заполнено не верно" - это бред, потому что первое что приходит на ум это вопрос "а как надо" -надо сразу и указать КАК.
    5. Ну и конечно же перед записью в БД надо применить мускулескейпстринг от греха подальше.

    Все это конечно желательно, но если продукт коммерческий, то это просто обязательно, а то пользователи вынесут весь мозг. И будешь зарабатывать по одному "геморою" за каждый запуск подобного проекта.
     
  6. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    Можно разделить поле на два инпута: один для рублей, второй для копеек. В обоих полях разрешены только цифры. Для копеек разрешено максимум две цифры.
     
  7. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    для важной информации такой вариант не пройдёт. ИМХО, цена - это важная информация.
    Примеры: пользователь ввёл 1 000, а мы преобразуем intval-ом и получаем 1.
    пользователь ввёл 9,999.99 (американский стандарт), а мы преобразуем в 9.999

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

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

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    а как на счет так:
    1. Сначала удалить пробелы (если они есть)
    2. Потом ерегом на вид записи смотреть под какой она может попасть и уже соответсвенным образом изменить.
    3. Если это поле точно цифровое, то посмотреть наличие символов НЕ цифр, если это цифры деньги, то не забыть особое внимание обратить на симыолы доллара, евро и рублей и тд.

    И самое главное если проверку делать по мере заполнения, то юзер сразу увидит если что вдруг не так исправилось.

    С одной стороны это гемор так писать, но если начать, то не так-то много и получается, получится путевая библиотечка обработки полей ввода, которая будет подходить под любую форму любого проекта.
     
  9. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    я бы предложил сделать предварительную проверку на стороне клиента. начинает вводить буквы - показывать подсказку, что буквы низзя, вводит точку - говорить, что надо ставить запятую (если для русских программа). но и перед отправкой в базу не забыть проверить, мало ли какие хакеры есть.
     
  10. Carella

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

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    Про подсказки. Безусловно они нужны. Но они должны выполнять функцию "если пользователь хочет разобраться как заполнить форму, то ему должно быть сразу понятно куда смотреть". Часто подсказки выглядят как реально инструкция для заполнения. Ваш вариант со всплывающим подсказками весьма хорош (ну я так по крайней мере делаю :) ).
     
  11. Carella

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

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    А к стати про фразу:

    Ничерта он не сделает, такого бреда поназаписывает в БД. Плюс это дыра для скл инъекций. Поэтому техническая проверка любого обращения к БД (хоть на запись, хоть на чтение) должна быть проведена.
     
  12. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    наверное проще на яваскрипте типа так:
    [js]var price = document.getElementById('price').value;
    priceTest = 'регулярка';
    var regex = new RegExp(priceTest);

    if (!regex.test(price) && price != '') {

    document.getElementById('price').style.border = '1px solid #FF0000';
    document.getElementById('price_error').innerHTML = 'не корректная цена, такие то рекомендации';
    error = 1;

    }[/js]

    или джикавери плагины подключать что бы сразу давали данные юзеру до сабмита