hook_user[РЕШЕНО]

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

Аватар пользователя cinderella cinderella 6 сентября 2010 в 11:04

Нужно чтобы после того как пользователь авторизуется,в сессию записалась определенная переменная

вот код подскажите пожалуйста в чем ошибка


<?php
// $Id$

function before_login_user($op, &$edit, &$account$category NULL) {

  if (

$op == 'login' && $category == 'account') {
  global 
$user
$q=db_query("select * from {term_user} where uid=".$user->uid) ;
while (
$r=db_fetch_object($q)){
$_SESSION['idgor']=$r[1];
  }}
}
?>

Комментарии

Аватар пользователя graker graker 6 сентября 2010 в 11:08

А зачем тут проверка category == 'account'? Это раз.

$r = db_fetch_object, а обращаетесь как к массиву. Это два.

Используйте плейсхолдеры в запросах к БД. Это три.

Аватар пользователя cinderella cinderella 6 сентября 2010 в 12:05
<?php
// $Id$

function before_login_user($op, &$edit, &$account$category NULL) {

  if (

$op == 'login') {
  global 
$user
$q=db_query("select * from {term_user} where uid=%d",$user->uid) ;
while (
$r=mysql_fetch_row($q)){
$_SESSION['idgor']=$r->tid;
  }}
}
?>

все равно не работает

Аватар пользователя graker graker 6 сентября 2010 в 12:29

Я надеюсь, это у вас модуль?

Не пашет - значит раскручивайте, что у вас на каждом этапе из БД читается. Попадает ли программа внутрь while, что внутри $r.

Аватар пользователя graker graker 6 сентября 2010 в 12:39

А внутрь $op == 'login' попадает? Функция вообще - исполняется?

И повторяю вопрос:

Quote:
Я надеюсь, это у вас модуль?

Аватар пользователя natbampo natbampo 6 сентября 2010 в 12:54

Так не верно:
<?php
while ($r=mysql_fetch_row($q)){
$_SESSION['idgor']=$r->tid;
?>
нужно:
<?php
// ...
$_SESSION['idgor'] = $r[0];
?>
что вообще не корректно, т.к. надо использовать api друпала:
<?php
select xxx from {term_user} where uid=".$user->uid) ;
while ($r=db_fetch_object($q)){
$_SESSION['idgor']=$r->xxx;
?>
p.s. про заполнители(%d) говорили.

Аватар пользователя cinderella cinderella 10 ноября 2015 в 11:46

"graker" wrote:
А внутрь $op == 'login' попадает? Функция вообще - исполняется?

И повторяю вопрос:
Цитата:

Я надеюсь, это у вас модуль?

Да это модуль и похоже функция сама не исполняется,во внутрь $op == 'login' не попадает

Аватар пользователя cinderella cinderella 6 сентября 2010 в 14:40

before_login.info:

; $Id:
name = before_login
core = 6.x

before_login.module:

<?php
// $Id$

function before_login_user($op, &$edit, &$account$category NULL) {

  if (

$op == 'login') {
  global 
$user
$q=db_query("select * from {term_user} where uid=%d"$user->uid) ;
while (
$r=db_fetch_object($q)){
$_SESSION['idgor']=$r[1];
  }}
}
?>
Аватар пользователя graker graker 6 сентября 2010 в 15:46

Имя модуля в .info-файле должно быть в кавычках. И description тоже обязательно.
Загляните вот сюда, тут написано как .info-файлы писать: http://drupal.org/node/231036

А вообще, мадам Виктория, вы столько ошибок уже сделали, что может надо было не с нуля модуль делать, а скачать с D.org готовый, для шаблона, и от него плясать? Ну, чтоб хотя бы увидеть, как правильно надо делать.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 6 сентября 2010 в 16:05

"graker" wrote:
А вообще, мадам Виктория, вы столько ошибок уже сделали, что может надо было не с нуля модуль делать, а скачать с D.org готовый, для шаблона, и от него плясать? Ну, чтоб хотя бы увидеть, как правильно надо делать.

Module Builder

Аватар пользователя cinderella cinderella 7 сентября 2010 в 11:29

Я вот что нашла,

Если по крайней мере один модуль переадресует Drupal, в то время как $op == "логин" в hook_user (), то другое выполнение хука никогда не будет вызываться.

http://api.drupal.org/api/function/hook_user/6

так что не в модуле вообще проблема, нужно найти модуль который вызывает хук

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 7 сентября 2010 в 11:37

Стоп. А почему не пытаться записывать данные сессии во время каждого просмотра любой страницы?
Ну, что-то вроде того:

<?php

if (!isset($_SESSION[])){
  global 
$user
  
$q=db_query("select * from {term_user} where uid=".$user->uid) ;

  while (

$r=db_fetch_object($q)){
    
$_SESSION['idgor']=$r->field;
  }
}

?>
Аватар пользователя G.A. Vinogradov G.A. Vinogradov 7 сентября 2010 в 11:37

G.A. Vinogradov wrote:
Стоп. А почему не пытаться записывать данные сессии во время каждого просмотра любой страницы?
Ну, что-то вроде того:

<?php

if (!isset($_SESSION['idgor'])){
  global 
$user
  
$q=db_query("select * from {term_user} where uid=".$user->uid) ;

  while (

$r=db_fetch_object($q)){
    
$_SESSION['idgor']=$r->field;
  }
}

?>