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

Найти ошибку в регистрации через сессии

06.12.2018, 21:41. Показов 2391. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php 
session_start();
   if (isset($_POST['reg'])) 
    {
        $errors = array();
        if (!preg_match("/^[a-zA-Z0-9]+$/", $_POST['login'])) {
 
          $errors[]='Логин должен содержать только буквы латинского алфавита и цифры!';
          echo '<div style="color:red;">'.array_shift($errors).'</div>';        
        }
 
        if((strlen($_POST['login']<3) && strlen($_POST['login']>30)))
          {
            $errors[]='Логин должен содержать от 3 до 30 символов!';
            echo '<div style="color:red;">'.array_shift($errors).'</div>';
          }
        if ( trim($_POST['surname']) == '')
          {
              $errors[]='Введите фамилию!';
              echo '<div style="color:red;">'.array_shift($errors).'</div>';
 
          }
 
        if ( trim($_POST['name']) == '')
          {
            $errors[]='Введите имя!';
            echo '<div style="color:red;">'.array_shift($errors).'</div>';
          }
 
        if ( trim($_POST['patronymic']) == '')
          {
 
            $errors[]='Введите отчество!';
            echo '<div style="color:red;">'.array_shift($errors).'</div>';
            
          }
 
        if ( trim($_POST['phone']) == '')
          {
            $errors[]='Введите телефон!';
            echo '<div style="color:red;">'.array_shift($errors).'</div>';
          }
 
        if ( trim($_POST['login']) == '')
          {
            $errors[]='Введите логин!';
            echo '<div style="color:red;">'.array_shift($errors).'</div>';
          }
 
        if ( trim($_POST['email']) == '')
          {
            $errors[]='Введите Е-mail!';
            echo '<div style="color:red;">'.array_shift($errors).'</div>';
          }
 
        if ( $_POST['password'] == '')
          {
            $errors[]='Введите пароль!';
            echo '<div style="color:red;">'.array_shift($errors).'</div>';
          }
 
        if ( $_POST['password1'] == '')
          {
            $errors[]='Введите пароль ещё раз!';
            echo '<div style="color:red;">'.array_shift($errors).'</div>';
          }
 
        if ( $_POST['password1'] != $_POST['password'])
          {
            $errors[]='Повторный пароль введён неверно!';
            echo '<div style="color:red;">'.array_shift($errors).'</div>';
          }
 
        if (count($errors)==0) 
          {
            $surname=htmlspecialchars($_POST['surname']);
            $name=htmlspecialchars($_POST['name']);
            $patronymic=htmlspecialchars($_POST['patronymic']);
            $phone=htmlspecialchars($_POST['phone']);
            $login=htmlspecialchars($_POST['login']);
            $email=htmlspecialchars($_POST['email']);
            $password=password_hash($par,PASSWORD_DEFAULT);
            $par=htmlspecialchars($_POST['password']);
 
$password=md5($POST['password']);
                include $_SERVER['DOCUMENT_ROOT'].'/includes/db.inc.php'; 
                try
                  {
                    $sql='INSERT INTO users SET login=:login,password=:password,email=:email,phone=:phone,surname=:surname,name=:name,patronymic=:patronymic';
                    $s=$pdo->prepare($sql);
                    $s->bindValue(':login',$_POST['login']);
                    $s->bindValue(':password',$password);
                    $s->bindValue(':email',$_POST['email']);
                    $s->bindValue(':phone',$_POST['phone']);
                    $s->bindValue(':surname',$_POST['surname']);
                    $s->bindValue(':name',$_POST['name']);
                    $s->bindValue(':patronymic',$_POST['patronymic']);
                    $s->execute();
                    $_SESSION['avt']=1;
                  }
                catch (PDOException $e)
                  {
                    $error = 'Ошибка при регистрации пользователя.';
                    include 'error.php';
                    exit();
                  }
         }
    if($_SESSION['avt']=1) 
{
    echo '<script type="text/javascript">alert("регистрация прошла успешно");</script>';
include_once 'vhod.html'; 
    unset($_SESSION['avt']);
}
   }
        
