Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Типове значення user_birthday не дає змінити пароль #56

Open
chief-j opened this issue Jul 1, 2017 · 12 comments · May be fixed by #74
Open

Типове значення user_birthday не дає змінити пароль #56

chief-j opened this issue Jul 1, 2017 · 12 comments · May be fixed by #74
Assignees
Milestone

Comments

@chief-j
Copy link
Contributor

chief-j commented Jul 1, 2017

Стандартно записано 0000-00-00, але рушій не сприймає таку дату. Необхідні зміни зробив #55

@yukoff yukoff added this to the v3.0.0 milestone Jul 15, 2017
@yukoff
Copy link
Contributor

yukoff commented Jul 15, 2017

@chief-j Я поправив допис, але не полінуйтесь все ж почитати доку по форматуванню markdown - ліворуч унизу під вікном коментаря посилання (Styling with Markdown is supported), бо посилання було в нікуди...

@chief-j
Copy link
Contributor Author

chief-j commented Jul 15, 2017

@yukoff Напевно, моє посилання тільки у мене працювало. Не біда, Майстер і так все розумів

@yukoff
Copy link
Contributor

yukoff commented Jul 15, 2017

@chief-j Та яка біда - просто зайву ж роботу робите 😉 Для порівняння:

Було (саме так, не знаю, як воно працювало)

[https://github.com/hurtom/toloka/pull/55](url)

Стало:

#55

@yukoff
Copy link
Contributor

yukoff commented Aug 1, 2017

Взагалі ще принаймні user_sig - в БД повно дивних DEFAULT '' NOT NULL чи DEFAULT 0 NOT NULL

@yukoff
Copy link
Contributor

yukoff commented Aug 2, 2017

@konfuciusu Якщо дата народження не обов'язкова - можна давати ходу (я додам до #74), заодне можна всі поля продивитись на bb_users (як-от user_sig)

@chief-j
Copy link
Contributor Author

chief-j commented Aug 19, 2017

@yukoff Саме через це, неможливо змінити пароль, тож це виправити треба

@yukoff yukoff changed the title Баг при зміні пароля користувачем Типове значення user_birthday не дає змінити пароль Aug 20, 2017
@yukoff
Copy link
Contributor

yukoff commented Aug 20, 2017

Ще сюди ж - при спробі увійти як admin зловив отаке

Whoops\Exception\ErrorException thrown with message "A non well formed numeric value encountered"

Stacktrace:
#1 Whoops\Exception\ErrorException in /var/www/html/index.php:387
#0 Whoops\Run:handleError in /var/www/html/index.php:387

@yukoff
Copy link
Contributor

yukoff commented Aug 26, 2017

Я зараз роблю тести міграції зі старого рушія з мінімально заповненими даними bb_users, на кшталт

INSERT INTO `bb_users`
    (`user_id`, `user_active`, `username`, `user_password2`, `user_timer`)
VALUES ...

-- міграція валиться з попередженням Warning: 1265 Data truncated for column '%s' at row 1 принаймні для цих

  • user_lang (DEFAULT NULL)
  • user_email (DEFAULT NULL)

@yukoff
Copy link
Contributor

yukoff commented Aug 27, 2017

Самим тільки виправленням типового значення не обійтись, додатково створив torrentpier/torrentpier#449

@yukoff
Copy link
Contributor

yukoff commented Aug 27, 2017

@chief-j, Якщо не складно, постав для цього PR також прапорець Allow edits from maintainers

@yukoff
Copy link
Contributor

yukoff commented Aug 28, 2017

Загалом, я пропоную щонайменше оці зробити DEFAULT NULL:

  • user_birthday (власне, тема цього питання)
  • user_email
    (взагалі, логічніше було б як раз NOT NULL, адже email обов'язковий при реєстрації? але є Guest - тому або DEFAULT NULL, або DEFAULT '' NOT NULL)
  • user_skype
  • user_twitter
  • user_icq
  • user_website
  • user_from
  • user_sig
  • user_occ
  • user_interests

На InnoDB в плані розміру це ефективніше за зберігання пустої строки, щоправда доведеться зробити один великий UPDATE на таблиці - але натомість, це позбавить необхідності робити окремий для кожного стовпця, для порівняння:

UPDATE bb_users
SET user_birthday = IF(STRCMP(user_birthday, '0000-00-00'), user_birthday,  NULL),
    user_email = IF(STRCMP(user_email, ''), user_email, NULL),
    user_skype = IF(STRCMP(user_skype, ''), user_skype, NULL),
   ...
    user_interests = IF(STRCMP(user_interests, ''), user_interests, NULL)
WHERE user_birthday = '0000-00-00'
  OR user_email = ''
  OR user_skype = ''
  ...
  OR user_interests = '';

Нотатка: тут, вірогідно, навіть UPDATE без WHERE буде швидший

проти: (пам'ятаймо про ~900 тис. рядків)

UPDATE bb_users SET user_birthday = NULL WHERE user_birthday = '0000-00-00';
UPDATE bb_users SET user_email = NULL WHERE user_email = '';
UPDATE bb_users SET user_skype = NULL WHERE user_skype = '';
...

Ще кандидати:

  • user_actkey
  • user_newpasswd
  • autologin_id

Можна ще було б *_ip теж, але не певен, чи не використовуються вони спільно з анонсером.

@konfuciusu, чи є якісь ідеї чи заперечення?

@konfuciusu
Copy link
Contributor

@yukoff я не проти і великих апдейтів не боюся.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants