Итак, обычная ссылка на вложение в форуме выглядит как-то так:
Код: Выделить всё
<a href="/forum/download/file.php?id=374">Link</a>
Код: Выделить всё
<a href="/forum/download/file.php?id=374">Link</a> (<?php echo($downarr[374]);?> downloads)
Чтобы все это заработало - в начале страницы (или отдельном файле - об этом ниже) надо разместить следующий код PHP, создающий нам массив $downarr, в котором идентификатор элемента массива - ID-вложения, а значение элемента массива - кол-во загрузок этого вложения:
Код: Выделить всё
<?php
$host="localhost";
$user="user_bd";
$pass="pass";
$db_name="forum_bd";
$link=mysql_connect($host,$user,$pass);
mysql_select_db($db_name,$link);
mysql_query("SET NAMES 'utf8'",$link);
$results = mysql_query("SELECT `attach_id`, `download_count` FROM `table_prefix_attachments`",$link);
while ($resultq = mysql_fetch_array($results)) {
$downarr[$resultq['attach_id']] = $resultq['download_count'];
}
mysql_free_result($results);
?>
$host - указали хост, как в файле форума config.php. Если используется особый порт - пишем через двоеточие localhost:port.
$user, $pass, $db_name - логин, пароль и имя базы данных, как в файле форума config.php.
$link=mysql_connect($host,$user,$pass); - производим коннект к базе данных.
mysql_query("SET NAMES 'utf8'",$link); - устанавливаем кодировку чтения юникод. Строку можно пропустить, но пусть будет на всякий.
$results = mysql_query("SELECT `attach_id`, `download_count` FROM `table_prefix_attachments`",$link); - создаем SQL-запрос вот именно с такими необычными кавычками, где из таблицы `table_prefix_attachments` мы считываем данные по `attach_id` и `download_count`. Не забудьте в имени таблицы attachments указать префикс вашей таблицы в базе, чтобы не ошибиться - скачайте себе структуру базы через бэкап форума и найдите в ней attachments.
while ($resultq = mysql_fetch_array($results)) { - создаем цикл обработки полученных из базы данных в удобный вид массива PHP.
$downarr[$resultq['attach_id']] = $resultq['download_count']; - по циклу создаем элементы массива $downarr с идентификатором attach_id и значением download_count.
} - завершаем цикл.
mysql_free_result($results); - очищаем память от массива обращения к базе SQL. Необязательная строка, но не повредит.
Собственно, вот и все. Пример работы скрипта можно посмотреть на странице https://cielab.xyz/profiles/ где собраны ссылки на некоторые вложения в форум.
Я написал на английском "downloads" чтобы не склонять "загрузки" и "загрузок". Но никто не мешает вам усложнить скрипт и просклонять числительные если есть желание, мне лень.
Аналогично можно запросить у базы данных например количество посещений темы: опрашиваем таблицу `table_prefix_topics` для получения значений `topic_id` и `topic_views`. Снова не забываем заменить table_prefix на свой префикс таблицы в базе данных.
В форуме к файлу config.php установлены права 0644 для обеспечения безопасности базы данных. Проследите, чтобы и у вашего файла с представленным скриптом были права не выше 0644. Так же чтобы совсем попрятать все концы в воду рекомендуют ошибки PHP коли случатся не выводить на страницу, а выводить в отдельный хорошо запрятанный лог ошибок PHP на сайте (не забывайте его читать и исправлять ошибки).
Для этого в .htaccess сайта вносим примерно такой код:
Код: Выделить всё
# отключаем вывод ошибок пользователям
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
# заносим ошибки в журнал
php_flag log_errors on
php_value error_log /путь от корня/имя файла лога
Безопасности не бывает много. Если остаются опасения за файл с логином к базе данных - можно еще глубже запрятать файл только скрипта в отдельную папку и вызывать по месту функцией include или include_once. А для этого файла скрипта установить все возможные запреты через .htaccess как это сделано в форуме phpbb.
В примере файл скрипта с именем config.php дополнительно защищен .htaccess. Впишите свое имя скрипта и все:
Код: Выделить всё
<IfModule mod_version.c>
<IfVersion < 2.4>
<Files "config.php">
Order Allow,Deny
Deny from All
</Files>
</IfVersion>
<IfVersion >= 2.4>
<Files "config.php">
Require all denied
</Files>
</IfVersion>
</IfModule>
<IfModule !mod_version.c>
<IfModule !mod_authz_core.c>
<Files "config.php">
Order Allow,Deny
Deny from All
</Files>
</IfModule>
<IfModule mod_authz_core.c>
<Files "config.php">
Require all denied
</Files>
</IfModule>
</IfModule>