?>
Добавлено через 54 секунды
Помогите пожалуйста найти ошибку, почему не работает код(((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2018, 21:41
Ответы с готовыми решениями:

Сессии и куки в регистрации
здравствуйте, есть у меня проблема! я работаю со скриптом регистрации, довольно простой скрипт, и эффективный! но есть загвоздка, с которой...

Вставить имя сессии в форму регистрации
Мне нужно отредактировать уже работающий скрипт php. Наверняка у многих новичков такая проблема. У меня есть регистрация пользователя для...

Сессии: Создать простую модель регистрации на Форуме
2. Создайте простую модель регистрации в Форуме. В задании вы выступаете в качестве Посетителя со своим именем Goer. 1 При помощи...

19
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
06.12.2018, 21:44
Какое подробное описание проблемы. У вас буквы платные на клавиатуре?

Цитата Сообщение от Fortune676 Посмотреть сообщение
$password=password_hash($par,PASSWORD_DE FAULT);
$par=htmlspecialchars($_POST['password']);
$password=md5($POST['password']);
Здесь происходит какая-то дичь. К тому же на последней строке $POST вместо $_POST.

Записывать в базу нужно результат работы password_hash, никакие htmlspecialchars и md5 тут не нужны.
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
06.12.2018, 21:53  [ТС]
Такой код скинули одногруппники, говорят рабочий , в форме регистрации ссылка на него но вот не работает пишет ошибка , а как шифровать пароль тогда? Тоесть везде вместо htmlspeciachars прописать password_hash?

Добавлено через 2 минуты
Получается сессии правильно прописаны ? И для них не нужно отдельного файла, просто единственное что было это вот этот файл и форма
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
06.12.2018, 23:04
Цитата Сообщение от Fortune676 Посмотреть сообщение
пишет ошибка
Какая? Нужно больше конкретики. Делаю то-то, на экране то-то, только так можно понять причину ошибки.

И покажите форму.

Цитата Сообщение от Fortune676 Посмотреть сообщение
как шифровать пароль тогда?
Шифровать не надо, надо хешировать функцией password_hash, а проверять соответствие пароля функцией password_verify.

Можно заменить на md5 в учебных целях, но на практике этого делать нельзя, подробней тут в красной рамке.

Цитата Сообщение от Fortune676 Посмотреть сообщение
везде вместо htmlspeciachars прописать password_hash?
Только для пароля. Вообще htmlspeciachars нужна для безопасного вывода данных на экран, иначе злоумышленник может вместо логина написать какой-нибудь скрипт вроде <script>alert('Вы взломаны')</script> и при выводе этот скрипт выполнится браузером.

Т.е. использовать эту функцию нужно, но не обязательно при записи в базу, можно применить её во время вывода переменных в HTML.

Паролю эта функция не нужна, поскольку хранить в базе вы будете хеш, а не оригинальный пароль. Да и вряд ли у вас возникнет желание выводить его на экран.

Цитата Сообщение от Fortune676 Посмотреть сообщение
unset($_SESSION['avt']);
А зачем удалять эту переменную сразу после авторизации?

Цитата Сообщение от Fortune676 Посмотреть сообщение
И для них не нужно отдельного файла
Для сессий нет, для БД нужен файл /includes/db.inc.php
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
07.12.2018, 11:12  [ТС]
Вот так выдает ошибку
Миниатюры
Найти ошибку в регистрации через сессии  
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
07.12.2018, 11:12  [ТС]
Файл includes и error подключены, они есть
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
07.12.2018, 11:43
Цитата Сообщение от Fortune676 Посмотреть сообщение
$error = 'Ошибка при регистрации пользователя.';
Перед этой строчкой напишите:
PHP
1
echo $e; die();
И скиньте сюда, что выведется на экран.
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
07.12.2018, 12:28  [ТС]
исключение 'PDOException' с сообщением 'SQLSTATE[23000]: нарушение ограничения целостности: 1062 повторяющаяся запись' 0 'для ключа' PRIMARY ' в C:\OSPanel\domains\localhost\baza\ker\re gistr\reg.php: 98 Трассировка стека: #0 C:\OSPanel\domains\localhost\baza\ker\re gistr\reg.php(98): PDOStatement- > execute() #1 {главная}

Добавлено через 39 секунд
HTML5
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
<form  action="reg.php" method="POST"> 
  <table>   <tr>      
            <td><label for="">*Фамилия:</label></td>
            <td><input type="text" name="surname"  size="35"  placeholder="Иванов" required="" value="<?php echo @$data['surname'];?>" /></td>
            </tr><tr>
             <td><label for="">*Имя:</label></td>
             <td><input type="text" name="name"  size="35" placeholder="Иван" required="" value="<?php echo @$data['name'];?>" /></td>
             </tr><tr>
             <td><label for="">*Отчество:</label></td>
             <td><input type="text" name="patronymic"  size="35" placeholder="Иванович" required="" value="<?php echo @$data['patronymic'];?>" /></td>
             </tr><tr>
            <td><label for="">Номер телефона:</label></td>
             <td><input type="text" name="phone" class="pole"  placeholder="8-800-555-35-35" size="35" value="<?php echo @$data['phone'];?>" /></td>
             </tr> <tr>
             <td><label for="">*Логин:</label></td>
             <td><input type="text" name="login"  size="35" required="" placeholder="ivanov2019" value="<?php echo @$data['login'];?>" /></td>
             </tr><tr>
             <td><label for="">*Email:</label></td>
             <td><input type="text" name="email"  size="35" required="" placeholder="ivan2019@***.ru" value="<?php echo @$data['email'];?>" /></td>
             </tr><tr> 
            <td><label for="">*Пароль:</label></td>
             <td><input type="text" name="password"  size="35" required="" placeholder="******" value="<?php echo @$data['password'];?>" /></td>
             </tr><tr>
             <td><label for="">*Подтвердите пароль:</label></td>
             <td><input type="text" name="password1"  size="35" required="" placeholder="******" value="<?php echo @$data['password'];?>" /></td>
             </tr> 
             </table>
           <p> <br>
                        <input type="hidden" name="id_passengers">
                        <input type="submit" value="Регистрация" name="reg"/> 
                    </p>
 
                                        </p>
                                    
                
                                    </section>
Добавлено через 45 секунд
вот из формы регистрации
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
07.12.2018, 12:34
Лучший ответ Сообщение было отмечено Fortune676 как решение

Решение

Цитата Сообщение от Fortune676 Посмотреть сообщение
повторяющаяся запись' 0 'для ключа' PRIMARY '
Скорее всего вы забыли указать автоинкремент для первичного ключа.
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
07.12.2018, 13:35  [ТС]
Вот глупая! ОГРОМНОЕ СПАСИБО , ВЫ ОЧЕНЬ МЕНЯ ВЫРУЧИЛИ , я б даже не догодалась(

Добавлено через 48 минут
HTML5
1
2
3
4
5
6
7
<form action="" method="post">
    <div>
        <input type="hidden" name="action" value="logout">
        <input type="hidden" name="goto" value="/baza/ker/">
        <input type="submit" value="Выйти">
    </div>
</form>



Такой код подходит для кнопки выход, или когда через сессии как то по другому делается?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
07.12.2018, 14:05
Fortune676, подходит. В обработчике будет нечто вроде:

PHP
1
2
3
4
5
6
if(isset($_POST['action']) and $_POST['action'] === 'logout')
{
    unset($_SESSION['avt']);
    header('Location: /login'); // Тут ссылка на страницу входа
    die();
}
Правда не понял назначение goto.
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
07.12.2018, 15:33  [ТС]
вот что добавила в проверку авторизации
PHP
1
2
3
4
5
if (isset($_POST['action']) and $_POST['action'] == 'logout') {
         unset($_SESSION['avt']);
        header('Location: ' . $_POST['goto']);
        exit();
    }


И на кнопку должна быть ссылка
<li><a id="normal" href="http://localhost/baza/ker/pravila.html">Правила приема</a></li>
<li><a id="big" href="logout.inc.html.php">Выход</a></li>

файл logout не пойму как переделать там до этого не много по другому было , только дошло, что в нем написать чтобы кнопке выход на него ссылку давать, извините не совсем хорошо у меня с языками прораммирования, пытаюсь понять
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
07.12.2018, 17:47
Цитата Сообщение от Fortune676 Посмотреть сообщение
И на кнопку должна быть ссылка
Тогда просто:

PHP
1
2
3
4
session_start();
unset($_SESSION['avt']);
header('Location: /baza/ker/');
exit();
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
07.12.2018, 19:15  [ТС]
Это в logout или в обработчик

Добавлено через 17 минут
там по методичке на защищенные страницы во такая ссылка ставилась <?php include '../logout.inc.html.php'; ?>
Но я же не могу на html страницы так прописать

Добавлено через 6 минут
если делаю его html/php то вот указывает на ошибка в проверке в этой строке if (isset($_POST['action']) and $_POST['action'] =?= 'logout') {

Добавлено через 1 минуту
Если убрать это строку кнопке выход на что ссылку тогда не пойму((

Добавлено через 2 минуты
goto показывает куда перенаправить , получается там в обработчике был указан он и в logout и там уже ссылка на выход, и в каждом защищенном файле он прописывался

Добавлено через 1 минуту
Если все это показать в обработчике куда ссылка на выход, как не пойму
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
07.12.2018, 20:02
Цитата Сообщение от Fortune676 Посмотреть сообщение
Это в logout или в обработчик
А причём тут обработчик формы регистрации? Вы хотите сделать отдельный скрипт для выхода - значит вставляете код выхода в скрипт выхода.

Цитата Сообщение от Fortune676 Посмотреть сообщение
на защищенные страницы
Что такое защищённая страница? И зачем защищать страницу выхода?

Цитата Сообщение от Fortune676 Посмотреть сообщение
Но я же не могу на html страницы так прописать
У вас написано .html.php, значит расширение файла php, а html является частью названия.

Цитата Сообщение от Fortune676 Посмотреть сообщение
goto показывает куда перенаправить
А это обязательно? Если юзер вышел - пусть его кидает на форму входа и всё.
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
10.12.2018, 23:34  [ТС]
Получается нужно просто создать отдельный файл , туда вот это
if(isset($_POST['action']) and $_POST['action'] === 'logout')
{
unset($_SESSION['avt']);
header('Location: /login'); // Тут ссылка на страницу входа
die();
}

И на него ссылку на кнопку выход и все?
Просто на учебе нам показывали прописывать это в авторизацию
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
11.12.2018, 06:18
Лучший ответ Сообщение было отмечено Fortune676 как решение

Решение

Цитата Сообщение от Fortune676 Посмотреть сообщение
Получается нужно просто создать отдельный файл , туда вот это
Если кнопка должна быть ссылкой - то нет, код должен быть таким: https://www.cyberforum.ru/post13135455.html

Переход по ссылке осуществляется методом GET, поэтому проверять переменные в $_POST смысла нет, там будет пусто.

Цитата Сообщение от Fortune676 Посмотреть сообщение
Просто на учебе нам показывали прописывать это в авторизацию
Вы показали этот код:
Цитата Сообщение от Fortune676 Посмотреть сообщение
HTML5
1
<li><a id="big" href="logout.inc.html.php">Выход</a></li>
Из него я сделал вывод, что вам нужно разлогинить пользователя в отдельном скрипте. А так сделать можно как угодно.
1
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
11.12.2018, 23:12  [ТС]
А как сделать что бы эта страница была защищенная и если стрелку назад нажимаешь например и т.п не вылетало снова на вход а оставалось в системе, а при выходе наоборот больше не пускало на эту страницу без пароля
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
12.12.2018, 00:35
Fortune676,
PHP
1
2
3
4
if(isset($_SESSION['avt']))
    echo 'Авторизация пройдена';
else
    echo 'Доступ запрещён';
0
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 26
12.12.2018, 14:14  [ТС]
это в обработку авторизации?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2018, 14:14
Помогаю со студенческими работами здесь

Найти ошибку в коде или как поменять вид внутренней регистрации?
и снова здравствуйте! написал регистрацию для сайта который на Joomla &lt;html&gt; &lt;head&gt; &lt;jdoc:include...

Создание сессии сразу же после регистрации
Всем привет! Хочу задать вопрос.Как сделать скрипт который обрабатывал форму регистрации и сразу же после его выполнения создавалась...

Исправить ошибку о регистрации RedHat
пишет ошибку: This system is not registered to Red Hat subsription managment. You can use subscription manager to register

Список через классы - найти ошибку в коде
Поглядите где накосячено? Никак не пойму, не вводит/выводит. // Определения класса Элемента class Element { ...

Подскажите ошибку в скрипте регистрации пользователей
Всем привет! Застрял на системе регистрации пользователей. Приведу код ниже. Таблица создана так: $name = &quot;users&quot;; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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