Почему $total не меняется?

Тotal всегда одно и тоже значение
<?php
require 'connect.php';

$random = array(
	'workweek' => array(-4,7),
	'holiday' => array(-16,-4)
);

mysql_query("SELECT * FROM `betaintranet`.`ad_stat_cleaned` LEFT JOIN `betaintranet`.`ad_c` ON ad_stat_cleaned.bid = ad_c.bid WHERE `date`='".date("Y-m-d")."'");?>

 <?while($row = mysql_fetch_assoc($q)){
	if($row['w_site'] == '1'){    			//Если это Найдиквартиру.ру
		if($row['ban_type'] == '1'){    	     
			$total = 1650000; 				// Баннеры ТГБ  172
		}elseif($row['ban_type'] == '2'){
			$total = 1500000; 				// Баннеры ТГБ  240
		}elseif($row['ban_type'] == '3'){
			$total = 1500000; 				// Баннеры ТГБ  330
		}elseif($row['ban_type'] == '4'){
			$total = 1650000; 				//Красная строка  
		}elseif($row['ban_type'] == '5'){
			$total = 1500000; 				//Баннер 940x90, середина
		}elseif($row['ban_type'] == '6'){
			$total = 1500000; 				//Брендирование 
		}elseif($row['ban_type'] == '7'){
			$total = 1500000; 				//Баннер 940x90, верхний
		}elseif($row['ban_type'] == '8'){
			$total = 1500000; 				//Баннер 940x90, нижний
		}elseif($row['ban_type'] == '101'){
			$total = 1500000; 				//Перетяжка шапка 1240х90 
		}elseif($row['ban_type'] == '102'){
			$total = 1500000; 				//Перетяжка под фильтром 1240х90 (фиксированная)
		}elseif($row['ban_type'] == '103'){
			$total = 1500000; 				//1-ый правый баннер 240х400
		}elseif($row['ban_type'] == '104'){
			$total = 1500000; 				//2-ый правый баннер 240х400
		}elseif($row['ban_type'] == '105'){
			$total = 1500000; 				 //3-ый правый баннер 240х400
		}elseif($row['ban_type'] == '106'){
			$total = 1500000; 				 //Перетяжка в подвале 1240х300
		}
	 }
}

$w = mysql_query("SELECT * FROM `betaintranet`.`ad_stat_cleaned` LEFT JOIN `betaintranet`.`ad_c` ON ad_stat_cleaned.bid = ad_c.bid WHERE `date`='".date("Y-m-d")."'");?>

 <?while($row = mysql_fetch_assoc($w))
 {
 	$now = time();
 	$daysInMonth = date('t', $now);
 	$dayOfWeek = date('w', mktime(0,0,0, date('m', $now),date('d', $now), date('y', $now)));
 	$isHoliday = $dayOfWeek == 6 || $dayOfWeek == 0;
 	$rand = $isHoliday ? $random['holiday'] : $random['workweek'];
 	$rand = rand($rand[0],$rand[1]);
 	$daily = $total / $daysInMonth;
 	$part = round($total / $daysInMonth / 100 * $rand);
 	$modification = round($row['modification'] + ($daily + $part) / 24);

 	$sql = "UPDATE `betaintranet`.`ad_stat_cleaned` SET `betaintranet`.`ad_stat_cleaned`.`modification` = '{$modification}' WHERE 
 				 `betaintranet`.`ad_stat_cleaned`.`bid` = '{$row['bid']}' AND 
 				 `betaintranet`.`ad_stat_cleaned`.`date` = '{$row['date']}'";
 	mysql_query($sql) or die(mysql_error());
}

5f606e6cf06c9753235946.png
  • Вопрос задан
  • 86 просмотров
Решения вопроса 2
Tomio
@Tomio
backend developer (python, php)
Вероятно у вас идет сравнение числа со строкой. Приводите принудительно сравниваемые переменные к одному типу:
(int)$row['w_site'] === 1
(int)$row['ban_type'] === 1
и далее также по аналогии.
Плюс у вас цикл while будет возвращать всегда одно и то же значение. Потому как сохранится присваивание $total из последней итерации
Ответ написан
Adamos
@Adamos
Он меняется - внутри первого цикла while.
К концу цикла он принимает значение в соответствии с последней строкой - и во втором while ему меняться не с чего.

P.S. Код, кстати, чудовищен. Колбаса if-ов заменяется одним компактным массивом и сравнением с ним. А в перспективе, при увеличении количества и/или произвольной динамике значений - выносом этих данных в базу.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы