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

SQL запрос для получения URL вложения по имени?

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

SQL запрос для получения URL вложения по имени?

Сообщение mike2003 »

Подскажите SQL запрос для получения URL файла к номеру сообщения с определенным именем?
Т.е. в теме первое сообщение имеет вложенную картинку, например cover.jpg или cover.gif или cover.png
Как мне получить ее URL, что бы вставить в темплайте позже?
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: SQL запрос для получения URL вложения по имени?

Сообщение Татьяна5 »

Если в простейшем варианте:

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

$sql = 'SELECT attach_id
			FROM ' . ATTACHMENTS_TABLE . '
			WHERE real_filename = \'' . $filename . '\'';

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

$download_link = append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $attachment['attach_id']);
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

Re: SQL запрос для получения URL вложения по имени?

Сообщение mike2003 »

а где тут указание на номер темы?? Ну как бы надо сослаться на первое сообщение темы, зная ее номер $row['topic_id']? Как правильно сделать?
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

Re: SQL запрос для получения URL вложения по имени?

Сообщение mike2003 »

Вот так сделал для имени картинки poster.*

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

				$sql3 = 'SELECT a.attach_id, a.post_msg_id, a.physical_filename, a.real_filename, a.extension
				FROM ' . ATTACHMENTS_TABLE . ' a, ' . TOPICS_TABLE . ' t
					WHERE a.topic_id ='.$row['topic_id'].'
					AND a.real_filename LIKE  \'poster.%\'
					AND a.post_msg_id = t.topic_first_post_id';
				$result_cover_attach = $this->db->sql_query_limit($sql3, 1);
				while ($row_cover_attach = $this->db->sql_fetchrow($result_cover_attach))
				{
					$pictures_file = generate_board_url() ."/download/file.php?id=" . $row_cover_attach['attach_id'];
				}
				$this->db->sql_freeresult($result_cover_attach);
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: SQL запрос для получения URL вложения по имени?

Сообщение Sheer »

mike2003 писал(а): LIKE \'poster.%\'
Потенциальная дырка. Кури функцию sql_escape
Пример использования

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

$sql_where = "username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'"; 
Или же еще лучше

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

$sql_where = (strpos($author, '*') !== false) ? ' username_clean ' . $db->sql_like_expression(str_replace('*', $db->get_any_char(), utf8_clean_string($author))) : " username_clean = '" . $db->sql_escape(utf8_clean_string($author)) . "'"; 
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 932 раза

Re: SQL запрос для получения URL вложения по имени?

Сообщение LavIgor »

Sheer, а можно поподробнее про дырку?
В запросе выше ведь в LIKE данные пользовательского ввода не подставляются.
Из всех данных туда только ID темы попадает, перед которым можно (int) поставить.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: SQL запрос для получения URL вложения по имени?

Сообщение Sheer »

Чё-то я не понял этого

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

AND a.real_filename LIKE  \'poster.%\'
там по идее должно быть $poster
Ну в общем, если в имени будет апостроф, то это приведет к фатальной ошибке sql. Может и не дыра, но кавычки в любом случае экранировать надо.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 932 раза

Re: SQL запрос для получения URL вложения по имени?

Сообщение LavIgor »

Sheer, это не переменная, а префикс.
Автор ищет файлы с префиксом poster., прикреплённые к первым сообщениям тем.
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

Re: SQL запрос для получения URL вложения по имени?

Сообщение mike2003 »

уху
такой вопрос
mike2003 писал(а): SELECT a.attach_id, a.post_msg_id, a.physical_filename, a.real_filename, a.extension
вот это дело сильно нагружает сервер или лучше ограничиться только нужными полями?
некоторые пишут сразу SELECT *
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: SQL запрос для получения URL вложения по имени?

Сообщение Sheer »

mike2003 писал(а): некоторые пишут сразу SELECT *
Некоторые сразу пишут неправильно или указывают * , если действительно нужна выборка по всем полям.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
mike2003
phpBB 2.0.5
Сообщения: 452
Стаж: 8 лет
Благодарил (а): 27 раз
Поблагодарили: 8 раз

Re: SQL запрос для получения URL вложения по имени?

Сообщение mike2003 »

Некоторые сразу пишут
какой то бессмысленный ответ. вроде просто спросил
нельзя просто сказать да или нет?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: SQL запрос для получения URL вложения по имени?

Сообщение Sheer »

mike2003 писал(а): лучше ограничиться только нужными полями?
Да. Такой ответ устроит?
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Ответить

Вернуться в «Для разработчиков»