Пишу часть сайта которая отвечает за регистрацию. столкнулся с ошибкой отправки куков: "Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\mysite1.local\index.php:1)" Проверял код в netbeans 8.1. Программа никаких ошибок не показала. Проверял множество раз вроде ошибок нет. подскажите в чем проблема. сайт состоит и з трех файлов index.php autorisation.inc.php и left.inc.php"; Вот код index.php: PHP: <?php include "lib/autorisation.inc.php"; include "lib/left.inc.php"; ?> вот код autorisation.inc.php : PHP: <?php ini_set('display_errors', 1); error_reporting(E_ALL); # Соединямся с БД $link=mysqli_connect("localhost", "root", "", "shoplambo"); #Сложность хэша $length=10; #Проверка $message="one"; class Autorise{ public $ssid; public $schash; public $server; public $login; public $password; public $trigger; #Функция отображения формы #Генератор хэша public function generateCode($length) { global $message; $message.=" generateCode "; $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789"; $code = ""; $clen = strlen($chars) - 1; while (strlen($code) < $length) { $code .= $chars[mt_rand(0,$clen)]; } return $code; } #Функция проверки залогинен ли пользователь public function login(){ global $link; global $message; $message.="login1"; global $link; global $length; $query = mysqli_query($link,"SELECT user_id, user_password FROM users WHERE user_login='".mysqli_real_escape_string($link,$this->login)."' LIMIT 1"); $data = mysqli_fetch_assoc($query); #Сравниваем пароли if($data['user_password'] === md5(md5($this->password))){ # Генерируем случайное число и шифруем его $hash = md5($this->generateCode($length)); if(!@$trigger){ #Переводим IP в строку $insip = ", user_ip=INET_ATON('".$this->server."')"; } # Записываем в БД новый хеш авторизации и IP mysqli_query($link, "UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'"); # Ставим куки setcookie("id", $data['user_id'], time()+60*60*24); setcookie("hash", $hash, time()+60*60*24); $message.="right pass"; header( "Location: index.php" ); }else{ $message.="wrong pass"; } } public function check(){ global $message; global $link; $query = mysqli_query($link,"SELECT user_id, user_password FROM users WHERE user_login='".mysqli_real_escape_string($link,$this->loginl)."' LIMIT 1"); $data = mysqli_fetch_assoc($query); if(($data['user_hash'] !== $this->schash) or ($data['user_id'] !== $this->ssid)) { setcookie("id", "", time() - 3600*24, "/"); setcookie("hash", "", time() - 3600*24, "/"); #Хеш неправильный $message.="hash wrong"; return false; }else{ $message.="hash valid"; return true; } } } #Процедура авторизации $myaqutor= new Autorise; $myaqutor->ssid=filter_input(INPUT_COOKIE,"id"); $myaqutor->schash=filter_input(INPUT_COOKIE,"hash"); $myaqutor->server=filter_input(INPUT_SERVER,"REMOTE_ADDR"); $submit=filter_input(INPUT_POST,"submitlogin"); global $drawInputForm; if(isset($submit)){ $myaqutor->login=filter_input(INPUT_POST,"loginlogin"); $myaqutor->password=filter_input(INPUT_POST,"passwordlogin"); $myaqutor->trigger=filter_input(INPUT_POST,"not_attach_ip"); $myaqutor->login(); }else{ if (isset($myaqutor->ssid) and isset($myaqutor->schash)){ if(!$myaqutor->check()){ global $drawInputForm; $drawInputForm=true; $message.="Check 2"; } $message.="Check 1"; $drawInputForm=false; }else{ global $drawInputForm; global $message; $message.="not isset"; $drawInputForm=true; } } ?> вот код: left.inc.php PHP: <?php global $drawInputForm; function drawInput($drawInputForm){ global $message; if($drawInputForm){ ?> <form method="POST"> loginlogin <input name="loginlogin" type="text"><br> passwordlogin <input name="passwordlogin" type="password"><br> not_attach_ip(danger) <input type="checkbox" name="not_attach_ip"><br> <input name="submitlogin" type="submit" value="submitlogin"> </form> <? $message.=" Drawing "; } } echo " $message"; drawInput($drawInputForm); ?>
Не козыряйте знанием английского не прочитав код. В autorisation.inc.php нет ни одного echo и ни одного вызова функции setcookies которая помешала бы выполнению вызову setcookies(так как функции login и check не запускаются одновременно) в конце документа autorisation.inc.php.
@riaron данная ошибка вам говорит что все заголовки должны быть отправлены до строения дом документа. это касаемо всех подключаемых файлов которые компилируются. Вы считаете себя умнее php компилятора ? Тогда не пользуйтесь им! --- Добавлено --- @riaron и ещё есть такая умная вещь которая помогает переводить google translate . И ещё советую почитай доку про отправление каких либо заголовков (headers) браузеру. https://secure.php.net/manual/en/function.header.php --- Добавлено --- и ещё простите но что это за чушь ? PHP: function drawInput($drawInputForm){ global $message; if($drawInputForm){ ?> <form method="POST"> loginlogin <input name="loginlogin" type="text"><br> passwordlogin <input name="passwordlogin" type="password"><br> not_attach_ip(danger) <input type="checkbox" name="not_attach_ip"><br> <input name="submitlogin" type="submit" value="submitlogin"> </form> <? $message.=" Drawing "; } } echo " $message"; drawInput($drawInputForm); Кто показал или сами додумались? впервые вижу такое написание функций это вообще нормально отрабатывать должно ?