Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Нужна помощь по PHP.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
event
Отправлено: 06 Декабря, 2011 - 08:27:27
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Добрый день.
Есть форум, хочу запретить доступ простым пользователям в некоторые Форумы, собственно
написал такой код
PHP:
скопировать код в буфер обмена
  1. if($forumid == 2 && get_user_class() < UC_MODERATOR)
  2. {
  3. stderr("Ошибка", "У вас нет доступа");
  4. }
  5.  

Проверил работает, такс теперь мне еще нужно запрететить доступ к одному форуму делаю так:
PHP:
скопировать код в буфер обмена
  1. if($forumid == 2 && 3 && get_user_class() < UC_MODERATOR)
  2. {
  3. stderr("Ошибка", "У вас нет доступа");
  4. }

Проверил, закрывает только один форум, второй открыт, попробовал так:
PHP:
скопировать код в буфер обмена
  1. if($forumid == 2 || 3 && get_user_class() < UC_MODERATOR)
  2. {
  3. stderr("Ошибка", "У вас нет доступа");
  4. }

Закрыло вообще доступы ко всем форумам, ну вот ребят как тут быть?, спасибо заранее.

(Отредактировано автором: 06 Декабря, 2011 - 08:28:40)

 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2011 - 08:29:12
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




PHP:
скопировать код в буфер обмена
  1. $rgPrivateForums=array(2,3);
  2. if(in_array($forumid, $rgPrivateForums)  && get_user_class() < UC_MODERATORS)
  3. {
  4.    //...
  5. }

- потом добавляйте id форума в массив, так гораздо удобнее.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
event
Отправлено: 06 Декабря, 2011 - 08:32:48
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




EuGen
Спасибо то что надо работает, тыкнул спасибо.
 
 Top
Самогонщик
Отправлено: 06 Декабря, 2011 - 08:36:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




Для полноты картины: $forumid == 2 || 3 рассматривается как ($forumid == 2) || (3), а 3 всегда истинно, поэтому перекрыло всем.

PHP:
скопировать код в буфер обмена
  1. if(($forumid == 2 || $forumid == 3) && get_user_class() < UC_MODERATOR)
  2. {
  3. stderr("Ошибка", "У вас нет доступа");
  4. }
 
 Top
event
Отправлено: 06 Декабря, 2011 - 08:38:45
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Хммм, смотри переделал на такой вариант, мне так удобней:
PHP:
скопировать код в буфер обмена
  1. $accessforum['sysop'] = array(2,3);
  2. $accessforum['administrator'] = array(4,5);
  3. $accessforum['moderator'] = array(6,7);
  4.  
  5. function accessforum(){
  6. global $accessforum;
  7.  
  8.   if(in_array($forumid, $accessforum['sysop']) && get_user_class() < UC_MODERATORS)
  9.   {
  10.   stderr("Ошибка", "У вас нет доступа");
  11.   }
  12.  
  13. }


Но перестало работать почему-то

(Отредактировано автором: 06 Декабря, 2011 - 08:40:01)

 
 Top
Самогонщик
Отправлено: 06 Декабря, 2011 - 08:43:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




сделай отладочный вывод с помощью dump_var для

in_array($forumid, $accessforum['sysop']) && get_user_class() < UC_MODERATORS
in_array($forumid, $accessforum['sysop'])
get_user_class() < UC_MODERATORS
$forumid
$accessforum['sysop']
get_user_class()
UC_MODERATORS

Короче, нужно понять где и что идёт не так
 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2011 - 08:43:25
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




event
Ваша функция ничего не подозревает о переменной $forumid
Самогонщик пишет:
dump_var для

И опять наоборот. Таки var_dump


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
event
Отправлено: 06 Декабря, 2011 - 08:45:55
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




EuGen
Спасибо помогло, global в функции сделал еще на $forumid.
 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2011 - 08:49:03
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




event
Я бы советовал убрать все global из функции и заменить их на параметры. Примерно так:
PHP:
скопировать код в буфер обмена
  1. function accessforum(&$rgAccess, $sRole, $iForumId)
  2. {
  3.   if(in_array($iForumId, $rgAccess[$sRole]) && get_user_class() < UC_MODERATORS)
  4.   {
  5.      stderr("Ошибка", "У вас нет доступа");
  6.   }
  7. }


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Самогонщик
Отправлено: 06 Декабря, 2011 - 08:51:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




EuGen, испортил часы отладки и переписки..

EuGen пишет:
И опять наоборот. Таки var_dump
Ага, нужно впредь быть внимательнее.
 
 Top
event
Отправлено: 06 Декабря, 2011 - 08:53:12
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




EuGen
А чем global плох?, я его много где использую, скажи пожалуйста.
 
 Top
EuGen Администратор
Отправлено: 06 Декабря, 2011 - 08:57:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




event
Тем, что порождает зависимости и неожиданное поведение функций/методов. Вот есть у Вас функция, как Вы написали. И есть код, который ее вызывает. В Вашем варианте - без параметров. Вот и подумайте:
0. Глядя на вызов функции, можно ли догадаться о том, по каким данным она строит результат?
1. Если Вам нужно перенести код в другой проект, сможете ли Вы это сделать, не изменяя функции?
2. Если у Вас меняются глобальные переменные, сможете ли Вы спрогнозировать, как изменится поведение функций, использующих их? (Или хотя бы понять, на какие функции это изменение повлияет)
3. Если с ответами на вопросы 0.-2. сейчас трудностей нет (или Вы согласны с ними мириться), представьте, что на них нужно ответить спустя полгода-год после того, как Вы написали код.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Самогонщик
Отправлено: 06 Декабря, 2011 - 08:59:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




Он прибивает ваш код гвоздями к глобальным переменным. Через некоторое время проект вырастает, глобальных переменных разводится много и становится совершенно не понятно за что они отвечают и где аукнется любое их изменение.

Усложняют поддержку короче.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB