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

Проблема с сессиями

21.06.2019, 02:34. Показов 604. Ответов 7

Студворк — интернет-сервис помощи студентам
Здравствуйте. Хочу чтобы при добавлении материала в базу данных так же записывался ид пользователя, который авторизован в данный момент. То есть ид пользователя, который добавил этот материал... Но при регистрации в переменные сессии не записываются данные из базы данных(, из-за этого ничего не получается... А почему не записывается я не понимаю. Помогите пожалуйста.

Файл регистрации:

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
62
63
64
65
66
67
68
69
70
71
72
73
<?php
ob_start();
 
require_once ("../../sql/bd.php");
 
$url = file_get_contents('../../editor/name_domain.txt');
 
$login = $_POST['login'];
$password = $_POST['password'];
$email = $_POST['email'];
 
 
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
    $login = trim($login); //delete space
    $login = strip_tags($login); //delete html and php
    $password = stripslashes($password);
    $password = htmlspecialchars($password);
    $password = trim($password);
    $password = strip_tags($password);
    $email = stripslashes($email);
    $email = htmlspecialchars($email);
    $email = trim($email);
    $email = strip_tags($email);
 
if( !empty($login) && !empty($password) && !empty($email) ) {
 
$sql_check = 'SELECT EXISTS( SELECT login, email FROM users WHERE login = :login or email = :email )';
$params = [':login' => $login, ':email' => $email];
 
$stmt_check = $pdo->prepare($sql_check);
$stmt_check->execute($params);
 
$user = $stmt_check->fetchColumn();
 
if (!$user) {
 
$password = password_hash($password, PASSWORD_DEFAULT);
 
$sql = 'INSERT INTO users(login, password, email) VALUES (:login, :password, :email)';
$params = [ ':login' => $login, ':password' => $password, ':email' => $email ];
 
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
 
echo "Вы зарегистрировались";
 
$_SESSION = array();
 
                session_start();
 
$_SESSION['auth'] = true;
                $_SESSION['id'] = $user->id;
                $_SESSION['login'] = $user->login;
                print_r($_SESSION);
 
//header("Refresh:2; url=http://$url");
 
} else {
    echo "Пользователь с таким логином или email существует";
 
    header("Refresh:2; url=$url/page/registratsiya/");
}
 
} else {
    echo "Заполните все поля";
 
    header("Refresh:2; url=http://$url/page/registratsiya/");
}
 
ob_end_flush();
 
?>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2019, 02:34
Ответы с готовыми решениями:

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

Проблема c сессиями, как идентифицировать посетителя?
Краткая предыстория: Понадобилось мне сделать статистику посещений сайта. Все сделал, все работает. В начале каждого скрипта...

Проблема с $_COOKIE и сессиями
Суть в том что во время авторизации пользователя, при условии что логин = логин в базе, а пароль = пароль в базе, запускается сессия...

7
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
21.06.2019, 07:30
koks_ikkkk, скрипт нужно начать с
PHP
1
session_start();
1
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
21.06.2019, 11:39  [ТС]
А сессии нужно подключать только в обработчике формы, или ещё где сама форма находится?

Добавлено через 5 минут
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_user' cannot be null in PDOStatement->execute(Array) #1 {main} thrown in on line 128
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
21.06.2019, 12:01
Цитата Сообщение от koks_ikkkk Посмотреть сообщение
А сессии нужно подключать
во всех скриптах, где сессия нужна.
значение для колонки
Цитата Сообщение от koks_ikkkk Посмотреть сообщение
id_user
не должно быть пустым; или забыли указать или где-то потеряли. Для всех колонок таблицы mysql в sql запросе должны быть указаны величины.
0
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
21.06.2019, 12:27  [ТС]
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
62
63
64
65
66
67
68
69
70
71
72
<?php
session_start();
ob_start();
 
require_once ("../../sql/bd.php");
 
$url = file_get_contents('../../editor/name_domain.txt');
 
$login = $_POST['login'];
$password = $_POST['password'];
$email = $_POST['email'];
 
 
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
    $login = trim($login); //delete space
    $login = strip_tags($login); //delete html and php
    $password = stripslashes($password);
    $password = htmlspecialchars($password);
    $password = trim($password);
    $password = strip_tags($password);
    $email = stripslashes($email);
    $email = htmlspecialchars($email);
    $email = trim($email);
    $email = strip_tags($email);
 
if( !empty($login) && !empty($password) && !empty($email) ) {
 
$sql_check = 'SELECT EXISTS( SELECT login, email FROM users WHERE login = :login or email = :email )';
$params = [':login' => $login, ':email' => $email];
 
$stmt_check = $pdo->prepare($sql_check);
$stmt_check->execute($params);
 
$user = $stmt_check->fetchColumn();
 
if (!$user) {
 
$password = password_hash($password, PASSWORD_DEFAULT);
 
$sql = 'INSERT INTO users(login, password, email) VALUES (:login, :password, :email)';
$params = [ ':login' => $login, ':password' => $password, ':email' => $email ];
 
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
 
echo "Вы зарегистрировались";
 
$_SESSION = array();
 
$_SESSION['auth'] = true;
                $_SESSION['id'] = $user->id;
                $_SESSION['login'] = $user->login;
                print_r($_SESSION);
 
//header("Refresh:2; url=http://$url");
 
} else {
    echo "Пользователь с таким логином или email существует";
 
    header("Refresh:2; url=$url/page/registratsiya/");
}
 
} else {
    echo "Заполните все поля";
 
    header("Refresh:2; url=http://$url/page/registratsiya/");
}
 
ob_end_flush();
 
?>
Почему-то в сессию не передаются данные при регистрации, а в базу отправляются...
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
21.06.2019, 12:36
koks_ikkkk, 46-я строку уберите, $_SESSION и так суперглобальный массив. Для чего ob_start()? Далее - экземпляр класса $user что представляет из себя и что делают его методы id и login?
0
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
21.06.2019, 13:07  [ТС]
ob_start() - чтобы работали редиректы.
$user данные пользователя из базы данных.
id и login - его данные соответственно.

Добавлено через 40 секунд
Если использовать форму входа то работает, а при регистрации сессии не работают.

Добавлено через 17 минут
Форма входа:

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
<?php
                session_start();
require_once ("sql/bd.php");
 
$url = file_get_contents('editor/name_domain.txt');
 
        $login = $_POST['login'];
$password = $_POST['password'];
 
 
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
    $login = trim($login); //delete space
    $login = strip_tags($login); //delete html and php
    $password = stripslashes($password);
    $password = htmlspecialchars($password);
    $password = trim($password);
    $password = strip_tags($password);
 
    if( !empty($login) && !empty($password) ) {
 
        $sql = ("SELECT id, login, password FROM users WHERE (login = :login) or (email = :email)");
        
        $params = [':login' => $login, ':email' => $login];
 
        $stmt = $pdo->prepare($sql);
        $stmt->execute($params);
 
        $user = $stmt->fetch(PDO::FETCH_OBJ);
 
        if ($user) {
            
            if ( password_verify($password, $user->password) ) {
                echo "Вы авторизовались";
 
$_SESSION['auth'] = true;
                $_SESSION['id'] = $user->id;
                $_SESSION['login'] = $user->login;
 
               header("location: http://$url");
            } else {
                echo "Не верный логин или пароль";
            }
 
        } else {
                echo "Не верный логин или пароль";
            }
    }
 
?>
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
21.06.2019, 15:04
koks_ikkkk, ещё раз как создаётся экземпляр класса $user? Очень похоже, что $user нету, поэтому условие в 31-й строке не выполняется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2019, 15:04
Помогаю со студенческими работами здесь

Работа с сессиями
Всем доброго дня! Старая избитая тема: Сделал 3 тестовых файла php. В первом регистрируется сессия, два других получают переменные -...

Работа с сессиями
привет пишу простенькую програмку. регаю пользователя, если все ок, то перехожу на страницу с его данными. ТУТ Все ХОРОШО. но если...

Проблнема с сессиями
В начале скрипта вписываю session_start(); Комп выдаёт: Как Это понимать!?

Работа с сессиями
У меня выводит =&gt; 1 Но пишет что мне нет доступа . if (isset($_SESSION) == 1) { echo 'Вы зашли под своими данными . '; ...

Работа с сессиями
Всем привет! Ни как не могу понять как работать с сессиями. Вот представьте, зашёл пользователь на сай, я создаю сессию...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru