Вложенные include, проблема

AlterEgo

Guest
Вложенные include, проблема

Имеется двойной вложенный инклуд.
Сначала скрипт баннероротатора инклудится в файл шаблона, последний инклудится во все страницы сайта.

При этом баннероротатор почему-то запускается 2 раза (счетчик просмотров при каждом обновлении страницы увеличивается на 2).

Что делать?? Сам я так и не смог разобраться :confused:
 

AlterEgo

Guest
ну раз не телепаты, то ... :D

сам баннероротатор более чем тривиальный
PHP:
<?php
// $Id: ad.php,v 0.2 2003/12/13 12:18:36 Алексей Ракеев Exp $
// Alternate Publisher: Ротатор баннеров
//
// Подключение библиотек
require_once "include/init.php";
// Запрос случайного баннера из базы
$ad = mysql_fetch_assoc(mysql_query("SELECT id,image FROM ap_ad WHERE id >= " . rand(1, mysql_result(mysql_query("SELECT MAX(id) FROM ap_ad"), 0)) . " LIMIT 1"));
// Вывод баннера
echo "<a href=\"/ad.php?id=" . $ad['id'] . "\" title=\"Реклама на " . $options['sitename'] . "\"><img src=\"" . $ad['image'] . "\" alt=\"Реклама на " . $options['sitename'] . "\" style=\"width: 468px; height: 60px;\" /></a>";
// Обновление количества показов
mysql_query("UPDATE ap_ad SET views = views + 1 WHERE id = " . $ad['id'] . " LIMIT 1");
?>
темплейт - обычный хтмл файл с пхп вставками: $title, $header, $text +
PHP:
<?php include "include/ad.php" ?>
во всех скриптах определяются переменные $title, $header, $text и в конце подключается темплейт
PHP:
include "templates/text.tpl";
 

Demiurg

Guest
Вообщем вряд ли кто то будет здесь разбираться что и куда у тебя вставляется и сколько раз, тем более не имея всех исходников.
Есть много способов найти ошибку в логике. Но посоветовать что то конкретное в данном случае очень тяжело.
 

AlterEgo

Guest
хых, я нашел обходной путь:

/include/ad.php
PHP:
<?php
// $Id: ad.php,v 0.2 2003/12/17 22:22:11 Алексей Ракеев Exp $
// Alternate Publisher: Ротатор баннеров
//
// Подключение библиотек
require_once "include/init.php";
// Запрос случайного баннера из базы
$ad = mysql_fetch_assoc(mysql_query("SELECT id,url FROM ap_ad WHERE id >= " . rand(1, mysql_result(mysql_query("SELECT MAX(id) FROM ap_ad"), 0)) . " LIMIT 1"));
// Вывод баннера
echo "<a href=\"/ad.php?act=click&amp;id=" . $ad['id'] . "\" title=\"" . $ad['url'] . "\"><img src=\"/ad.php?id=" . $ad['id'] . "\" alt=\"" . $ad['url'] . "\" /></a>";
?>
/ad.php
PHP:
<?php
// $Id: ad.php,v 0.2 2003/12/17 22:14:25 Алексей Ракеев Exp $
// Alternate Publisher: Обновление статистики баннера
//
// Подключение библиотек
require_once "include/init.php";
// Регистрация клика по баннеру
if (isset($_GET['act']) && $_GET['act'] == "click") {
// Проверка данных и запрос ссылки
 if (!preg_match("/^\d{1,5}$/", $_GET['id']) || (!$url = @mysql_result(mysql_query("SELECT url FROM ap_ad WHERE id = " . $_GET['id'] . " LIMIT 1"), 0)))
  reload("index.php");
// Обновление количества кликов
 mysql_query("UPDATE ap_ad SET clicks = clicks + 1 WHERE id = " . $_GET['id'] . " LIMIT 1");
// Переадресация
 reload($url);
// Показ баннера
} else {
// Проверка данных и запрос ссылки
 if (!preg_match("/^\d{1,5}$/", $_GET['id']) || (!$image = @mysql_result(mysql_query("SELECT image FROM ap_ad WHERE id = " . $_GET['id'] . " LIMIT 1"), 0)))
  header("Location: /images/ad.gif");
// Обновление количества показов
 mysql_query("UPDATE ap_ad SET views = views + 1 WHERE id = " . $_GET['id'] . " LIMIT 1");
// Вывод баннера
 header("Location: " . $image);
}
?>
/templates/*.tpl
PHP:
...
<?php include "include/ad.php" ?>
...
Конечно через ж***, но зато правильно работает :)
 
Сверху