Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как написать счетчик скачивания (кликов) файлов 
:(
    Опции темы
Kex
Дата 7.1.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Как написать счетчик скачивания файлов, используя MySQL?

Суть проблемы?
На сайте есть файл, ссылка ведет на файлообменник, т.е. файл находится на файлообменнике. Как подсчитать количество скачаваний этого файла.
Видел в инете вариант решения этой задачи при помощи текстовых файлов, но этот вариант не подходит.
Как сделать это при помощи базы данных MySQL?
PM MAIL   Вверх
krundetz
Дата 7.1.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Kex, текстовый файл или бд не важно это все го лишь хранилище данных. Начнем с того что в принципе ты не можешь посчитать сколько скачан этот файл с файлообменника, если конечно файлообменник не твой. Максимум что ты можешь сделать это посчитать количество переходов с твоего сайта на файлообменник по этой ссылке. Сделать это можно двумя способами:
1. написать скрипт на ПХП который по запросу ридиректил бы пользователя на файлообменник и записывал в твоем случае в БД информацию о переходе на него, соответственно вместо ссылки на файообменнек на сайте должна стоять ссылка на этот скрипт.
2. написать скрипт на javascript который бы перехватывал событие клик по ссылке файлообменника и по средством ajax сообщал бы другому скрипту на ПХП что следует обновить информацию в БД, а затем бы перенаправлял пользователя на файлообменник.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Kex
Дата 7.1.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



krundetz, 
Цитата(krundetz @  7.1.2009,  15:21 Найти цитируемый пост)
Kex, текстовый файл или бд не важно это все го лишь хранилище данных.

Дело в том, что вариант с текстовым файлами, котрый я видел, подразумевает создание для каждого файла свой текстовый файл, который содержит информацию по количеству скачиваний. У меня сейчас 50 файлов, и создавать 50 файлов txt не хочется. А поскольку сайт построен на связке PHP+mySQL, то мне кажется проще создать поле в таблице и туда производить записи, а при скачивании увеличивать счетчик на 1.
Видимо вариант с редиректом по проще, если можно подскажите ориентировачный код или функции которыми необходимо пользоватся.

И для общего развития интересно, а действительно, как передать переменную из JavaScript в PHP?
PM MAIL   Вверх
krundetz
Дата 7.1.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Цитата(Kex @  7.1.2009,  18:02 Найти цитируемый пост)
мне кажется проще создать поле в таблице и туда производить записи

не поле в таблице а таблицу, где запись будет состоять из следующих полей: идентификатор файла и количество его скачиваний, название файла и ссылка на него в файлообменнике
Цитата(Kex @  7.1.2009,  18:02 Найти цитируемый пост)
Видимо вариант с редиректом по проще, если можно подскажите ориентировачный код или функции которыми необходимо пользоватся.

да обычные функции которые обрабатывают пришедшие в скрипт данные и работающие с базой данных
Цитата(Kex @  7.1.2009,  18:02 Найти цитируемый пост)
И для общего развития интересно, а действительно, как передать переменную из JavaScript в PHP? 

а javascript ее никуда и не передает он просит это сделать за него браузер а потом передать ему ответ, вообще в обмене информацией участвует браузер и сервер, информация представлена в текствовом виде, в специальной форме соответствующей протоколу http и браузер и сервер его знают, и так сказать общаются при помощи него между собой. В общем если интересно тебе надо сомтреть информацию про протокол НТТР.


Это сообщение отредактировал(а) krundetz - 7.1.2009, 19:42


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Kex
Дата 7.1.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Цитата(krundetz @  7.1.2009,  19:40 Найти цитируемый пост)
не поле в таблице а таблицу, где запись будет состоять из следующих полей: идентификатор файла и количество его скачиваний, название файла и ссылка на него в файлообменнике

Вот эта таблица уже есть, я как раз и хочу сделать это через базу! 
С  javascript и передачей данных смотрю тоже не все просто.
Ок, спасибо за ответ, поищу инфу про редирект в инете.

PM MAIL   Вверх
Kex
Дата 19.1.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Сделал я скрипт для скачавания, только одна проблема. При попытке ридеректа пользователя 
Код

<?
$URL = myrow["url"];
header ("Location: $URL");
?>


открывается ссылка в этом же окне, как сделать что бы ссылка открывалась в новом окне??
PM MAIL   Вверх
bars80080
Дата 19.1.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



Цитата(Kex @  19.1.2009,  12:21 Найти цитируемый пост)
открывается ссылка в этом же окне, как сделать что бы ссылка открывалась в новом окне?? 

загружать нужную страницу в первом ркне, а второе открывать с помощью javascript (windows.open();)
PM MAIL WWW   Вверх
Kex
Дата 20.1.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Цитата(bars80080 @  19.1.2009,  15:04 Найти цитируемый пост)
загружать нужную страницу в первом ркне, а второе открывать с помощью javascript (windows.open();) 


А если у пользователя отключен javascript?

Неужеле нельзя сделать это при помощи PHP?

PM MAIL   Вверх
lelik133
Дата 20.1.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 3
Всего: 14



php серверный язык, он никак не может управлять браузером пользователя.
PM ICQ   Вверх
Kex
Дата 9.2.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Ребята,немогу разобраться с редиректом!

Главное на localhost работал, а загрузил на сервер не хочет!

Вот код:
Код

<?php 
//подключение к базе
include ("blocks/bd.php");

//Защита от хостингов, которые не поддерживают глобальные переменные
if (isset($_GET['id'])) {$id = $_GET['id'];}

//Передаются переменные, соответствующие выбраному пользователем файлообменника
if (isset($_GET['let'])) {$let = $_GET['let'];}

if (isset($_GET['dep'])) {$let = $_GET['dep'];}

//Извлечение данных из таблицы book_data где поле id равно переменной $id
//Запрос происходит с проверкой наличия записей в базе
$result = mysql_query ("SELECT * FROM book_data WHERE id = '$id'",$db);
//Если в переменной $result нет ни одной строки, то
if (!$result)
{
echo "<p>Запрос на извлечение данных из базы не прошел.<br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
//Если есть, то передать в переменную $myrow массив данных из поля id 
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);

/*Счетчик скачивания (обновляет поле kol_skachivaniy в таблице book_data)*/
$new_kol = $myrow["kol_skachivaniy"] + 1;
$update = mysql_query("UPDATE book_data SET kol_skachivaniy='$new_kol' WHERE id='$id'",$db);
}

