Вопросы по hook_user (Решено)

Главные вкладки

Аватар пользователя mnigma mnigma 8 ноября 2010 в 19:08

Добрый вечер!
Прошу помощи, так как не пойму в чем ошибка.
Хукаю hook_user и возникли проблемы с событием insert.
Вот что есть:

function role_reg_user($op, &$edit, &$account, $category = NULL){
    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.
Заранее спасибо!

Комментарии

Аватар пользователя mnigma mnigma 9 ноября 2010 в 0:08

Спасибо за ответ! $edit['uid'] - как писал, случайно выяснилось, что и через него можно получить данные. С $account->uid пробовал вначале - результат был тот же, как то так и осталось $edit['uid'].
А по запросам подскажите пожалуйста! Учил по книге Д.Вандюк, там такие примеры запроса. А то по ссылке не пойму где смотреть.

Запрос переписал в таком виде db_query("INSERT INTO {users_roles} (uid, rid) VALUES (%d, 4)", $account->uid)

Аватар пользователя Softovick Softovick 9 ноября 2010 в 0:24
<?php
$account
->roles[$role['rid']] = $role['name'];
$edit['roles'] = $account->roles;
?>

А еще меня смущает, что берете (int), а потом сравниваете с ""... Разве там уже не нуль будет при этом?

Аватар пользователя mnigma mnigma 9 ноября 2010 в 0:34

Спасибо! Код работает, но поле rid = 0. Сейчас попробую разобраться.

А еще меня смущает... Проверял через watchdog('num',$ar); - цифры нужные, только тип переменной строковый, вот и приводил ее к int.

Аватар пользователя mnigma mnigma 9 ноября 2010 в 0:49

Softovick wrote:
В PHP нет явного указания типа переменной.

явно нет, но из-за того, что не работал код,уже делал всевозможные проверки и записывал в журнал(Сообщение string)
За код выше - большое спасибо! Разобрался работает.