@ubunta2, работа с ошибками - это первый навык, который стоит развивать. Мозг так устроен, что запоминает короткие пути к успеху лучше чем длинные. Поэтому лечение ошибок через форум имеет низкую эффективность в плане обучения.
почему выводит 2 раза регистрацию и авторизацию? logout.php PHP: <?php session_start(); unset ($_SESSION["login"]); unset ($_SESSION["password"]); header ("Location: ".$_SERVER["HTTP_REFERER"]); exit; ?> index.php PHP: <?php print_r ($auth); require_once "lib/user_class.php"; $user = User::getObject(); $auth = $user->isAuth(); if (isset ($_POST["reg"])){ $login = $_POST["login"]; $password = $_POST["password"]; $reg_success = $user->regUser($login, $password); } elseif (isset ($_POST["auth"])){ $login = $_POST["login"]; $password = $_POST["password"]; $auth_success = $user->login($login, $password); if ($auth_success){ header ("Location: index.php"); exit; } } ?> <html> <head> <title>Регистрация и авторизация пользователей</title> </head> <body> <?php if ($auth){ echo "Здравствуйте, ".$_SESSION ["login"]."(<a href='logout.php'>Выход</a>)"; } else { echo '<h1>Регистрация</h1> <form name="red" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="reg" value="Зарегистрироваться"> </td> <tr> </table> </form> <h1>Авторизация</h1> <form name="auth" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="auth" value="Войти"> </td> <tr> </table> </form>'; } ?> <h1>Регистрация</h1> <form name="red" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="reg" value="Зарегистрироваться"> </td> <tr> </table> </form> <h1>Авторизация</h1> <form name="auth" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="auth" value="Войти"> </td> <tr> </table> </form> </body> </html> user_class.php PHP: <?php class User{ private $db; private static $user = null; private function __construct(){ $this->db = new mysqli("localhost", "root", "", "mybase"); $this->db->query("SET NAMES 'utf8'"); } public static function getObject(){ if(self::$user === null) self::$user = new User(); return self::$user; } public function regUser($login, $password){ if ($login == "") return false; if ($password == "") return false; $password = md5($password); return $this->db->query("INSERT INTO `users` (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')"); } private function chekUser($login, $password){ $result_set = $this->db->query("SELECT `password` FROM `users` WHERE `login` = '$login' "); $user = $result_set->fetch_assoc(); $result_set->close(); if(!$user) return false; return $user["password"] === $password; } public function isAuth(){ session_start(); $login = $_SESSION["login"]; $password = $_SESSION["password"]; return $this->chekUser($login, $password); } public function login($login, $password){ $password = md5($password); if($this->chekUser($login, $password)){ session_start(); $SESSION["login"] = $login; $SESSION["password"] = $password; } } public function __destruct(){ if($this->db) $this->db->close(); } } ?> --- Добавлено --- index.php PHP: <?php var_dump ($auth); require_once "lib/user_class.php"; $user = User::getObject(); $auth = $user->isAuth(); if (isset ($_POST["reg"])){ $login = $_POST["login"]; $password = $_POST["password"]; $reg_success = $user->regUser($login, $password); } elseif (isset ($_POST["auth"])){ $login = $_POST["login"]; $password = $_POST["password"]; $auth_success = $user->login($login, $password); if ($auth_success){ header ("Location: index.php"); exit; } } ?> <html> <head> <title>Регистрация и авторизация пользователей</title> </head> <body> <?php if ($auth){ echo "Здравствуйте, ".$_SESSION ["login"]."(<a href='logout.php'>Выход</a>)"; } else { echo '<h1>Регистрация</h1> <form name="red" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="reg" value="Зарегистрироваться"> </td> <tr> </table> </form> <h1>Авторизация</h1> <form name="auth" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="auth" value="Войти"> </td> <tr> </table> </form>'; } ?> <h1>Регистрация</h1> <form name="red" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="reg" value="Зарегистрироваться"> </td> <tr> </table> </form> <h1>Авторизация</h1> <form name="auth" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="auth" value="Войти"> </td> <tr> </table> </form> </body> </html> index.php PHP: <?php require_once "lib/user_class.php"; $user = User::getObject(); $auth = $user->isAuth(); if (isset ($_POST["reg"])){ $login = $_POST["login"]; $password = $_POST["password"]; $reg_success = $user->regUser($login, $password); } elseif (isset ($_POST["auth"])){ $login = $_POST["login"]; $password = $_POST["password"]; $auth_success = $user->login($login, $password); if ($auth_success){ header ("Location: index.php"); exit; } } ?> <html> <head> <title>Регистрация и авторизация пользователей</title> </head> <body> <?php if ($auth){ echo "Здравствуйте, ".$_SESSION ["login"]."(<a href='logout.php'>Выход</a>)"; } else { echo '<h1>Регистрация</h1> <form name="red" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="reg" value="Зарегистрироваться"> </td> <tr> </table> </form> <h1>Авторизация</h1> <form name="auth" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="auth" value="Войти"> </td> <tr> </table> </form>'; } ?> <h1>Регистрация</h1> <form name="red" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="reg" value="Зарегистрироваться"> </td> <tr> </table> </form> <h1>Авторизация</h1> <form name="auth" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="auth" value="Войти"> </td> <tr> </table> </form> </body> </html> --- Добавлено --- var_dump ($auth); и print_r нетбинксом проверял не пойму где ошибка
выводит 2 раза авторизацию и регистрацию, а должно один раз при авторизации если неправильный пароль , то перенаправлять на эту страницу.
NULL Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at E:\OpenServer\domains\test\3\index.php:2) in E:\OpenServer\domains\test\3\lib\user_class.php on line 27 но не пойму что сделать нужно
Предупреждение: session_start (): не удается отправить ограничитель кеша сеанса - уже отправленные заголовки (вывод запущен в E: \ OpenServer \ domains \ test \ 3 \ index.php: 2) в E: \ OpenServer \ domains \ test \ 3 \ lib \ User_class.php в строке 27
ты переводил ошибку? Там же написано, что на строке №2 в файле index.php уже начался вывод информации, а ты на 27 строке файла user_class.php пытаешься работать с заголовками. В протоколе HTTP, сначала заголовки, потом остальное. До начало вывода нужно со всеми заголовками разобраться. Сессия использует cookie, а они в заголовках. Можешь через ob_start накапливать информацию, а выводить после окончания работы с заголовками http.
https://habrahabr.ru/post/148272/ Спойлер: !!!! программирование — это, в первую очередь, способ мыслить, оперировать в уме абстрактными сущностями, эдакая «игра в бисер». Точка. ТОЧКА бл**ь
есть протокол http, разные версии, можно взять например 1.1, так вот, он грубо говоря состоит из заголовков и данных, ты в PHP создаёшь ответ по правилам протокола http, например ты вывел html теги или даже пробел, потом хочешь установить cookie, ты получаешь ошибку и предупреждения, потому что сначала надо сформировать все заголовки, а потом уже данные. Но можно это обойти, данные не отправлять, а сохранять в переменную, и уже в конце скрипта, когда с заголовками перестал работать, просто отправить данные. Главное что сначала заголовки, потом данные. Посмотри функции ob_start(), ob_get_content() --- Добавлено --- @ubunta2 тебе нужно остановиться и поиграться с DNS, HTTP, fiddler, почитать про сети и IP, регистрацию доменов, администрирование linux, настройка web-server apache/nginx, чтобы понятно как живёт компьютер от ввода адреса в браузер до вывода результата.
ворд пресс тут не причём, надо знать про IANA, ICANN, root DNS, регистраторов доменов, потренироваться на бесплатных от freenom можно. Для практики зарегистрируй домен у freenom, направь его к DNS от cloudflare и подключи к бесплатному хостингу.
ворд пресс тут не причём, надо знать про IANA, ICANN, root DNS, регистраторов доменов, потренироваться на бесплатных от freenom можно. Для практики зарегистрируй домен у freenom, направь его к DNS от cloudflare и подключи к бесплатному хостингу.
@MouseZver https://www.iana.org/domains/root/db https://ru.wikipedia.org/wiki/ICANN например у домена .ru есть свои NS сервера, они у IANA их регистрировали, если хочешь домен .mousezver вот нужно с ICANN договариваться
в нетбинксе можно синтаксис найти. Если есть ошибка , то можно увидеть при загрузке странице в какой строке она.