Forum Webscript.Ru

Программирование => PHP => Тема начата: Mаster от 29 Января 2004, 12:53:54

Название: Помогите найти баг в баннерокрутилке
Отправлено: Mаster от 29 Января 2004, 12:53:54
Есть файл класса:

class banners_mod {

var $banner_code;

function get_banner() {
  $query = mysql_query("SELECT * FROM banners AS banners WHERE banners.maxshowbanner > banners.showbanner ORDER BY banners.showbanner LIMIT 1");
  $table_banners = mysql_fetch_assoc($query);
  $id = $table_banners[\'id\'];
  if (mysql_query("UPDATE banners SET showbanner = \'".($table_banners[\'showbanner\']+1)."\' WHERE id = ".$id)) {
  echo $table_banners[\'id\'];
  } else {
  echo mysql_error();
  exit;
  }
  $this->banner_code = $table_banners[\'code\'];
  return true;
}

}

$banners_mod = new banners_mod;

$banners_mod->get_banner();
echo $banners_mod->banner_code;

?>

Таблица выглядит так:

# Таблица баннеров
DROP TABLE IF EXISTS banners;
CREATE TABLE banners (
   id INT NOT NULL AUTO_INCREMENT,  # Идетентификатор банера
   code VARCHAR(255) NOT NULL,     # Код баннера
   description VARCHAR(255) NOT NULL,  # Описание раздела
   showbanner INT NOT NULL,     # Текущее Кол-во показов баннера
   maxshowbanner INT NOT NULL,     # Максимальное Кол-во показов баннера

   PRIMARY KEY(id)
);

INSERT INTO banners (code,description,showbanner,maxshowbanner) values(\'\',\'Описание\',\'0\',\'100 \');
INSERT INTO banners (code,description,showbanner,maxshowbanner) values(\'\',\'Описание\',\'0\',\'50\');
INSERT INTO banners (code,description,showbanner,maxshowbanner) values(\'\',\'Описание\',\'0\',\'150\');

Так вот. Суть этой системы, выводить каждый раз по 1 баннеру, который показан меньше всего раз, но не превышает максимальное кол-во показов этого баннера.

Фигня в чём. Если не выводить баннер (последняя строчка кода), то таблица обновляется правильно, но если баннер выводится, то обновляются почему-то все поля. Каким боком вывод переменной может влиять на результат работы функции ума не приложу :(

ЗЫ: сломал голову, но не нашел баг.
Название: Помогите найти баг в баннерокрутилке
Отправлено: Макс от 29 Января 2004, 14:24:42
Mаster
а почему этот класс нельзя было оформить в виде одной функции ?

А если сделать так:
Цитировать
Mаster:
 $this->banner_code = $table_banners[\'code\'];
  return true;
    }

заменить на
 $this->banner_code = $table_banners[\'code\'];
  return $this->banner_code ;
    }
и в скрипте делать
echo $banners_mod->get_banner();
Название: Помогите найти баг в баннерокрутилке
Отправлено: Mаster от 30 Января 2004, 11:27:59
Цитировать
и в скрипте делать
echo $banners_mod->get_banner();

неа, тоже самое... те же мухи.
Название: Помогите найти баг в баннерокрутилке
Отправлено: Mаster от 30 Января 2004, 12:37:51
получается следующее...
в таблице 3 баннера с идешниками 1,2,3 соответственно.

Убираю вывод самого баннера и смотрю по выводу идешников и смотрю базу после каждого обновления страницы... всё правильно... обновляется кол-во показов в таблице поочередно и по одному, но стоит поставить баннер на вывод, как при том что в таблице содержится 3 баннера происходит такой эфект, что берется значение по запросу (оно понятно одно) но обновление происходит не только в текущей строке как положено, но и в следующей.

MySQL 4.0.15
PHP 4.3.0