Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 96

Авторизация php + mysql

05.10.2021, 23:43. Показов 1598. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему на локальном сервере авторизация работает?

А при выкатывании на хост не работает?

К БД подключился правильно. Регистрация работает, вход нет.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$data = $_POST;
if(isset($data['do_signin'])) {
    $errors = array();
    $user = R::findOne('users', 'login = ?', array($data['login']));
    if($user) {
 
        if(password_verify($data['password'], $user->password)) {
            $_SESSION['logged_user'] = $user;
            header('Location: /');
        } else {
            $errors = "Неверно введен пароль";
        }
    } else {
        $errors[] = "Пользователь с таким логином не найден";
    }
 
    if(!empty($errors)) {
        echo '<div style = "color: white;">'.array_shift($errors).'</div><hr>';
    }
}
 
?>
Добавлено через 2 часа 53 минуты
В начале signin.php добавил:
PHP
1
session_start();
Получилось авторизоваться со второго раза. То есть, вводишь логин и пароль и кнопку "Войти" и потом проделываешь то же самое. В чем может быть проблема?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2021, 23:43
Ответы с готовыми решениями:

Авторизация PHP-MySQL
Суть проблемы в том, что не проходит авторизация через ajax Код главной страницы &quot;index.php&quot; &lt;html&gt; &lt;head&gt; ...

регистрация и авторизация на php mysql
Регистрируюсь и все заносится в базу данных, но при входе на сайт все равно выводится что я захожу как гость. Почему? Как это исправить? ...

Авторизация php+mysql + куки
Всем добрый день. Пишу сайт, нужна авторизация. Решил использовать это: http://habrahabr.ru/post/13726/ Все сделал как там,...

16
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
06.10.2021, 07:06

Не по теме:


Цитата Сообщение от vitold54 Посмотреть сообщение
R::findOne
не юзайте это. либо пользуйтесь "дефолтными инструментами", либо научитесь свою обертку писать...



структура не ясна, но

Цитата Сообщение от vitold54 Посмотреть сообщение
<?php
$data = $_POST;
...
...R::findOn(... // ????
как у вас работает сие чудо без подключения?
0
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 96
06.10.2021, 12:03  [ТС]
Цитата Сообщение от Fart83 Посмотреть сообщение
как у вас работает сие чудо без подключения?
Перед всем этим кодом идет подключение php файла со всеми соединениями:

PHP
1
2
3
4
5
require "libs/rb.php";
   R::setup( 'mysql:host=;dbname=,
        '', '' );
 
   session_start();
Добавлено через 1 час 7 минут
Цитата Сообщение от vitold54 Посмотреть сообщение
$_SESSION['logged_user'] = $user;
            header('Location: /');
На отладке понял, что не срабатывает открытие сессии. Проверка пароля сработала.
0
Заблокирован
06.10.2021, 18:08
Цитата Сообщение от vitold54 Посмотреть сообщение
На отладке понял, что не срабатывает открытие сессии.
В самом верху скрипта:
PHP
1
2
3
  if(!isset($_SESSION)){
    session_start();
    }
Ну, или тогда разбираться в конфигах сервера.
0
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 96
06.10.2021, 21:46  [ТС]
Цитата Сообщение от Camy Посмотреть сообщение
if(!isset($_SESSION)){
    session_start();
    }
Не помогло. А в каком конфиге то копаться? У меня на локалке все работает, а на хостингах не, на 3 хостингах затестил уже.
В .htacces копаться? Так там только на кодировку все стоит
0
Заблокирован
06.10.2021, 22:21
Цитата Сообщение от vitold54 Посмотреть сообщение
на 3 хостингах затестил уже
На хостингах у Вас доступа к серверу нет и что-то мне подсказывает, что там должно быть всё в порядке.
Цитата Сообщение от vitold54 Посмотреть сообщение
Получилось авторизоваться со второго раза.
Ааа.. так всё-таки срабатывает. Я это, когда писал прошлый пост, не заметил. Странно, конечно. Есть некоторые предположения. Когда стартуется сессия - создается файл на сервере. А имя этого файла - это значение сессионной куки, которая устанавливается в браузер. Прочитать эту куку можно только после обновления страницы или открытия новой на этом же сайте, после того, как браузер отправит эту куку серверу. Сессию можно прочитать сразу, после записи. Записал в файл и прочитал. А вот куку - только после обновления страницы. Моё предположение такое. Надо запускать сессию при первом же заходе на сайт. Что бы на каждой странице было - session_start(); Ну или на нужных страницах... там куда может попасть пользователь. После этого сессионная кука уже будет установлена. Ну, а при авторизации при правильном входе будет в сессию будет записываться logged_user со значением $user.
0
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 96
06.10.2021, 22:47  [ТС]
Цитата Сообщение от Camy Посмотреть сообщение
Что бы на каждой странице было - session_start();
Уже пробовал, не помогает.


Цитата Сообщение от vitold54 Посмотреть сообщение
if(password_verify($data['password'], $user->password)) {
            $_SESSION['logged_user'] = $user;
           
Я на этом моменте вместо сессии просто попробовал вывести через echo буквы. Все вывелось. Значит, ошибка на сессии. Странная тема. Уже много способов попробовал, все без толку

Добавлено через 5 минут
Цитата Сообщение от Camy Посмотреть сообщение
Странно, конечно.
Может есть какой нибудь костыль? Как по другому авторизоваться можно?
0
Заблокирован
06.10.2021, 23:03
Цитата Сообщение от vitold54 Посмотреть сообщение
просто попробовал вывести через echo буквы.
А что в переменной $user ? Лучше бы попробовал вывести её. И что вообще происходит? Не разу об этом не было сказано. Не срабатывает перенаправление на главную?
0
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 96
06.10.2021, 23:13  [ТС]
Цитата Сообщение от Camy Посмотреть сообщение
А что в переменной $user ?
Вот, только что сейчас регистрация прошла успешно. Вход так же не работает.

Если юзер, который введен в форму входа существует и пароли совпадают, то вместо сессии я вывел сейчас переменную $user. Вот ответ:
Code
1
{"id":"8","login":"456","vk":"456","password":"$2y$10$Drj.UlT7Y4jOmOeql7RDxe3P3bT0U.X0OoaHz0zKyn3U4BgtlWcr."}
Цитата Сообщение от Camy Посмотреть сообщение
Не срабатывает перенаправление на главную?
Перенаправление не срабатывает.
0
Заблокирован
06.10.2021, 23:27
Цитата Сообщение от vitold54 Посмотреть сообщение
Вот ответ:
Это массив? В сессию загоняешь массив? Это работало на локальном сервере и на хостинге со второго раза? Ну... не знаю. Обычно записывается строка ключ-значение; Может надо записывать вот так:
PHP
1
 $_SESSION['logged_user'] = $user->login;
0
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 96
06.10.2021, 23:42  [ТС]
Цитата Сообщение от Camy Посмотреть сообщение
$_SESSION['logged_user'] = $user->login;
Увы, не сработало.

Цитата Сообщение от Camy Посмотреть сообщение
и на хостинге со второго раза?
Сейчас попробовал в форму авторизации ввести данные, отправить их, потом еще раз нажать кнопку "Войти", но уже данные не вводить. То есть отправляем пустые поля. И вот со второго раза и входит.

Вот весь код:

Подключение к бд:

bd.php
PHP
1
2
3
4
5
6
<?php require "libs/rb.php";
 
   R::setup( 'mysql:host=;dbname=',
        '', '' );
   
?>

Регистрация:
signup.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php session_start();
$data = $_POST;
  if(isset($data['do_signup'])) {
 
    $errors = array();
    if( trim($data['login']) == '') {
      $errors[] = 'Введите логин!';
    }
 
    if(trim($data['vk']) == '') {
      $errors[] = 'Введите Ваш VK.';
    }
 
    if($data['password'] == '') {
      $errors[] = 'Введите пароль.';
    }
 
    if(R::count('users', "login = ?", array($data['login'])) > 0) {
      $errors[] = 'Пользователь с таким логином уже существует';
    }
 
    if(R::count('users', "vk = ?", array($data['vk'])) > 0) {
      $errors[] = 'Пользователь с таким ВК уже существует';
    }
 
    if(empty($errors)) {
 
      $user = R::dispense('users');
      $user->login = $data['login'];
      $user->vk = $data['vk'];
      $user->password = password_hash($data['password'], PASSWORD_DEFAULT);
      R::store($user);
      echo '<div style = "color: green; text-align:center;">Вы успешно зарегистрированы!</div><hr>';
 
 
    } else {
      echo '<div style = "color: white;">'.array_shift($errors).'</div><hr>';
    }
 
 
  }
 
?>
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form action="signup.php" class = "signup-form" method="POST">
 
 
<p>
    
    <input type="text" class = "input-data" name="login" placeholder ="Логин"  ><br>
</p>
 
<p>
    <input type="text" class = "input-data"  name="vk" placeholder="VK"><br>
</p>
 
<p>
    <input type="password" class = "input-data" name="password" placeholder = "Пароль"><br>
</p>
 
  <button type="submit" class = "upin" name = "do_signup">СОЗДАТЬ АККАУНТ</button>
 
</form>

Авторизация
signin.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php session_start(); 
$data = $_POST;
if(isset($data['do_signin']))
 {
    $errors = array();
    $user = R::findOne('users', 'login = ?', array($data['login']));
    if($user) {
            // логин существует
        if(password_verify($data['password'], $user->password)) {
            $_SESSION['logged_user'] = $user;
 
            header('Location: /');
        } else {
            $errors[] = "Неверно введен пароль";
        }
    } else {
        $errors[] = "Пользователь с таким логином не найден";
    }
 
    if(!empty($errors)) {
        echo '<div style = "color: white;">'.array_shift($errors).'</div><hr>';
    }
}
 
?>
HTML форма, аналогичная, как и в регистрации.
0
Заблокирован
07.10.2021, 06:31
А если вот так:
PHP
1
2
3
4
5
6
7
8
9
10
 if(password_verify($data['password'], $user->password)) 
     {
            header("Refresh: 1; URL=/");
 
            $_SESSION['logged_user'] = $user; 
           
       } 
    else {
            $errors[] = "Неверно введен пароль";
        }
0
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 96
07.10.2021, 10:50  [ТС]
Цитата Сообщение от Camy Посмотреть сообщение
А если вот так:
Ага, так авторизация сработала с первого раза. Но все же не перебросило на главную страницу.

Нажал на кнопку авторизоваться, страница как бы просто обновилась, далее перешел на главную и все, авторизован. Сверху, в заголовке, кнопки изменились на "Профиль" и "Выйти", вместо "Войти" и "Регистрация"
0
Заблокирован
07.10.2021, 10:59
Цитата Сообщение от vitold54 Посмотреть сообщение
Но все же не перебросило на главную страницу.
Такого быть не может. Значит у тебя есть вывод в браузер до отправления header. Возможно, из-за этого все косяки. И локальный сервер походу на Винде. Вот... становится уже понятно. Советую почитать вот эту тему:
Что означает предупреждение "headers already sent"
0
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 96
07.10.2021, 18:16  [ТС]
Цитата Сообщение от Camy Посмотреть сообщение
И локальный сервер походу на Винде.
Да, на винде.

Цитата Сообщение от Camy Посмотреть сообщение
Советую почитать вот эту тему:
Почитал, протестировал, вроде как, все варианты, но не помогло.


Может, я делаю что-то не так, может проблема в .htaccess?

Прикреплю rar проекта. Может удобнее будет.
Вложения
Тип файла: rar vitold.my.rar (98.8 Кб, 5 просмотров)
0
Заблокирован
07.10.2021, 19:03
Лучший ответ Сообщение было отмечено vitold54 как решение

Решение

Цитата Сообщение от vitold54 Посмотреть сообщение
Почитал, протестировал, вроде как, все варианты, но не помогло.
Плохо прочитал. Идет вывод в браузер до отсылки header.
Счас покажу на примере одного твоего скрипта. Проверять не буду... сам проверь. Так должно работать. И другие переделай.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
session_start();
require "bd.php";
 
$data = $_POST;
if(isset($data['do_signin']))
 {
    $errors = array();
    $user = R::findOne('users', 'login = ?', array($data['login']));
    if($user) {
            // логин существует
        if(password_verify($data['password'], $user->password)) {
            
 
            header('Location: /');
            $_SESSION['logged_user'] = $user;
        } else {
            $errors[] = "Неверно введен пароль";
        }
    } else {
        $errors[] = "Пользователь с таким логином не найден";
    }
 
    if(!empty($errors)) {
        echo '<div style = "color: white;">'.array_shift($errors).'</div><hr>';
    }
}
 
 require "blocks/header.php"; 
?>
 
<!DOCTYPE html>
<html lang = "ru">
 
<head>
  <title>Vitold - Вход</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width = device-width, install-scale = 1.0">
    <meta http-equiv="X-UA-Compatible" content="ie = edge">
  
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
    <link rel="stylesheet"  href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <link rel="stylesheet" href="css/style.css">
</head>
 
<body>
 
<form action = "signin.php" class = "signup-form" method = "POST">
 
<p>
    <input type="text" class = "input-data" name="login" placeholder="Логин"><br>
</p>
 
<p>
    <input type="password" class = "input-data" name="password" placeholder="Пароль"><br>
</p>
 
<button type="submit" class = "upin" name = "do_signin">ВОЙТИ</button>
 
</form>
 
<?php require "blocks/footer.php" ?>
1
0 / 0 / 0
Регистрация: 22.09.2019
Сообщений: 96
07.10.2021, 23:57  [ТС]
Цитата Сообщение от Camy Посмотреть сообщение
Так должно работать.
Да, работает. Переделал. После нажатия кнопки "Войти" перебрасывает на главную страницу авторизованным пользователем. Все хорошо, большое спасибо, но есть одно но:

Мой файл header.php ( шапка )

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php session_start();?>
 
 
 
<header class = "head d-flex flex-column flex-md-row align-items-center p-3 px-md-4 mb-3 bg-white  shadow-sm ">
 <a class = "header btn-lg " href="/">Vitold</a>
  <nav class="my-2 my-md-0 mr-md-3">
    <a class="text"  href="https://vk.com/vitoldans" target="_blank">Заказать водку</a>
  </nav>
  <nav class = "my-2 my-md-0 mr-md-3">
    <a class="solo" href="/jobs.php">Стать Славянином</a>
  </nav>
 
<?php if($_SESSION['logged_user']) : ?>
<a class ="header_profile">Профиль 
<?php 
 echo $_SESSION['logged_user']->login; ?> </a>
<hr> 
<a class = "logout" href="logout.php">Выйти</a>
<?php else : ?>
  <a class="signin" href="/signin.php">Войти</a>
   <a class = "signup" href="/signup.php">Регистрация</a>
 <?php endif; ?>
</header>
Если делаю по примеру, получается так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php session_start();
require "bd.php";
 if($_SESSION['logged_user']) : ?>
<a class ="header_profile">Профиль 
<?php 
 echo $_SESSION['logged_user']->login; ?> </a>
<hr> 
<a class = "logout" href="logout.php">Выйти</a>
<?php else : ?>
  <a class="signin" href="/signin.php">Войти</a>
   <a class = "signup" href="/signup.php">Регистрация</a>
 <?php endif; ?>
 
<header class = "head d-flex flex-column flex-md-row align-items-center p-3 px-md-4 mb-3 bg-white  shadow-sm ">
 <a class = "header btn-lg " href="/">Vitold</a>
  <nav class="my-2 my-md-0 mr-md-3">
    <a class="text"  href="vk.com" target="_blank">123</a>
  </nav>
  <nav class = "my-2 my-md-0 mr-md-3">
    <a class="solo" href="vk.com">123</a>
  </nav>
 
 
</header>
Но логин не выводит в этом моменте:
PHP
1
echo $_SESSION['logged_user']->login;
Добавлено через 4 часа 17 минут
Исправил. Авторизация проходит с первого раза и в header выводит логин.
Ошибка была в том, что я сразу открывал сессию в index.php.

PHP
1
2
3
4
5
6
7
<?php 
 
require "bd.php"; // подключаем файл с БД
require "blocks/header.php" ; // подключаем шапку
session_start(); // открытие сессии
 
?>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.10.2021, 23:57
Помогаю со студенческими работами здесь

Авторизация админ панели PHP+MySQL
Хочу сделать авторизацию через бд но что-то не получается. Сама таблица admins состоит из столбцов: id, login, password. вот код...

Авторизация MySQL
Здраствуйте, как реализовать скрипт который будет скрывать Кнопку от не авторизированых пользователей? Я только понимаю, что это делается...

Авторизация через MySQL
Пишу на php авторизацию: $result = mysql_query(&quot;SELECT login,password FROM users&quot;, $db); $myrow = mysql_fetch_array($result); ...

perl+mysql авторизация
подскажите как организовать следующее. 1) на пустой странице идет запрос логина. 2) вводишь логин - выводится запрос пароля 3) идет...

Авторизация php+mysql
Есть у кого скрипт авторизации на php + mysql, без куков желательно. Если не лень может кто переделать name это логин, pass пароль,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru