Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2012, 13:20   #1
Nick_Bl
Пользователь
 
Регистрация: 18.04.2012
Сообщений: 10
Вопрос Баннерная сеть (Проблема с выводом ссылки и изображения)

Всем привет! Пишу маленьку баннерную сеть, с выводом изображения проблем нет, а вот с выводом ссылки есть. Идёт запрос <img src="http://sait.ru/network.php?member=1" border="0" /> из таблицы выбирается случайный баннер который относится к banner_conn = 1, а вот когда действием переходит на ссылку <a href="http://sait.ru/network.php?transmission=1&member=1 " target="_blank"></a> то он по новой генерирует запрос, и выводит уже другой адрес. Подскажите как решить эту проблему.

PHP код:
$sth $dbh->prepare("SELECT banner_id,bannername,filename,url,comment
                      FROM banners
                      WHERE banner_conn='"
.$_GET['member']."'
                      ORDER BY RAND() LIMIT 1"
);
$sth->execute();
$result $sth->fetch(PDO::FETCH_ASSOC);
if(
$result == true)
{
     
extract($result);
     if(isset(
$_GET['transmission'])) 
     {
            
header("Location: ".$url); // Ссылка по id
     
}
     else
     {            
            
header("Location: http://".$_SERVER["SERVER_NAME"]."/img/".$filename.""); // Передача пути до баннера. (напр. Мой сайт/папка с баннерами/название фаила)
     
}
}
else
{
      echo 
'Ошибка';

Пользователь размещает у себя на сайте код :

Код HTML:
<a href="http://sait.ru/network.php?transmission=1&member=1" target="_blank">
<img src="http://sait.ru/network.php?member=1" border="0" />
</a>
и получает по нему баннер и ссылку куда ведёт этот баннер.
Nick_Bl вне форума Ответить с цитированием
Старый 18.04.2012, 13:24   #2
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Подробнее распишите проблему и архитектуру.
ssdm вне форума Ответить с цитированием
Старый 18.04.2012, 13:51   #3
Nick_Bl
Пользователь
 
Регистрация: 18.04.2012
Сообщений: 10
По умолчанию

Есть таблица banners. В ней находятся 5 полей

Таб.Banners
PHP код:
Айди        Айди юзера  Название баннера  Имя фаила    Куда ссылаться
banner_id   banner_conn      bannername        filename       url
1              1            Первый баннер      banner1
.gif    http://1.ru
2              1            Второй баннер      banner2.gif    http://2.ru
3              1            Третий баннер      banner3.gif    http://3.ru
4              2            Четвёртый баннер   banner4.gif    http://4.ru
5              2            Пятый баннер       banner5.gif    http://5.ru 
Участник баннерной сети размещает у себя код:
Код HTML:
<a href="http://sait.ru/network.php?transmission=1&member=1" target="_blank">
<img src="http://sait.ru/network.php?member=1" border="0" />
</a>
Где member это ID юзера, а transmission это переменная которая говорит отсносится этот запрос к ссылке или нет.

Дальше в фаиле network.php идёт запрос к БД

PHP код:
try
{
    
$dbh = new PDO 'mysql:host=' HOST ';dbname=' DBUSERPASSWORD);
    
$dbh->query 'SET character_set_connection = '.SQLCHARSET );
    
$dbh->query 'SET character_set_client = '.SQLCHARSET );
    
$dbh->query 'SET character_set_results = '.SQLCHARSET );
}
catch(
PDOException $e)
{
    die(
"Ошибка: ".$e->getMessage());
}

$sth $dbh->prepare("SELECT banner_id,bannername,filename,url,comment
                      FROM banners
                      WHERE banner_conn='"
.$_GET['member']."'
                      ORDER BY RAND() LIMIT 1"
);
    
$sth->execute();
    
$result $sth->fetch(PDO::FETCH_ASSOC);
    if(
$result == true)
    {
        
extract($result);
        
        if(isset(
$_GET['transmission']))
        {
            
header("Location: ".$url);
        }
        else
        {            
            
header("Location: http://".$_SERVER["SERVER_NAME"]."/img/".$filename.""); 
        }
    }
    else
    {
        echo 
'Нет';
    } 
Вот здесь и начинается сложность. При первом запросе (картинки) он случайно выбирает картинку из всех полей где banner_conn = $_GET['member'], а когда нажимаешь по ссылке он снова случанйно выбирает уже ссылку из всех полей где banner_conn = $_GET['member'].

ВОПРОС:
Как сделать по человеческий чтобы было всё одновременно) Заранее спасибо!

Последний раз редактировалось Nick_Bl; 18.04.2012 в 14:17.
Nick_Bl вне форума Ответить с цитированием
Старый 18.04.2012, 14:19   #4
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Э как вы. Решили один сделать то , что компании годами до ума доводят. )
У пользователя вашей баннерной системы есть сайт. Где то на сайте юзер размещает фрейм который подгружает контент из вашей системы. А вы уже отдаёте сгенерируемый контент во фрейм с правильными урлами.
ssdm вне форума Ответить с цитированием
Старый 18.04.2012, 14:21   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Nick_Bl Посмотреть сообщение
Вот здесь и начинается сложность. При первом запросе (картинки) он случайно выбирает картинку из всех полей где banner_conn = $_GET['member'], а когда нажимаешь по ссылке он снова случанйно выбирает уже ссылку из всех полей где banner_conn = $_GET['member'].

ВОПРОС:
Как сделать по человеческий чтобы было вс одновременно) Заранее спасибо!
Вам нужно организовать сохранение ID записи, из которой берется текущий баннер для конкретного пользователя.
Например - через отдельную таблицу (memberID | bannerID):
1. пользователь запрашивает баннер через <img .../>
2. выбираем случайный баннер, фиксируем(обновляем, если такой memberID уже есть в таблице) в отдельной таблице memberID и bannerID (ID записи, которой соотв. этот баннер)
3. отдаем баннер пользователю
4. пользователь кликает по ссылке <a ...>
5. получаем из ссылки ID пользователя, смотрим в нашей новой таблице - какой баннер ему был показан - и по этому bannerID получаем из таблицы Banners соответствующий баннеру URL
6. отправляем пользователя по найденной ссылке
Andkorol вне форума Ответить с цитированием
Старый 18.04.2012, 14:26   #6
Nick_Bl
Пользователь
 
Регистрация: 18.04.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от ssdm Посмотреть сообщение
Э как вы. Решили один сделать то , что компании годами до ума доводят. )
У пользователя вашей баннерной системы есть сайт. Где то на сайте юзер размещает фрейм который подгружает контент из вашей системы. А вы уже отдаёте сгенерируемый контент во фрейм с правильными урлами.
Да задача серьёзная. По Iframe если делать, то указать те же самые параметры:

Код HTML:
<a href="http://sait.ru/network.php?transmission=1&member=1" target="_blank">
<img src="http://sait.ru/network.php?member=1" border="0" />
</a>
Неужели нет такой возможности реализовать замысел?) А как можно тогда просто передать кусок html кода участнику баннерной сети?
Nick_Bl вне форума Ответить с цитированием
Старый 18.04.2012, 14:29   #7
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Нет. В контенте выдавать уже правильные ссылки на сайт и баннер. А у себя в системе отмечаете что был показ баннера.
ssdm вне форума Ответить с цитированием
Старый 18.04.2012, 14:32   #8
Nick_Bl
Пользователь
 
Регистрация: 18.04.2012
Сообщений: 10
Радость

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Вам нужно организовать сохранение ID записи, из которой берется текущий баннер для конкретного пользователя.
Например - через отдельную таблицу (memberID | bannerID):
1. пользователь запрашивает баннер через <img .../>
2. выбираем случайный баннер, фиксируем(обновляем, если такой memberID уже есть в таблице) в отдельной таблице memberID и bannerID (ID записи, которой соотв. этот баннер)
3. отдаем баннер пользователю
4. пользователь кликает по ссылке <a ...>
5. получаем из ссылки ID пользователя, смотрим в нашей новой таблице - какой баннер ему был показан - и по этому bannerID получаем из таблицы Banners соответствующий баннеру URL
6. отправляем пользователя по найденной ссылке
Спасибо, пересмотрю всю архитектуру БД. И попробую седать так как вы посоветовали.
Nick_Bl вне форума Ответить с цитированием
Старый 18.04.2012, 14:33   #9
Nick_Bl
Пользователь
 
Регистрация: 18.04.2012
Сообщений: 10
Радость

Цитата:
Сообщение от ssdm Посмотреть сообщение
Нет. В контенте выдавать уже правильные ссылки на сайт и баннер. А у себя в системе отмечаете что был показ баннера.
Хорошо, спасибо большое за помощь!
Nick_Bl вне форума Ответить с цитированием
Старый 18.04.2012, 14:35   #10
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Современные системы показов банеров , например, Adriver или Google. Используют либо фреймы , либо баннеры на флешах.
ssdm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ссылки на изображения Abuhamed PHP 3 24.02.2012 23:09
проблема с выводом -=Andriushka=- Помощь студентам 0 13.04.2011 21:46
Проблема с выводом рисунков kompass Общие вопросы Delphi 1 27.02.2011 21:59
Проблема с выводом даты se0808 PHP 3 19.02.2011 16:57
Проблема с выводом изображения Mira-girl Общие вопросы C/C++ 0 23.10.2010 22:32