За последние 24 часа нас посетили 17732 программиста и 1720 роботов. Сейчас ищут 926 программистов ...

игровая валюта

Тема в разделе "PHP для новичков", создана пользователем Андрей12, 14 мар 2015.

  1. Андрей12

    Андрей12 Новичок

    С нами с:
    18 фев 2015
    Сообщения:
    131
    Симпатии:
    0
    в таблице данных у меня есть столбец rubies(рубли игровые) когда игрок покупает что то рубли уменьшаются,как сделать чтобы в минус игровой эквивалент не уходил тобишь рубли? баланс 15 рублей - 16 рублей(покупка) = -1 нужно чтоб только больше или равно 0 было.

    Добавлено спустя 23 секунды:
    это в базе данных делается или в запросе к базе данных?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Есть у тебя $balance (счет игрока) и $price (цена предмета).
    При покупке сравнивай их. Если $price>$balance, то пиши, мол, "Вы нищеброд".

    Можно в 2 этапа сделать. Сначала в клиенте проверяешь, и там сразу обрабатываешь все, мол, если денег хватает, то прокидываешь запрос на сервер, чтобы оплата прошла, в противном случае не прокидываешь запрос. Сэкономишь на запросах, собсно, практически задаром. Нефиг заведомо "отказные" запросы принимать и рассматривать, не стоят серверные мощности того.

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

    На деле это ничем не отличается от двойной валидации форм по смыслу :)
     
  3. Андрей12

    Андрей12 Новичок

    С нами с:
    18 фев 2015
    Сообщения:
    131
    Симпатии:
    0
    понял спасибо. попробую
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ещё можно изменить тип поля, сделав его unsigned
    тогда отрицательные числа в него сама БД не даст сохранить.
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Имхо, лучше до этого не доводить. А то, если неаккуратно прицелиться, можно выстрелить себе в ногу тем, что шмотка куплена, а деньги вообще не потратились. Я бы в базу писал тогда, когда уверен, что все уже корректно. Да и зачем дергать базу ради заведомо пофейленой транзакции, если дешевле ее не допустить?
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    если ты будешь внимательнее, ты сможешь заметить, что я начал своё сообщение со слов: 'ещё можно'
    т.е. это дополнительно к твоим советам, а не вместо них. ТС спросил как сделать в бд неотрицательное поле - я ответил.
    а что лучше/хуже для него пусть решает сам ТС.
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Окей. Кстати, в некоторых гамах, например в EveOnline игровой счет может быть отрицательным :)
    Сам ты, разумеется, не можешь там потратить денег больше, чем имеешь. А вот администрация, если ты попался на нарушении EULA, может впаять неиллюзорный штраф независимо от твоих средств.
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    по хорошему, все операции с деньгами, производятся одной транзакцией. в которой все сопутствующие изменения в таблицах. и если где-то чтото не прошло, то ролбек. т.е. даже если где-то в бизнес логике есть дыра, на уровне БД отрицательного баланса не будет(как не будет и других связанных с этой покупкой изменений, кроме может, лога попыток покупок).
    а если начать фантазировать о том где и как можно прострелить себе ногу, то я могу предположить, что автор может прошляпить, и гдето потерять знак баланса..... клиенты будут делать покупку за покупкой, становясь все богаче и богаче.
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В общем, автор, мотай на ус, инфы тебе дали более, чем достаточно.