За последние 24 часа нас посетили 20011 программистов и 1001 робот. Сейчас ищут 317 программистов ...

Форма регистрации/авторизации ООП php

Тема в разделе "Сделайте за меня", создана пользователем Andrew21, 15 ноя 2021.

  1. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Помогите пожалуйста реализовать этот код соблюдая концепцию ООП или подскажите как это можно сделать, а также есть вопрос как здесь реализовать session and coockies и ajax запросы
    ФОРМА АВТОРИЗАЦИИ
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4.     <meta charset="utf-8">
    5.     <title>Авторизация</title>
    6. </head>
    7. <body>
    8.     <?php require_once "CRUD.php";
    9.     $pass;
    10.     if(isset($_POST['loginn']))
    11.     {
    12.         $salt = '1b34r7q5';
    13.         $pass = md5($salt.$_POST['password']);
    14.         $validlogin();
    15.         $paslog();
    16.         if ($GLOBALS['log']==1)
    17.         {
    18.             if ($GLOBALS['pas']==1)
    19.             {
    20.                 print_r("Вы авторизованны");
    21.                 $_SESSION['LogUser']=$_POST['name'];?>
    22.                 <p>Войти на<a href="/Site.php"> главную</a></p>
    23.             <?php
    24.         }
    25.             else
    26.             {
    27.                 print_r("Неверно введён пароль!");
    28.             }
    29.         }
    30.         else
    31.         {
    32.             print_r("Такого логина не существует!");
    33.         }
    34.     }
    35.         ?>
    36.     <form action="/Autorise.php" method = "POST" name="register">
    37.     <p>
    38.         <p><strong></strong>Введите логин</p>
    39.             <input type="text" name="login">
    40.         </p>
    41.             <p>
    42.                 <p><stronh></strong>Введите пароль</strong>:</p>
    43.                 <input type="text" name="password">
    44.             </p>
    45.             <p>
    46.                 <button type="submit" name="loginn">Войти</button>
    47.             </p>
    48.         </form>
    49. <p>У вас нет аккаунта ? <a href="/signup.php">Зарегистрируйтесь</a></p>
    ФАЙЛ ЗАПРОСОВ


    PHP:
    1. <?php
    2. $log;
    3. $maillog;
    4. $pas;
    5.     function CRUD_ADD()
    6.         {
    7.             $salt = '1b34r7q5';
    8.             //чтение файла
    9.         $data = file_get_contents('user.json');
    10.             //декодирование файла из json
    11.         $data = json_decode($data, true);
    12.             //создание нового юзера
    13.         $add_arr = array(
    14.             'login' => $_POST['login'],
    15.             'password' => md5($salt.$_POST['password1']),
    16.             'email' => $_POST['email'],
    17.             'name' => $_POST['name']
    18.         );
    19.             // присвоение масива переменной
    20.         $data[] = $add_arr;
    21.             //кодирование в json формат
    22.         $data = json_encode($data, JSON_PRETTY_PRINT);
    23.             //запись данных в файл
    24.         file_put_contents('user.json', $data);
    25.     }
    26.    
    27.     function ValidLog()
    28.     {
    29.             //чтение файла
    30.         $data = file_get_contents('user.json');
    31.             //декодирование файла из json
    32.         $data = json_decode($data,true);
    33.         // проход по массиву
    34.         foreach ($data as $value)
    35.         {// поиск нужной переменной
    36.             if ($value['login'] == $_POST['login'])
    37.             {// если есть совпадение
    38.                 $GLOBALS['log']=1;
    39.                     break;
    40.             }
    41.             else
    42.             {// если нет совпадений
    43.                 $GLOBALS['log']=0;
    44.             }
    45.         }
    46.     }
    47.     function EmailLog()
    48.     {
    49.         $data = file_get_contents('user.json');
    50.         $data = json_decode($data,true);
    51.         foreach ($data as $value)
    52.         {
    53.             if ($value['email'] == $_POST['email'])
    54.             {
    55.                 $GLOBALS['maillog']=1;
    56.                     break;
    57.             }
    58.             else
    59.             {
    60.                 $GLOBALS['maillog']=0;
    61.             }
    62.         }
    63.     }
    64.     function passLog()
    65.     {
    66.         $data = file_get_contents('user.json');
    67.         $data = json_decode($data,true);
    68.         foreach ($data as $value)
    69.         {
    70.             if ($value['password'] == $GLOBALS['pass'])
    71.             {
    72.                 $GLOBALS['pas']=1;
    73.                     break;
    74.             }
    75.             else
    76.             {
    77.                 $GLOBALS['pas']=0;
    78.             }
    79.         }
    80.     }
    81.     $paslog='passLog';
    82.     $mailyes = 'EmailLog';
    83.     $validlogin = 'ValidLog';
    84.     $add = 'CRUD_ADD';
    85. ?>

    ФФОРМА РЕГИСТРАЦИИ


    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4.     <meta charset="utf-8">
    5.     <title>Регистрация</title>
    6. </head>
    7. <!--подключение jquery и ajax библиотек-->
    8. <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    9. <!--подключение CRUD файла-->
    10. <?php require_once "CRUD.php";
    11. $data = $_POST;
    12. // нажатие кнопки "зарегистрироваться"
    13. if(isset($_POST['signup']))
    14.     {
    15.         // проверка на регистрируемый логин
    16.         $validlogin();
    17.         // проверка на регистрируемый емаил
    18.         $mailyes();
    19.         if(trim($data['login'])=='')
    20.         {
    21.             print_r("Введите логин");
    22.         }
    23.         elseif (trim($data['password1'])=='')
    24.         {
    25.             print_r("Введите пароль");
    26.         }
    27.         elseif (trim($data['password2'])=='')
    28.         {
    29.             print_r("Введите пароль повторно");
    30.         }
    31.         elseif (trim($data['email'])=='')
    32.         {
    33.             print_r("Введите E-mail");
    34.         }
    35.         elseif (trim($data['name'])=='')
    36.         {
    37.             print_r("Введите имя");
    38.         }
    39.         elseif ($GLOBALS['log']== 1)
    40.         {
    41.             print_r("Этот логин уже занят придумайте другой ");
    42.         }
    43.         elseif($_POST['password2']!=$_POST['password1'])
    44.             {
    45.             print_r("Повторный пароль введён не верно");
    46.             }
    47.             elseif($GLOBALS['maillog']==1)
    48.             {
    49.                 print_r("Этот маил уже зарегестрирован введите другой");
    50.             }
    51.         else
    52.         {
    53.             // использование функции CRUD_ADD
    54.             $add();
    55.             unset($data);
    56.             unset($_POST);
    57.             echo '<div style="color: green;">Вы успешно зарегестрировались!</div>';
    58.         }
    59.     }
    60. ?>
    61. <!--форма регистрации-->
    62. <form action="/signup.php" method = "POST" name="register">
    63.     <p>
    64.         <p><stronh></strong>Введите логин</p>
    65.             <input required type="text" id="nameid" name="login" pattern="[А-Яа-яЁё0-9]{6,}|[A-Za-z0-9]{6,}" placeholder="Не менее 6 символов" value ="<?php echo $data['login'];?>" > <img src="/help.png"  width="20" height="20" alt="помощь" title="Логин должен состоять только из латинских/русских символов с цифрами или без них">
    66.         </p>
    67.             <p>
    68.                 <p><stronh></strong>Введите пароль</strong>:</p>
    69.                 <input required type="text" name="password1" pattern="[А-Яа-яЁё0-9]{6,}|[A-Za-z0-9]{6,}" placeholder="не менее 6 символов" value ="<?php echo $data['password1'];?>"> <img src="/help.png"  width="20" height="20" alt="помощь" title="минимум 6 символов , обязательно должны состоять из цифр и букв">
    70.             </p>
    71.         <p>
    72.             <p><stronh></strong>Подтвердите пароль</strong>:</p>
    73.             <input required type="text" name="password2" value ="<?php echo $data['password2'];?>">
    74.         </p>
    75.             <p>
    76.                 <p><stronh></strong>введите E-mail</strong>:</p>
    77.                 <input required type="email" name="email" value ="<?php echo $data['email'];?>" pattern="\ ^ [ AZ 0-9 ._% + - ] + @ [ AZ 0-9 . - ] + \. [ AZ ] {2,} \ $ " required>
    78.             </p>
    79.         <p>
    80.             <p><stronh></strong>Введите имя</strong>:</p>
    81.             <input required type="text" name="name" pattern="[А-Яа-яЁё]{2,}" placeholder="Не менее 2 символов" value ="<?php echo $data['name'];?>" > <img src="/help.png"  width="20" height="20" alt="помощь" title="Имя должно быть написано на русском языке (только имя без фамилии и отчества)">
    82.         </p>
    83.             <p>
    84.                 <input type="submit" class="signupbtn" value="Зарегистрироваться" name="signup">
    85.                 <p>Уже есть учётная запись ? <a href="/Autorise.php">Войти</a></p>
    86.             </p>
    87.         </form>
    САМ САЙТ НА КОТОРЫЙ ДОЛЖНО ВЫВОДИТЬ ПОСЛЕ АВТОРИЗАЦИИ

    PHP:
    1. <?php require_once "CRUD.php";
    2.  
    3. if (isset($_SESSION['LogUser']))
    4. {
    5.     print_r("YES!");
    6. }
    7. else
    8. {
    9.     print_r("NO!");
    10. }
    11. ?>
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    так точно не надо выводить )))) прочтите для чего эта фeнкция... используйте echo(), printf();
     
  3. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    я с этим потом разберусь, лишь бы я видел результат, что работает, мне в дальнейшем нужно будет сделать вывод ошиб под полями где была ошибка. Что я также пока не знаю как это реализовать
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Простая логика регистрации например

    PHP:
    1. <?php
    2.  
    3. declare ( strict_types = 1 );
    4.  
    5. namespace Nouvu\Resources\Controllers;
    6.  
    7. use Nouvu\Web\Http\Controllers\AbstractController;
    8. use Nouvu\Web\View\Repository\CommitRepository;
    9. use Nouvu\Web\Component\Validator\Exception\ViolationsException;
    10.  
    11. final class RegistrationController extends AbstractController
    12. {
    13.     public function register(): CommitRepository
    14.     {
    15.         if ( $this -> isGranted( [ 'ROLE_USER' ] ) )
    16.         {
    17.             return $this -> redirect( '/' );
    18.         }
    19.        
    20.         $this -> title( [ 'Регистрация' ] );
    21.        
    22.         $model = $this -> getModel();
    23.        
    24.         if ( $this -> app -> request -> isMethod( 'POST' ) )
    25.         {
    26.             try
    27.             {
    28.                 $user = $model -> getUserRegister();
    29.                
    30.                 $model -> validateRegister( $user );
    31.                
    32.                 $password = $this -> getEncoder( $user ) -> encodePassword( $user -> getPlainPassword(), $user -> getSalt() );
    33.                
    34.                 $user -> setPassword( $password );
    35.                
    36.                 $this -> app -> repository -> get( 'query.database.insert.users_register' )( $user );
    37.                
    38.                 return $this -> render( 'user/register-success', 'user/form-template' );
    39.             }
    40.             catch ( ViolationsException $e )
    41.             {
    42.                 if ( $this -> isAjax() )
    43.                 {
    44.                     return $this -> customJson( $e -> getErrors() );
    45.                 }
    46.                
    47.                 $this -> app -> request -> attributes -> set( 'errors', $e );
    48.             }
    49.         }
    50.        
    51.         return $this -> render( 'user/register', 'user/form-template' );
    52.     }
    53. }
     
  5. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Задача написать всё без использования фреймворков, очень сложно, буду пытаться разобраться :confused:
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Ммм... ООП называть фреймворком...
     
  7. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Я не называл ничего фреймворком, под ответом есть какая-то цитата "MyPHPWorld Если видите, что фреймворк использует что-то, что вы не до конца понимаете – выясните что это за штука!" я подумал это тоже в ответе.

    что это за строки, что здесь происходит ?
    1. use Nouvu\Web\Http\Controllers\AbstractController;
    2. use Nouvu\Web\View\Repository\CommitRepository;
    3. use Nouvu\Web\Component\Validator\Exception\ViolationsException;
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    https://www.php.net/manual/ru/language.namespaces.php

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

    строки:
    15 - 18
    перенаправляем на главную юзера, если он авторизован на сайте.

    20
    Устанавливаем название страницы

    24
    Запрашиваем - POST запрос пришел ?

    30
    Валидация входящих данных. Иначе - Выбрасывается исключение с сообщениями (email не верный... логин такой существует...)

    32
    Кодируем пароль. Гугли в сторону password_hash

    36
    Заносим в БД данные о новом пользователе

    38
    Страница с сообщением - рег гуд, можно авторизоваться

    40-48
    Обработка исключения от валидации

    51
    Вывод формы с регистрацией
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    ваш код даже процедурным подходом назвать сложно, просто подряд все идет....
    надо вам изучить что такое ООП для чего и как делается...
     
  10. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Да ладно, а то я не понимаю, я сюда пришёл не для того, чтобы мне тычили носом, что мне нужно учить, а для того чтобы помочь разобраться и подсказать, как это делается, я не сижу на 5 точке ровно и ничего не делаю, я читаю-разбираюсь, пробую разные варианты и закрепляю на практике, а вы в каждой моей теме только и тычите, что мне нужно что-то учить, зачем вы вообще отвечаете в таком случае вместо того чтобы помогать ?
     
  11. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    А вы думаете вам что - готовый код предоставят и все? Советы - они тоже многого стоят.

    Трудно начать с сложного проекта, начинайте с малого...

    ну для примера создайте класс пользователь User по английски
    определите ему поля, посмотрите какие виды полей есть - private, protected, public
    определите коструктор, сделайте парочку методов которые будут работать с данными пользователя. например чтение данных по id, обновление данных, проверку в отдельный метод вынесите, попробуйте поработать с этим классом, потом продвигайтесь дальше - постепенно дойдете и до своей задачи и сможете ее на рельсы ООП перевести...
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Я забыл, что находимся в спец разделе. :D
     
  13. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Именно XD
    --- Добавлено ---
    Я как раз этим и занимаюсь, пробуя все советы на практике, которые мне здесь пишут
     
  14. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    я что-то попытался сделать но записывает в файл "null". Почему так происходит ?
    PHP:
    1. <?php
    2. // создание класса юзер
    3. class User
    4. {
    5.     // объект
    6.     public $name;
    7.     // метлд для связи с файлом
    8.     public function Connect()
    9.     {
    10.         // чтение файла
    11.         $data = file_get_contents('User.json');
    12.             //декодирование файла из json
    13.         $data = json_decode($data, true);
    14.     }
    15.     public function Write()
    16.     {
    17.         // кодирование в json формат
    18.         $data = json_encode($data, JSON_PRETTY_PRINT);
    19.         // запись данных в файл
    20.         file_put_contents('User.json', $data);
    21.     }
    22.     public function Create_user()
    23.     {
    24.         $this -> Connect();
    25.         $add_array = array
    26.         (
    27.         $name -> $_POST['name']
    28.         );
    29.         $data[] = $add_array;
    30.         $this -> Write();
    31.     }
    32. }
    33. ?>
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4.     <meta charset="utf-8">
    5.     <title>Регистрация</title>
    6. </head>
    7. <?php require_once "Use.php";
    8. if (isset ($_POST['loginn']))
    9. {
    10.     $user = new User;
    11.     $user -> Create_user();
    12. }
    13. ?>
    14. <form action="/Site.php" method = "POST" name="register">
    15. <p><stronh></strong>Введите имя</p>
    16.             <input required type="text" name="name">
    17. <button type="submit" name="loginn">Добавить</button>
    18. </form>
     
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Открой ошибки.

    Окей Гугл - как в пхп смотреть ошибки кода
     
  16. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    1. странно но метод write ничего не принимает в качестве аргументов
    2. $data = json_encode($data, JSON_PRETTY_PRINT); а $data то не определена.... вот вам и пишется null
     
  17. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Как их определить не понимаю
    Ругается на $data в методе Write
    И на $name в методе Create_user
    Пишет, что они не определенны, как их определить ?
     
    #17 Andrew21, 16 ноя 2021
    Последнее редактирование: 16 ноя 2021
  18. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    откатываемся дальше
    - что такое аргументы понимаете?
    - что такое функция? Для чего она и как передать аргумент в функцию?
    + зона видимости переменных
     
  19. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Я передал все аргументы и теперь оно добавляет, но всё ещё присутствуют ошибки такие как:
    1) Notice: Undefined variable: name in E:\OpenServer\domains\User\Site.php on line 15
    2) Notice
    : Undefined variable: data in E:\OpenServer\domains\User\Site.php on line 15
    А это когда я создаю нового юзера и передал ему аргументы которые ему нужны для этого, почему ошибка ?

    Ещё такой вопрос. Введённые данные записываются вот так:
    "": "ANDREI"
    А нужно чтобы было так :
    "name": "ANDREI"
    Как это сделать ?
     
    #19 Andrew21, 16 ноя 2021
    Последнее редактирование: 16 ноя 2021
  20. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Отписался.
     
  21. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    ?
     
  22. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Чел от темы отписался, чтоб не видеть переписку больше. Я наверное тоже отпишусь, а вам советую книжку какую нить толковую скачать или купить и с простейших вещей постепенно осваивать все. А то вы так каждую строчку да ещё и по несколько раз будете спрашивать
     
  23. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    это последний вопрос который меня интересует, с остальным мне всё понятно