За последние 24 часа нас посетили 22869 программистов и 1234 робота. Сейчас ищет 781 программист ...

Регистрация, авторизация, AJAX

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

Метки:
  1. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Я сделал авторизацию и регистрацию, но без ajax. Т.к. изучаю php, js, json нет так давно, не понимаю как это выразить в коде. Помогите пожалуйста.
    Ниже представлен код
    Сам сайт
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4.     <meta charset="utf-8">
    5.     <title>Авторизация</title>
    6. </head>
    7. <body>
    8. <?php
    9. require_once "CRUD.php";
    10. $user= new User;
    11. echo "Hello! ",$_SESSION['name'];
    12. if (isset ($_POST['Update']))
    13. {
    14.     header("Location: http:/Update.php");
    15. }
    16. if (isset($_POST['Delete']))
    17. {
    18.     $user->Delete();
    19. }
    20. if (isset($_POST['Exit']))
    21. {
    22.     session_unset();
    23.     header("Location: http:/Autorise.php");
    24. }
    25. ?>
    26. <form action="/Site.php" method = "POST" name="register">
    27.     <p>
    28.         <p>
    29.             <button type="submit" name="Update">Изменить данные </button>
    30.         </p>
    31.         <p>
    32.             <button type="submit" name="Delete">Удалить учётную запись </button>
    33.         </p>
    34.         <p>
    35.             <button type="submit" name="Exit">Выход </button>
    36.         </p>
    37.     </p>
    38. </form>
    Форма регистрации
    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($data['signup']))
    14.     {
    15.         $user = new User;
    16.         // проверка на регистрируемый логин
    17.         $user -> ValidLog();
    18.         // проверка на регистрируемый емаил
    19.         $user -> EmailLog();
    20.         if(trim($data['login'])=='')
    21.         {
    22.             echo "Введите логин";
    23.         }
    24.         elseif (trim($data['password1'])=='')
    25.         {
    26.             echo "Введите пароль";
    27.         }
    28.         elseif (trim($data['password2'])=='')
    29.         {
    30.             echo"Введите пароль повторно";
    31.         }
    32.         elseif (trim($data['email'])=='')
    33.         {
    34.             echo"Введите E-mail";
    35.         }
    36.         elseif (trim($data['name'])=='')
    37.         {
    38.             echo"Введите имя";
    39.         }
    40.         elseif ($GLOBALS['log']== 1)
    41.         {
    42.             echo"Этот логин уже занят придумайте другой ";
    43.         }
    44.         elseif($_POST['password2']!=$_POST['password1'])
    45.             {
    46.             echo"Повторный пароль введён не верно";
    47.             }
    48.             elseif($GLOBALS['maillog']==1)
    49.             {
    50.                 echo"Этот маил уже зарегестрирован введите другой";
    51.             }
    52.         else
    53.         {
    54.             $user -> CRUD_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. <!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.     if(isset($_POST['loginn']))
    10.     {
    11.         $user = new User;
    12.         $user->pasLog();
    13.         if (false!=$GLOBALS['result'])
    14.         {
    15.             session_start();
    16.             $_SESSION['login'] = $_POST['login'];
    17.             $_SESSION['name'] = $GLOBALS['name'];
    18.             header("Location: http:/Site.php");
    19.         }
    20.         else
    21.         {
    22.             echo "Неправильно введён логин или пароль";
    23.         }
    24.     }
    25.         ?>
    26.     <form action="/Autorise.php" method = "POST" name="register">
    27.     <p>
    28.         <p><strong></strong>Введите логин</p>
    29.             <input type="text" name="login">
    30.         </p>
    31.             <p>
    32.                 <p><stronh></strong>Введите пароль</strong>:</p>
    33.                 <input type="text" name="password">
    34.             </p>
    35.             <p>
    36.                 <button type="submit" name="loginn">Войти</button>
    37.             </p>
    38.         </form>
    39. <p>У вас нет аккаунта ? <a href="/signup.php">Зарегистрируйтесь</a></p>
    Все функции используемые с взаимодействием с БД которая находится в JSON файле:
    PHP:
    1. <?php
    2. class User
    3. {
    4.     public $data;
    5.     // метод чтения файла
    6.     public function Connect()
    7.     {
    8.         // чтение файла
    9.         $data = file_get_contents('user.json');
    10.         // декодирование файла из json формата
    11.         $this->data = json_decode($data, true);
    12.     }
    13.  
    14.     //метод записи в файл
    15.     public function Write()
    16.     {
    17.         // кодирование в json
    18.         $data = json_encode($this->data, JSON_PRETTY_PRINT);
    19.         // запись данных в файл
    20.         file_put_contents('user.json',$data);
    21.     }
    22.  
    23.     public function CRUD_ADD()
    24.         {
    25.             // соль пароля
    26.             $salt = '1b34r7q5';
    27.             // чтение файла и декодирование
    28.         $this -> Connect();
    29.             //создание нового юзера
    30.         $add_arr = array(
    31.             'login' => $_POST['login'],
    32.             'password' => md5($salt.$_POST['password1']),
    33.             'email' => $_POST['email'],
    34.             'name' => $_POST['name']
    35.         );
    36.             // зпись нового пользователя
    37.         $this->data[] = $add_arr;
    38.         $this -> Write();
    39.     }
    40.     public function ValidLog()
    41.     {
    42.             //чтение файла
    43.         $this-> Connect();
    44.         // проход по массиву
    45.         foreach ($this->data as $value)
    46.         {// поиск нужной информации
    47.             if ($value['login'] == $_POST['login'])
    48.             {// если есть совпадение
    49.                 $GLOBALS['log']=1;
    50.                     break;
    51.             }
    52.             else
    53.             {// если нет совпадений
    54.                 $GLOBALS['log']=0;
    55.             }
    56.         }
    57.     }
    58.  
    59.     public function EmailLog()
    60.     {// чтение файла
    61.         $this -> Connect();
    62.         // проход по массиву
    63.         foreach ($this->data as $value)
    64.         {//поиск совпадений
    65.             if ($value['email'] == $_POST['email'])
    66.             {//если совпадения есть то дальше не идём
    67.                 $GLOBALS['maillog']=1;
    68.                     break;
    69.             }
    70.             else
    71.             {// если совпадений нет
    72.                 $GLOBALS['maillog']=0;
    73.             }
    74.         }
    75.     }
    76.  
    77.     public function pasLog()
    78.     {
    79.         $this->Connect();
    80.         $salt = '1b34r7q5';
    81.         $GLOBALS['result']=false;
    82.                 foreach ($this->data as $data)
    83.                 {
    84.                     if ($data['login']===$_POST['login'])
    85.                 {
    86.                     if ($data['password'] === md5($salt.$_POST['password']))
    87.                 {
    88.                     $GLOBALS['name']=$data['name'];
    89.                     $GLOBALS['login']=$_POST['login'];
    90.                     $GLOBALS['result'] = true;
    91.                     break;
    92.                 }
    93.                     else
    94.                 {
    95.                     break;
    96.                 }
    97.             }
    98.         }
    99.     }
    100.     public function Update()
    101.     {
    102.         $this->Connect();
    103.         $salt = '1b34r7q5';
    104.         session_start();
    105.         foreach ($this->data as $key => $value) {
    106.             if($_SESSION['login']==$value['login'])
    107.             {
    108.                 //print_r($this->data[$key]);
    109.                 $updatearr = array(
    110.             'login' => $value['login'],
    111.             'email' => $value['email'],
    112.             'password' => md5($salt.$_POST['password1']),
    113.             'name' => $_POST['name']
    114.         );
    115.                 $_SESSION['name']=$_POST['name'];
    116.             // зпись нового пользователя
    117.         $this->data[$key] = $updatearr;
    118.         $this -> Write();
    119.                 break;
    120.             }
    121.         }
    122.     }
    123.     public function Delete()
    124.     {
    125.         session_start();
    126.         $this->Connect();
    127.         foreach ($this->data as $key => $value)
    128.         {
    129.         if ($_SESSION['login']==$value['login'])
    130.         {
    131.             unset($this->data[$key]);
    132.         }  
    133.         $this -> Write();
    134.         header("Location: http:/Autorise.php");
    135.         session_unset();
    136.         break;
    137.         }
    138.     }
    139. }
    140. ?>
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    после функции header всегда пиши exit
     
  3. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Спасибо, а ответа на мой вопрос не подскажешь ?
     
  4. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Подключи jQuery на страницу с авторизацией и это, обернув в тег <script>.
    Чтобы понять что тут происходит гугли "ajax".

    Код (Javascript):
    1.     $(document).ready(function(){
    2.         let $form = $('form');
    3.        
    4.         $.ajax({
    5.             url: $form.attr('action'),
    6.             method: $form.attr('method'),
    7.             data: $form.serializeArray(),
    8.             success: function(response) {
    9.                 // смотрим что ответил сервер и строим логику
    10.             }
    11.         });
    12.     })
     
  5. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Именно с авторизацией ? В том то и дело, что гуглил и библиотека у меня подключена в регистрации, не понятно
     
  6. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Я забыл повешать событие на форму.
    Код (Text):
    1. $(document).ready(function(){
    2.         let $form = $('form');
    3.        $form.submit(function(e) {
    4.         e.preventDefault();
    5.           $.ajax({
    6.             url: $form.attr('action'),
    7.             method: $form.attr('method'),
    8.             data: $form.serializeArray(),
    9.             success: function(response) {
    10.                 // смотрим что ответил сервер и строим логику
    11.             }
    12.         });
    13.        });
    14.     })
    Можешь начать с регистрации. Не важно...
    Но, как бы мягко выражаясь, вам еще слишком рано это изучать... Разберитесь с PHP, Json, MySQL.
     
  7. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Сделал так, но насколько я понимаю информация не доходит до сервера и не выполняется серверный код, вопрос, почему ?
    Код (Javascript):
    1. $('button.signupbtn').click(function(e)
    2.     {
    3.         e.preventDefault();
    4.         var login = $('input.login').val();
    5.         var password = $('input.password').val();
    6.         var email = $('input.email').val();
    7.         var name = $('input.name').val();  
    8.         $.ajax({
    9.          method: "POST",
    10.           url: "Register.php",
    11.         data: {
    12.             login:login,
    13.             password:password,
    14.             email:email,
    15.             name:name
    16.         }
    17.     })
    18.         .done (function(msg)
    19.         {
    20.         alert("OK"+msg);
    21.         })
    22.     });
    Сервер php
    PHP:
    1. <?php
    2. //ini_set('display_errors', 1);
    3. //ini_set('display_startup_errors', 1);
    4. //ini_set('error_reporting', E_ALL);
    5.  
    6. class User
    7. {
    8.     public $ajax;
    9.     public $data;
    10.     // метод чтения файла
    11.     public function ajax($ajax)
    12.     {
    13.         if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    14.             // Если к нам идёт Ajax запрос, то ловим его
    15.             $ajax = 1;
    16.             exit;
    17.     }
    18.     //Если это не ajax запрос
    19.     $ajax=0;
    20.     }
    21.  
    22.     public function Connect()
    23.     {
    24.         // чтение файла
    25.         $data = file_get_contents('user.json');
    26.         // декодирование файла из json формата
    27.         $this->data = json_decode($data, true);
    28.     }
    29.  
    30.     //метод записи в файл
    31.     public function Write()
    32.     {
    33.         // кодирование в json
    34.         $data = json_encode($this->data, JSON_PRETTY_PRINT);
    35.         // запись данных в файл
    36.         file_put_contents('user.json',$data);
    37.     }
    38.  
    39.     public function ValidLog()
    40.     {
    41.             //чтение файла
    42.         $this-> Connect();
    43.         // проход по массиву
    44.         foreach ($this->data as $value)
    45.         {// поиск нужной информации
    46.             if ($value['login'] == $_POST['login'])
    47.             {// если есть совпадение
    48.                 $GLOBALS['log']=1;
    49.                     break;
    50.             }
    51.             else
    52.             {// если нет совпадений
    53.                 $GLOBALS['log']=0;
    54.             }
    55.         }
    56.     }
    57.  
    58.     public function EmailLog()
    59.     {// чтение файла
    60.         $this -> Connect();
    61.         // проход по массиву
    62.         foreach ($this->data as $value)
    63.         {//поиск совпадений
    64.             if ($value['email'] == $_POST['email'])
    65.             {//если совпадения есть то дальше не идём
    66.                 $GLOBALS['maillog']=1;
    67.                     break;
    68.             }
    69.             else
    70.             {// если совпадений нет
    71.                 $GLOBALS['maillog']=0;
    72.             }
    73.         }
    74.     }
    75.     public function CRUD_ADD()
    76.         {
    77.             $data = $_POST;
    78. // нажатие кнопки "зарегистрироваться"
    79. if(isset($data['signup']))
    80.     {
    81.         $user = new User;
    82.         // проверка на регистрируемый логин
    83.         $user -> ValidLog();
    84.         // проверка на регистрируемый емаил
    85.         $user -> EmailLog();
    86.         if(trim($data['login'])=='')
    87.         {
    88.             echo "Введите логин";
    89.         }
    90.         elseif (trim($data['password1'])=='')
    91.         {
    92.             echo "Введите пароль";
    93.         }
    94.         elseif (trim($data['password2'])=='')
    95.         {
    96.             echo"Введите пароль повторно";
    97.         }
    98.         elseif (trim($data['email'])=='')
    99.         {
    100.             echo"Введите E-mail";
    101.         }
    102.         elseif (trim($data['name'])=='')
    103.         {
    104.             echo"Введите имя";
    105.         }
    106.         elseif ($GLOBALS['log']== 1)
    107.         {
    108.             echo"Этот логин уже занят придумайте другой ";
    109.         }
    110.         elseif($_POST['password2']!=$_POST['password1'])
    111.             {
    112.             echo"Повторный пароль введён не верно";
    113.             }
    114.             elseif($GLOBALS['maillog']==1)
    115.             {
    116.                 echo"Этот маил уже зарегестрирован введите другой";
    117.             }
    118.         else
    119.         {
    120.             // соль пароля
    121.             $salt = '1b34r7q5';
    122.             // чтение файла и декодирование
    123.         $this -> Connect();
    124.             //создание нового юзера
    125.         $add_arr = array(
    126.             'login' => $_POST['login'],
    127.             'password' => md5($salt.$_POST['password1']),
    128.             'email' => $_POST['email'],
    129.             'name' => $_POST['name']
    130.         );
    131.             // зпись нового пользователя
    132.         $this->data[] = $add_arr;
    133.         $this -> Write();
    134.         echo ($_POST['name']);
    135.         echo ($_POST['login']);
    136.         echo ($_POST['password']);
    137.             echo '<div style="color: green;">Вы успешно зарегестрировались!</div>';
    138.         }
    139.         }
    140.     }
    141. }
    142. $user = new User;
    143. $user ->ajax($ajax);
    144. if ($ajax == 1)
    145. {
    146.     echo "error";
    147. }
    148. else
    149. {
    150. $user ->CRUD_ADD();
    151. }
    152. ?>
     
  8. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Вы отправляете запрос через аякс на страницу Register.php. покажите код этого фаила.
     
  9. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Сервер это он и есть, под кодом аякса
     
  10. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Даже так... В общем, я дал вам дельный совет изучить хотя бы один язык, а не все сразу. Вы решили что вы джедай и вам по силам все. Тогда, удачи
    [​IMG]
     
  11. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Я понимаю, что нужно изучить, мне дали тестовое задание, чтобы пройти на курс, можете помочь ?
     
  12. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Что-то с моим кодом пхп не так, что он не выполняется, причины я не вижу, ошибок также нет
     
    #12 Andrew21, 29 ноя 2021
    Последнее редактирование: 29 ноя 2021
  13. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    С этим разобрался
    --- Добавлено ---
    Почему данные не долетают до php ?
     
  14. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Залезь в консоль браузера и проверь что ты отправляешь и что сервер тебе выдает
     
  15. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Столкнулся с следующей проблемой (для меня). Мне нужно передать переменную с php в js, не знаю как это реализовать, поможешь ?
    функция выполняющаяся во время отправки формы ajax запросом, мне нужно получить обратно переменную $logname, чтобы я мог записать его имя в сессию а также проверить на валидность данные для входа и после вывести на сайте по типу "hello Petya"
    PHP:
    1. $user = new User;
    2.         $user->pasLog();
    3.         if (false!=$GLOBALS['result'])
    4.         {
    5.             session_start();
    6.             $_SESSION['login'] = $_POST['login'];
    7.             $_SESSION['name'] = $GLOBALS['name'];
    8.             $logname = $_SESSION['name'];
    9.         }
    10.         else
    11.         {
    12.             echo "Неправильно введён логин или пароль";
    13.         }
    14.         ?>
    Код JS с запросом ajax

    Код (Javascript):
    1. $('button.enter').click(function(e)
    2.     {
    3.     e.preventDefault();
    4.     const loginValue = login.value.trim();
    5.     const passwordValue = password.value.trim();
    6.     if (loginValue==='')
    7.     {
    8.     setErrorFor(login, 'Введите логин');
    9.     }
    10.     else if (passwordValue==='')
    11.     {
    12.     setSuccessFor(login);
    13.     setErrorFor(password, 'Введите пароль');
    14.     }
    15.     else
    16.     {
    17.         setSuccessFor(login);
    18.         setSuccessFor(password);
    19.         var loginVal = $('input.login').val();
    20.         var passwordVal = $('input.password').val();
    21.         $.ajax({
    22.          method: "POST",
    23.           url: "/Login/Login.php",
    24.         data: {
    25.             login:loginVal,
    26.             password:passwordVal,
    27.         }
    28.     })
    29.         .done (function(msg)
    30.         {
    31.         /*var block = document.querySelector('.block').getAttribute('dataatr');*/
    32.         document.location.href = "/Site.php";
    33.         })
    34.         $('input.login').val('');
    35.         $('input.password').val('');
    36.     }
    37. })
     
  16. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    google : json
     
  17. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    Бан