Массовое изменение полей пользователя
Здравствуйте!
У нас поменялась политика регистрации пользователей на сайте. Теперь username равен полю phone.
При регистрации все срабатывает верно, но есть несколько тысяч пользователей, зарегистрированных ранее, у которых username стандартный и равен полю email.
Подскажите, можно как-то массово заменить содержимое в username на содержимое из поля phone?
У нас поменялась политика регистрации пользователей на сайте. Теперь username равен полю phone.
При регистрации все срабатывает верно, но есть несколько тысяч пользователей, зарегистрированных ранее, у которых username стандартный и равен полю email.
Подскажите, можно как-то массово заменить содержимое в username на содержимое из поля phone?
Комментарии: 12
Запустите в Console скрипт (естественно, сделав предварительно бэкап базы):
foreach ($modx->getIterator('modUser') as $user) {
$profile = $user->getOne('Profile');
$user->set('username', $profile->get('phone'));
$user->save();
}
Спасибо, попробую.
Скажите, Вы не знаете, как мне массово тоже из поля phone удалить скобки () и тире — между цифрами?
Скажите, Вы не знаете, как мне массово тоже из поля phone удалить скобки () и тире — между цифрами?
Так только цифры останутся:
foreach ($modx->getIterator('modUser') as $user) {
$profile = $user->getOne('Profile');
$phone = preg_replace("/[^,.0-9]/", '', $profile->get('phone'));
$user->set('username', $phone);
$user->save();
}
и вот
joxi.ru/1A5qe74uwwPg9A
из поля не убрались лишние
preg_replace("/[^0-9\/+]/"
или
preg_replace("/[^0-9+]/"
может надо?
joxi.ru/1A5qe74uwwPg9A
из поля не убрались лишние
preg_replace("/[^0-9\/+]/"
или
preg_replace("/[^0-9+]/"
может надо?
Не знаю, выражение работает для всех вариантов:
Так надо убрать только скобки () и тире — между цифрами
+7 должно остаться
Разве не такое выражение для этого
+7 должно остаться
Разве не такое выражение для этого
/[^0-9+]/
? //....
$arr = array('(', ')', '-', '—', '–', ' ');
$phone = str_replace($arr, '', $profile->get('phone'));
//....
<?php
foreach ($modx->getIterator('modUser') as $user) {
$profile = $user->getOne('Profile');
$arr = array('(', ')', '-');
$phone = str_replace($arr, '', $profile->get('phone'));
$user->save();
}
отчет<pre>
SQL time: 0,7248 s
SQL queries: 3780
PHP time: 5,8171 s
Total time: 6,5420 s
Memory: 12 MB
</pre>
результат joxi.ru/823NelZCww7KYmничего не изменилось
Вы не пишете ничего в поле, потому что пропустили:
Полный код:
$user->set('username', $phone);
Полный код:
foreach ($modx->getIterator('modUser') as $user) {
$profile = $user->getOne('Profile');
$arr = array('(', ')', '-');
$phone = str_replace($arr, '', $profile->get('phone'));
$user->set('username', $phone);
$user->save();
}
Результат тот же joxi.ru/RmzROJWCVVPaRm
Все остается, как и было.
Все остается, как и было.
Так-то работает
joxi.ru/5mdlpP8CJJ705m
joxi.ru/5mdlpP8CJJ705m
<?php
$phones = array(
'+7(123)456-78-91'
);
foreach($phones as $phone) {
echo preg_replace("/[^0-9+]/", '', $phone);
}
А так нет<?php
foreach ($modx->getIterator('modUser') as $user) {
$profile = $user->getOne('Profile');
$phone = preg_replace("/[^0-9+]/", '', $profile->get('phone'));
$user->set('username', $phone);
$user->save();
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.