Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Правильный MySQL-запрос

Проблемы с установкой или работой phpBB 3.2.x? Получите помощь здесь!
Внимание: с 7 ноября 2020 года phpBB Group завершено дальнейшее развитие phpBB версии 3.2, а с 1 августа 2024 года будет прекращена её поддержка.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.

Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
AAVasilev
phpBB 1.2.0
Сообщения: 12
Стаж: 6 лет 2 месяца
Поблагодарили: 2 раза

Правильный MySQL-запрос

Сообщение AAVasilev »

Приветствую всех!
Проконсультируйте, пожалуйста, на предмет правильного запроса для проверки как id_user-а так и принадлежности его к определённой группе.
На двойке я делал следующим образом (шапка кода для разрешения скачивания файлов)

Код: Выделить всё


//
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
if (!$userdata['session_logged_in']) 
{ 
  redirect(append_sid("login.$phpEx?redirect=index.$phpEx", true)); 
} 

//Проверка на принадлежность к одной из 4 групп
//
$sql = 'SELECT group_id, user_id FROM ' . USER_GROUP_TABLE . ' 
        WHERE group_id IN (2234, 3182, 3386, 3437) 
        AND user_id=' . $userdata['user_id'] . '  
        LIMIT 4'; 
            
$itog = 0;    
       if ( !($result = $db->sql_query($sql)) ) 
         {
	   message_die(GENERAL_ERROR, 'Failed obtaining user group lists', '', __LINE__, __FILE__, $sql);
         }
 
$itog = $db->sql_numrows($result); 
$db->sql_freeresult($result);
  

if (($itog == 0) && ($userdata['user_level'] !=ADMIN )) 
   {
			$message = $lang['Not_Openload_Group'];
			$message .= '<br /><br />' . sprintf($lang['Click_return_page'], '<a href="javascript:history.back()">', '</a>');
			message_die(GENERAL_MESSAGE, $message);
   }  

//закончили проверку
-------------------------------
дальше код проверки наличия файла и его дальнейшего скачивания
В лоб на трёшке это не взлетает :) признаюсь честно с кодом пока не копался

Отправлено спустя 51 минуту 21 секунду:
Так, первичный вопрос снимается, здесь похоже адаптировал, но теперь упёрся в глабальную переменную.
Раньше использовал вот такой код

Код: Выделить всё

if (isset($_REQUEST['load'])  && (strlen($_REQUEST['load']) <= 15) && (htmlentities(strip_tags($_REQUEST['load']))))
   {

   if (array_key_exists($_REQUEST['load'], $fullarray)) 
	 {

      if (file_exists($fullarray[$_REQUEST['load']]))
		{
	
       //устанавливаем переменные на название, размер и расширение файла
       //
       $filename = ($fullarray[$_REQUEST['load']]);
       $infosize = filesize($filename);
       $infoname = substr(strrchr($filename, '/'),1);
       $condisp='Content-Disposition: attachment; filename='.$infoname.'';
       $file_extension = strtolower(substr(strrchr($filename,'.'),1));
Но сейчас, за использование $_REQUEST трёшка ругается так, что аж монитор трясётся :) и как это обойти?
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 14 лет 5 месяцев
Благодарил (а): 37 раз
Поблагодарили: 261 раз

Re: Правильный MySQL-запрос

Сообщение Pazh »

первый вопрос решается вызовом функции group_memberships
второй вопрос решается открытием любого php файла из корня "трешки" и поиском request_var
Помощь в ЛС/email только за WM или ЮMoney
AAVasilev
phpBB 1.2.0
Сообщения: 12
Стаж: 6 лет 2 месяца
Поблагодарили: 2 раза

Re: Правильный MySQL-запрос

Сообщение AAVasilev »

С корректностью mysql-запроса пока не могу утверждать что всё отлично (группы пока нет), а вот глобальные переменные осилил, помогла вот эта ссылка https://wiki.phpbb.com/PhpBB3.1/RFC/Request_class ну и подсказка Pazh, направил по месту так сказать :)

ну и код решения, вдруг кто-то тоже упёрся в этот вопрос:

Код: Выделить всё

Создаём переменную
$load = $request->variable('load', '');
и теперь все глобальные объявления [b]$_REQUEST['load'][/b] заменяем на [b]$load[/b]
(пример адаптируйте под свои требования)
AAVasilev
phpBB 1.2.0
Сообщения: 12
Стаж: 6 лет 2 месяца
Поблагодарили: 2 раза

Re: Правильный MySQL-запрос

Сообщение AAVasilev »

Опять я к Вам :) вообщем крутил-вертел и решил реализовать следующую логику
1) Страница отображается для всех (гости и пользователи) - ЕСТЬ
2) Скачивать файлы с этой страницы гости не имею права, только после регистрации - ЕСТЬ
3) Зарегистрированные пользователи могут скачивать файлы ( только после размещения минимум трёх сообщений) - НЕТ

От привязки к группам решил пока отказаться, файлы не настолько секретные, чтобы группы городить, но теперь нужен правильный mysql-запрос к необходимой таблице. Т.е. узнать сколько у данного user_id сообщений и если 3 или более, то пусть себе скачивает на здоровье. Понимаю что запрос несложный, но сам уже начинаю тупить, перегрелся за монитором :) подскажите плиз

Забыл ещё один момент. При добавлении своей языковой константы, какие файлы необходимо редактировать? помимо language
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Правильный MySQL-запрос

Сообщение Sheer »

Код: Выделить всё

$sql = 'SELECT user_id
	FROM ' . USERS_TABLE . '
	WHERE user_posts > 3';
AAVasilev писал(а): 17.03.2018 15:59 какие файлы необходимо редактировать?
Никакие.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
AAVasilev
phpBB 1.2.0
Сообщения: 12
Стаж: 6 лет 2 месяца
Поблагодарили: 2 раза

Re: Правильный MySQL-запрос

Сообщение AAVasilev »

Sheer, спасибо добрый человек :)
AAVasilev
phpBB 1.2.0
Сообщения: 12
Стаж: 6 лет 2 месяца
Поблагодарили: 2 раза

Re: Правильный MySQL-запрос

Сообщение AAVasilev »

Прав был Pazh, ох как прав ))
в итоге остановился на использовании функции
group_memberships

Код: Выделить всё

$ruffgroup = array( здесь указал необходимые group_id);
 if (group_memberships($ruffgroup,$user->data['user_id'],true))
         {
         ... дальше код загрузки файла...
         ... если пользователь не соответствует требованиям, то ...
         }
                else
		 {
		send_status_line(403, 'Forbidden');
		trigger_error('SORRY_LOAD_FILE_POST_COUNT');
		 }
		       
Правда пришлось поставить мод
autogroup
он автоматически, после 3 сообщений, добавляет пользователей в указанную группу, а через неё уже дёргаем юзеров на проверку

Вернуться в «Поддержка phpBB 3.2.x»