Этот вопрос закрыт для ответов, так как повторяет вопрос Как исправить этот ворнинг: "Warning: Cannot modify header information - headers already sent by"?
@Danila534

Не могу понять, в чём ошибка?

spoiler
Warning: Cannot modify header information - headers already sent by (output started at /var/www/u1316098/data/www/battle-mine.ru/donate/buy.php:1) in /var/www/u1316098/data/www/battle-mine.ru/donate/buy.php on line 91


<?php
include "../lib/configbg.php";

if (isset($_POST['group']) && isset($_POST['nickname']) && $_POST['nickname'] != '' && isset($_REQUEST['checkprice'])) {

	$promo = 0;
	if (isset($_POST['promocode'])) {
		$promos = mysqli_query($conDB, 'SELECT * FROM `promo` WHERE `promo`="'.$_POST['promocode'].'"');
		while ($p = mysqli_fetch_assoc($promos)) {
			$promo = $p['sale'];
		}
	}

	if (isset($_POST['group'])) {

		$groups = $_POST['group'];
	
		$adds = mysqli_query($conDB, 'SELECT * FROM `donate` WHERE `group`="'.$groups.'"');
		while ($row = mysqli_fetch_assoc($adds)) {
			$type = $row['type'];
			$price = $row['price'];
			$name = $row['name'];

			if ($type == 'perm') {
				$sumAdds = mysqli_query($conDB, 'SELECT * FROM `buy` WHERE `type`="perm" AND `name`="'.$_POST['nickname'].'"');
				while ($rowSum = mysqli_fetch_assoc($sumAdds)) {
					$price = $row['price'];
					$price = $row['price'] - $rowSum['sum'];

					if ($price < 1) { $price = $row['price']; }
				}
			}
		}
		
		if ($promo != 0) {
			$price = $price - (($promo * $price) / 100);
		}

		if ($price > 0) {
			$url = 'https://unitpay.ru/pay/СКРЫЛ?sum='.$price.'&account='.$_POST['nickname'].'.'.$groups.'&signature='.getFormSignature(($_POST['nickname'].'.'.$groups), 'Покупка '.$name, $price, 'СКРЫЛ').'&desc=Покупка '.$name;

			echo '<input type="submit" value="Купить за '.$price.' руб." class="btn bnt-new btn-lg btn-block">';
			//echo '<a href="'.$url.'" class="btn btn-sum btn-lg btn-block">Купить за '.$price.' руб.</a>';
			//<input type="submit" value="Купить" class="btn bnt-new btn-lg btn-block">
			//header('Location: https://unitpay.ru/pay/119951-3e75c?sum='.$price.'&account='.$_POST['nickname'].'.'.$groups.'&signature='.getFormSignature(($_POST['nickname'].'.'.$groups), 'Покупка "'.$name.'"', $price, '93b94a27ba9742a50a6fb80c0f4d7da0').'&desc=Покупка "'.$name.'"');
		} else {
			echo '<button type="submit" class="btn bnt-new btn-lg btn-block disabled">Слишком низкая цена</button>';
			//header('Location: /');
		}
	}

} else {
	//echo '<button type="submit" class="btn bnt-new btn-lg btn-block disabled">Заполните данные</button>';
	//echo '<button type="submit" class="btn bnt-new btn-lg btn-block disabled">'.$_POST['checkprice'].'</button>';
	//header('Location: /');

	$promo = 0;
	if (isset($_POST['promocode'])) {
		$promos = mysqli_query($conDB, 'SELECT * FROM `promo` WHERE `promo`="'.$_POST['promocode'].'"');
		while ($p = mysqli_fetch_assoc($promos)) {
			$promo = $p['sale'];
		}
	}

	if (isset($_POST['group'])) {

		$groups = $_POST['group'];
	
		$adds = mysqli_query($conDB, 'SELECT * FROM `donate` WHERE `group`="'.$groups.'"');
		while ($row = mysqli_fetch_assoc($adds)) {
			$type = $row['type'];
			$price = $row['price'];
			$name = $row['name'];

			if ($type == 'perm') {
				$sumAdds = mysqli_query($conDB, 'SELECT * FROM `buy` WHERE `type`="perm" AND `name`="'.$_POST['nickname'].'"');
				while ($rowSum = mysqli_fetch_assoc($sumAdds)) {
					$price = $row['price'];
					$price = $row['price'] - $rowSum['sum'];

					if ($price < 1) { $price = $row['price']; }
				}
			}
		}
		
		if ($promo != 0) {
			$price = $price - (($promo * $price) / 100);
		}

		if ($price > 0) {
			header('Location: https://unitpay.ru/pay/СКРЫЛ?sum='.$price.'&account='.$_POST['nickname'].'.'.$groups.'&signature='.getFormSignature(($_POST['nickname'].'.'.$groups), 'Покупка "'.$name.'"', $price, 'СКРЫЛ').'&desc=Покупка "'.$name.'"');
		} else {
			header('Location: /');
		}
	}
}


function getFormSignature($account, $desc, $sum, $secretKey) {
    $hashStr = $account.'{up}'.$desc.'{up}'.$sum.'{up}'.$secretKey;
    return hash('sha256', $hashStr);
}
?>
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
dyuriev
@dyuriev
A posteriori
Каждый день одно и тоже
  1. Открываем официальную документацию: header();
  2. Офигиваем, что она доступна на русском
  3. Читаем:
    Помните, что функцию header() можно вызывать только если клиенту ещё не передавались данные. То есть она должна идти первой в выводе, перед её вызовом не должно быть никаких HTML-тегов, пустых строк и т.п. Довольно часто возникает ошибка, когда при чтении кода файловыми функциями, вроде include или require, в этом коде попадаются пробелы или пустые строки, которые выводятся до вызова header(). Те же проблемы могут возникать и при использовании PHP/HTML в одном файле.
  4. Ищем, какой вывод попал перед отправкой заголовков


А так же, в конце то концов, внимательно читаем ошибку:
Cannot modify header information - headers already sent by
Вольный перевод:
Невозможно изменить заголовки, так как они уже отправлены


Читаем ошибку дальше:
output started at /var/www/u1316098/data/www/battle-mine.ru/donate/buy.php:1
Ох ниче себе, да?
передача данных началась в первой строке /var/www/u1316098/data/www/battle-mine.ru/donate/buy.php
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Заголовки можно выводить только до вывода основного контента.
Скорее всего, в configbg.php после завершающего ?> есть ещё какие-то символы, например перенос строки, которые выводятся в основной поток.
Уберите завершающие ?> во всех файлах, либо контролируйте, что после них ничего нет.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы