Добрый вечер!
Прошу помощи, так как не пойму в чем ошибка.
Хукаю hook_user и возникли проблемы с событием insert.
Вот что есть:
switch($op){
case 'register':
$form['role_reg_user'] = array(
'#type' => 'radios',
'#title' => t('Вы регистрируетесь как'),
'#required' => true,
'#default_value' => 0,
'#options' => array('Продавец', 'Покупатель'),
'#weight' => 1);
return $form;
case 'insert':
$ar=(int)$edit['uid'];
if(isset($edit['role_reg_user']) && $edit['role_reg_user']=='0'){
if(isset($ar) && $ar!="") db_query('INSERT INTO {users_roles} (`uid`, `rid`) VALUES ("%d", "%d")', $ar, 4);
else drupal_set_message($ar);
}
}
}
но в бд не происходит вставка, если переменной присвоить число, то все работает. drupal_set_message($ar) - выводит нормальный id если использовать вне if.
Кто знает, подскажите, какие переменные доступные при insert? $ar=(int)$edit['uid']; - эта запись получилась случайно. В API смотрел, примера не нашел с insert.
Заранее спасибо!
Комментарии
Почему $edit['uid']? uid находится в $account->uid. И почитайте стандарты кодинга перед тем как писать запросы к БД http://drupal.org/coding-standards
Спасибо за ответ! $edit['uid'] - как писал, случайно выяснилось, что и через него можно получить данные. С $account->uid пробовал вначале - результат был тот же, как то так и осталось $edit['uid'].
А по запросам подскажите пожалуйста! Учил по книге Д.Вандюк, там такие примеры запроса. А то по ссылке не пойму где смотреть.
Запрос переписал в таком виде
db_query("INSERT INTO {users_roles} (uid, rid) VALUES (%d, 4)", $account->uid)
Странный какой-то код у вас...
Суть кода какой? Присвоить роль пользователю?
Да
<?php
$account->roles[$role['rid']] = $role['name'];
$edit['roles'] = $account->roles;
?>
А еще меня смущает, что берете (int), а потом сравниваете с ""... Разве там уже не нуль будет при этом?
Спасибо! Код работает, но поле rid = 0. Сейчас попробую разобраться.
А еще меня смущает... Проверял через watchdog('num',$ar); - цифры нужные, только тип переменной строковый, вот и приводил ее к int.
В PHP нет явного указания типа переменной.
явно нет, но из-за того, что не работал код,уже делал всевозможные проверки и записывал в журнал(Сообщение string)
За код выше - большое спасибо! Разобрался работает.