else
{
echo "<p>Информация по запросу не может быть извлечена в таблице нет данных.</p>";
exit();
}

//перенаправляю пользователя на выбраный им файлообменник
if (isset ($let)) {
$v = $myrow["letitbit"];
echo "Сейчас Вы будете переправлены на ссылку на файл. Если ваш браузер не поддерживает автоматическое перенаправление, нажмите на эту, <a href ='$v'>ссылку</a>";
$down = $myrow["letitbit"];
$URL="$down";
header("Location:$URL");
exit();
}

else {
$v = $myrow["deposit"];
echo "Сейчас Вы будете переправлены на ссылку на файл. Если ваш браузер не поддерживает автоматическое перенаправление, нажмите на эту, <a href ='$v'>ссылку</a>";
$down = $myrow["deposit"];
$URL="$down";
header("Location:$URL");
exit();
}

?>



И выдает ошибку:

"Сейчас Вы будете переправлены на ссылку на файл. Если ваш браузер не поддерживает автоматическое перенаправление, нажмите на эту, ссылку" (т.е ссылка работает, туда из переменной $let или $dep я передал, а вот редирект нет!)

"Warning: Cannot modify header information - headers already sent by (output started at /usr/home/*/domains/*.ru/public_html/download.php:51) in /usr/home/gidro156/domains/techgidravlika.ru/public_html/download.php on line 54"

54 строка это и есть как раз
Код



header("Location:$URL");


Это сообщение отредактировал(а) Kex - 9.2.2009, 21:04
PM MAIL   Вверх
enof
Дата 9.2.2009, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 35



Kex,
Почитайте про протокол HTTP.
Заголовки должны быть отправлены до любого вывода информации.

Вам же ясно об это сказано, даже с указанием строк, где вывод, а где вы пытаетесь отправить заголовок.
Цитата

"Warning: Cannot modify header information - headers already sent by (output started at /usr/home/*/domains/*.ru/public_html/download.php:51) in /usr/home/gidro156/domains/techgidravlika.ru/public_html/download.php on line 54"


Добавлено через 5 минут и 57 секунд
Цитата(Kex @  9.2.2009,  21:02 Найти цитируемый пост)

"Сейчас Вы будете переправлены на ссылку на файл. Если ваш браузер не поддерживает автоматическое перенаправление, нажмите на эту, ссылку" (

И это тоже совершенно не нужно, так как заголовки идут до содержания, соответственно бразуер переадресует раньше, чем увидят сообщение.

Это сообщение отредактировал(а) enof - 9.2.2009, 21:09
PM MAIL ICQ Skype   Вверх
Kex
Дата 9.2.2009, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Цитата(enof @ 9.2.2009,  21:07)
Kex,
Почитайте про протокол HTTP.
Заголовки должны быть отправлены до любого вывода информации.

Вам же ясно об это сказано, даже с указанием строк, где вывод, а где вы пытаетесь отправить заголовок.
Цитата

"Warning: Cannot modify header information - headers already sent by (output started at /usr/home/*/domains/*.ru/public_html/download.php:51) in /usr/home/gidro156/domains/techgidravlika.ru/public_html/download.php on line 54"


Добавлено @ 21:13
Цитата(Kex @  9.2.2009,  21:02 Найти цитируемый пост)

"Сейчас Вы будете переправлены на ссылку на файл. Если ваш браузер не поддерживает автоматическое перенаправление, нажмите на эту, ссылку" (

И это тоже совершенно не нужно, так как заголовки идут до содержания, соответственно бразуер переадресует раньше, чем увидят сообщение.

Точно, как прочитал вас вспомнил, что где читал про это. Все поменял, убрал echo перед редиректом, все заработало. Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.