Форумы портала PHP.SU » » Работа с СУБД » Поиск строк и значений в БД с подключением переменных php

Страниц (2): [1] 2 »
 

1. rasl89 - 08 Июня, 2020 - 20:16:57 - перейти к сообщению
Помогите сформировать поиск по бд.

В PHP определяется ник пользователя и заносится в переменную: $autor_posts.

Есть некая БД, в ней есть таблица bs_usermeta, с столбцами: umeta_id, user_id, meta_key, meta_value.

1. В столбце meta_value ищем ник $autor_posts
2. когда находим ник, определяем в этой строке ID из столбца user_id
3. далее ищем по всем строкам совпадение по трем столбцам: user_id, meta_key, meta_value
user_id - должно быть искомое в п.2 ID
meta_key - строка mjob_delivery_order
meta_value - там искомое число - все ради этого числа
заносим число в переменную и выводим где нужно echo...
Приложил скин таблицы.

Если кратко: есть ник, по нему определяям ID, и ищем совпадение в одной строке трех столбов: ID(определенное по нику)+meta_key(mjob_delivery_o rder) +meta_value (нужное число).
2. Albert - 09 Июня, 2020 - 01:39:35 - перейти к сообщению
Если у вас user_id - это ID пользователя, а meta_key - это его ник, то почему в таблице дублируются user_id? Причем с разными meta_key...
3. rasl89 - 09 Июня, 2020 - 09:46:16 - перейти к сообщению
Albert пишет:
Если у вас user_id - это ID пользователя, а meta_key - это его ник, то почему в таблице дублируются user_id? Причем с разными meta_key...

Спасибо за ответ.

Эта таблица стандартная на WordPress.
Туда забиты все данные по пользователям по порядку. Сначала все поля для ID 1, потом ниже...
Для этого я и хочу организовать поиск.
Есть ник, по нему определяям ID, и ищем совпадение в одной строке трех столбов: ID(определенное по нику)+meta_key(mjob_delivery_o rder) +meta_value (нужное число).
4. Albert - 09 Июня, 2020 - 16:01:42 - перейти к сообщению
Если это wp. то получить объект пользователя по логину, нику или почте можно с помощью функции get_user_by().
PHP:
скопировать код в буфер обмена
  1. // получаем объект пользователя по нику
  2. $user = get_user_by('slug', $autor_posts);
  3. // получаем значение поля mjob_delivery_order
  4. $mjob_delivery_order = $user->get('mjob_delivery_order');
5. rasl89 - 09 Июня, 2020 - 20:13:27 - перейти к сообщению
Albert пишет:
Если это wp. то получить объект пользователя по логину, нику или почте можно с помощью функции get_user_by().
PHP:
скопировать код в буфер обмена
  1. // получаем объект пользователя по нику
  2. $user = get_user_by('slug', $autor_posts);
  3. // получаем значение поля mjob_delivery_order
  4. $mjob_delivery_order = $user->get('mjob_delivery_order');


отлично, очень просто и работает!
только у меня возникла следующая проблема
то, что мы сделали я вывожу в публичном профиле количество продаж, когда заходишь в профиль к какому-то пользователю; теперь когда заходишь к себе в профиль там ошибки:
Fatal error: Uncaught Error: Call to a member function get() on bool in
Error: Call to a member function get() on bool in
(Добавление)
Разобрался! Не туда поставил вывод!
Все работает четко! спасибо большое!

Еще вопрос, тогда при помощи такой же схемы
я сделаю пополнение баланса...
то есть:
платеж проходит...возвращается успех- далее отрабатывает:
PHP:
скопировать код в буфер обмена
  1. $user = get_user_by('slug', $autor_posts);
  2. $ae_user_wallet = $user->get('ae_user_wallet');


только вот проблема вот в чем:
значение ae_user_walle имеет такой вид:
O:16:"AE_VirtualWallet":2:{s:8:"currency";O:11:"AE_Currency":4:{s:4:"code";s:3:"usd";s:6:"signal";s:1:"$";s:9:"isDefault";b:1;s:12:"rateExchange";i:1;}s:7:"balance";d:300.15;}

как прибавить некое число из переменной к "balance";d:300.15;?
таким образом пополнится баланс
6. Albert - 09 Июня, 2020 - 22:16:01 - перейти к сообщению
Для редактирования данных о пользователе есть функция wp_update_user()
7. rasl89 - 09 Июня, 2020 - 22:26:01 - перейти к сообщению
Albert пишет:
Для редактирования данных о пользователе есть функция wp_update_user()


очень крутые штуки! не знал что есть такое на WP.
только непонятно как как прибавить некое число из переменной к "balance";d:300.15;?
8. rasl89 - 11 Июня, 2020 - 22:41:00 - перейти к сообщению
Albert пишет:
Для редактирования данных о пользователе есть функция wp_update_user()


получается так:
PHP:
скопировать код в буфер обмена
  1. $balance_user="d:300.00";
  2. $a=explode(':',$balance_user);
  3. $balance_user=$a[0].':'.($a[1]+$m_amount);


$balance_user="d:300.00" - как сюда передать цифру из ячейки? ведь у всех пользователей разные балансы
9. LIME - 12 Июня, 2020 - 01:42:04 - перейти к сообщению
получается что разные
(Добавление)
получается что я дофига сильно ошибобаюсь
(Добавление)
я много раз работал даже на вп
смешно смотреть на вас на мелких
(Добавление)
каждого люблю...мелкий сергей привет тебе
(Добавление)
это форум портала ...
интересно)) ктото тут есть еще такой кто сумеет со мной...слабаки
никто не сумеет
10. rasl89 - 12 Июня, 2020 - 09:44:18 - перейти к сообщению
LIME пишет:
получается что разные
(Добавление)
получается что я дофига сильно ошибобаюсь
(Добавление)
я много раз работал даже на вп
смешно смотреть на вас на мелких
(Добавление)
каждого люблю...мелкий сергей привет тебе
(Добавление)
это форум портала ...
интересно)) ктото тут есть еще такой кто сумеет со мной...слабаки
никто не сумеет


Lime, а что по моему вопросу?
11. Vladimir Kheifets - 14 Июня, 2020 - 14:02:03 - перейти к сообщению
rasl89 пишет:
Еще вопрос, тогда при помощи такой же схемы
я сделаю пополнение баланса...
значение ae_user_walle имеет такой вид:
O:16:"AE_VirtualWallet":2:{s:8:"currency";O:11:"AE_Currency":4:{s:4:"code";s:3:"usd";s:6:"signal";s:1:"$";s:9:"isDefault";b:1;s:12:"rateExchange";i:1;}s:7:"balance";d:300.15;}
как прибавить некое число из переменной к "balance";d:300.15;?
таким образом пополнится баланс

Добрый день!
Если принимать структуру данных, как неизбежную реальность,
то можно сделать так:
Спойлер (Отобразить)
Удачи!
12. rasl89 - 14 Июня, 2020 - 21:16:22 - перейти к сообщению
Vladimir Kheifets пишет:

?>[/PHP][/spoiler]Удачи!


Владимир, спасибо! Как всегда выручаете!
13. Строитель - 14 Июня, 2020 - 23:28:06 - перейти к сообщению
rasl89 пишет:
только непонятно как как прибавить некое число из переменной к "balance";d:300.15;?
По структуре строки не трудно догадаться, что из БД вы получаете сериализованный объект. Для работы с подобными строками есть штатная функция unserialize(). Всё, что вам надо сделать - преобразовать строку в объект:
Спойлер (Отобразить)
После сериализации объекта модифицированную строку можно снова записать в БД.

Нужно обратить внимание на использование объектов класса AE_VirtualWallet и AE_Currency, они должны быть описаны (объявлены) в вашей программе. Если по каким-то причинам эти классы не были подгружены, то можно описать их перед началом десериализации:
Спойлер (Отобразить)

(Добавление)

Vladimir Kheifets, ох ё-маё!

Радость
14. rasl89 - 15 Июня, 2020 - 07:31:47 - перейти к сообщению
Строитель пишет:

По структуре строки не трудно догадаться, что из БД вы получаете сериализованный объект. Для работы с подобными строками есть штатная функция unserialize(). Всё, что вам надо сделать - преобразовать строку в объект:

После сериализации объекта модифицированную строку можно снова записать в БД.

Нужно обратить внимание на использование объектов класса AE_VirtualWallet и AE_Currency, они должны быть описаны (объявлены) в вашей программе. Если по каким-то причинам эти классы не были подгружены, то можно описать их перед началом десериализации:



Вот это да, век - живи, век- учись!
Спасибо большое!
15. rasl89 - 15 Июня, 2020 - 13:26:49 - перейти к сообщению
Строитель пишет:
rasl89 пишет:
только непонятно как как прибавить некое число из переменной к "balance";d:300.15;?
По структуре строки не трудно догадаться, что из БД вы получаете сериализованный объект. Для работы с подобными строками есть штатная функция unserialize(). Всё, что вам надо сделать - преобразовать строку в объект:
Спойлер (Отобразить)
После сериализации объекта модифицированную строку можно снова записать в БД.

Нужно обратить внимание на использование объектов класса AE_VirtualWallet и AE_Currency, они должны быть описаны (объявлены) в вашей программе. Если по каким-то причинам эти классы не были подгружены, то можно описать их перед началом десериализации:
Спойлер (Отобразить)

(Добавление)

Vladimir Kheifets, ох ё-маё!

Радость


Вопрос, как сюда передать значение переменной пополнения баланса?
единственный вопрос как сюда переменную передать:
$object->balance += 100;
$object->balance += $m_amount; ?

 

Powered by ExBB FM 1.0 RC1