Я сделал авторизацию и регистрацию, но без ajax. Т.к. изучаю php, js, json нет так давно, не понимаю как это выразить в коде. Помогите пожалуйста. Ниже представлен код Сам сайт PHP: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Авторизация</title> </head> <body> <?php require_once "CRUD.php"; $user= new User; session_start(); echo "Hello! ",$_SESSION['name']; if (isset ($_POST['Update'])) { header("Location: http:/Update.php"); } if (isset($_POST['Delete'])) { $user->Delete(); } if (isset($_POST['Exit'])) { session_unset(); header("Location: http:/Autorise.php"); } ?> <form action="/Site.php" method = "POST" name="register"> <p> <p> <button type="submit" name="Update">Изменить данные </button> </p> <p> <button type="submit" name="Delete">Удалить учётную запись </button> </p> <p> <button type="submit" name="Exit">Выход </button> </p> </p> </form> Форма регистрации PHP: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Регистрация</title> </head> <!--подключение jquery и ajax библиотек--> <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <!--подключение CRUD файла--> <?php require_once "CRUD.php"; $data = $_POST; // нажатие кнопки "зарегистрироваться" if(isset($data['signup'])) { $user = new User; // проверка на регистрируемый логин $user -> ValidLog(); // проверка на регистрируемый емаил $user -> EmailLog(); if(trim($data['login'])=='') { echo "Введите логин"; } elseif (trim($data['password1'])=='') { echo "Введите пароль"; } elseif (trim($data['password2'])=='') { echo"Введите пароль повторно"; } elseif (trim($data['email'])=='') { echo"Введите E-mail"; } elseif (trim($data['name'])=='') { echo"Введите имя"; } elseif ($GLOBALS['log']== 1) { echo"Этот логин уже занят придумайте другой "; } elseif($_POST['password2']!=$_POST['password1']) { echo"Повторный пароль введён не верно"; } elseif($GLOBALS['maillog']==1) { echo"Этот маил уже зарегестрирован введите другой"; } else { $user -> CRUD_ADD(); unset($data); unset($_POST); echo '<div style="color: green;">Вы успешно зарегестрировались!</div>'; } } ?> <!--форма регистрации--> <form action="/signup.php" method = "POST" name="register"> <p> <p><stronh></strong>Введите логин</p> <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="Логин должен состоять только из латинских/русских символов с цифрами или без них"> </p> <p> <p><stronh></strong>Введите пароль</strong>:</p> <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 символов , обязательно должны состоять из цифр и букв"> </p> <p> <p><stronh></strong>Подтвердите пароль</strong>:</p> <input required type="text" name="password2" value ="<?php echo $data['password2'];?>"> </p> <p> <p><stronh></strong>введите E-mail</strong>:</p> <input required type="email" name="email" value ="<?php echo $data['email'];?>" pattern="\ ^ [ AZ 0-9 ._% + - ] + @ [ AZ 0-9 . - ] + \. [ AZ ] {2,} \ $ " required> </p> <p> <p><stronh></strong>Введите имя</strong>:</p> <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="Имя должно быть написано на русском языке (только имя без фамилии и отчества)"> </p> <p> <input type="submit" class="signupbtn" value="Зарегистрироваться" name="signup"> <p>Уже есть учётная запись ? <a href="/Autorise.php">Войти</a></p> </p> </form> Форма авторизации PHP: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Авторизация</title> </head> <body> <?php require_once "CRUD.php"; if(isset($_POST['loginn'])) { $user = new User; $user->pasLog(); if (false!=$GLOBALS['result']) { session_start(); $_SESSION['login'] = $_POST['login']; $_SESSION['name'] = $GLOBALS['name']; header("Location: http:/Site.php"); } else { echo "Неправильно введён логин или пароль"; } } ?> <form action="/Autorise.php" method = "POST" name="register"> <p> <p><strong></strong>Введите логин</p> <input type="text" name="login"> </p> <p> <p><stronh></strong>Введите пароль</strong>:</p> <input type="text" name="password"> </p> <p> <button type="submit" name="loginn">Войти</button> </p> </form> <p>У вас нет аккаунта ? <a href="/signup.php">Зарегистрируйтесь</a></p> Все функции используемые с взаимодействием с БД которая находится в JSON файле: PHP: <?php class User { public $data; // метод чтения файла public function Connect() { // чтение файла $data = file_get_contents('user.json'); // декодирование файла из json формата $this->data = json_decode($data, true); } //метод записи в файл public function Write() { // кодирование в json $data = json_encode($this->data, JSON_PRETTY_PRINT); // запись данных в файл file_put_contents('user.json',$data); } public function CRUD_ADD() { // соль пароля $salt = '1b34r7q5'; // чтение файла и декодирование $this -> Connect(); //создание нового юзера $add_arr = array( 'login' => $_POST['login'], 'password' => md5($salt.$_POST['password1']), 'email' => $_POST['email'], 'name' => $_POST['name'] ); // зпись нового пользователя $this->data[] = $add_arr; $this -> Write(); } public function ValidLog() { //чтение файла $this-> Connect(); // проход по массиву foreach ($this->data as $value) {// поиск нужной информации if ($value['login'] == $_POST['login']) {// если есть совпадение $GLOBALS['log']=1; break; } else {// если нет совпадений $GLOBALS['log']=0; } } } public function EmailLog() {// чтение файла $this -> Connect(); // проход по массиву foreach ($this->data as $value) {//поиск совпадений if ($value['email'] == $_POST['email']) {//если совпадения есть то дальше не идём $GLOBALS['maillog']=1; break; } else {// если совпадений нет $GLOBALS['maillog']=0; } } } public function pasLog() { $this->Connect(); $salt = '1b34r7q5'; $GLOBALS['result']=false; foreach ($this->data as $data) { if ($data['login']===$_POST['login']) { if ($data['password'] === md5($salt.$_POST['password'])) { $GLOBALS['name']=$data['name']; $GLOBALS['login']=$_POST['login']; $GLOBALS['result'] = true; break; } else { break; } } } } public function Update() { $this->Connect(); $salt = '1b34r7q5'; session_start(); foreach ($this->data as $key => $value) { if($_SESSION['login']==$value['login']) { //print_r($this->data[$key]); $updatearr = array( 'login' => $value['login'], 'email' => $value['email'], 'password' => md5($salt.$_POST['password1']), 'name' => $_POST['name'] ); $_SESSION['name']=$_POST['name']; // зпись нового пользователя $this->data[$key] = $updatearr; $this -> Write(); break; } } } public function Delete() { session_start(); $this->Connect(); foreach ($this->data as $key => $value) { if ($_SESSION['login']==$value['login']) { unset($this->data[$key]); } $this -> Write(); header("Location: http:/Autorise.php"); session_unset(); break; } } } ?>
Подключи jQuery на страницу с авторизацией и это, обернув в тег <script>. Чтобы понять что тут происходит гугли "ajax". Код (Javascript): $(document).ready(function(){ let $form = $('form'); $.ajax({ url: $form.attr('action'), method: $form.attr('method'), data: $form.serializeArray(), success: function(response) { // смотрим что ответил сервер и строим логику } }); })
Именно с авторизацией ? В том то и дело, что гуглил и библиотека у меня подключена в регистрации, не понятно
Я забыл повешать событие на форму. Код (Text): $(document).ready(function(){ let $form = $('form'); $form.submit(function(e) { e.preventDefault(); $.ajax({ url: $form.attr('action'), method: $form.attr('method'), data: $form.serializeArray(), success: function(response) { // смотрим что ответил сервер и строим логику } }); }); }) Можешь начать с регистрации. Не важно... Но, как бы мягко выражаясь, вам еще слишком рано это изучать... Разберитесь с PHP, Json, MySQL.
Сделал так, но насколько я понимаю информация не доходит до сервера и не выполняется серверный код, вопрос, почему ? Код (Javascript): $('button.signupbtn').click(function(e) { e.preventDefault(); var login = $('input.login').val(); var password = $('input.password').val(); var email = $('input.email').val(); var name = $('input.name').val(); $.ajax({ method: "POST", url: "Register.php", data: { login:login, password:password, email:email, name:name } }) .done (function(msg) { alert("OK"+msg); }) }); Сервер php PHP: <?php //ini_set('display_errors', 1); //ini_set('display_startup_errors', 1); //ini_set('error_reporting', E_ALL); class User { public $ajax; public $data; // метод чтения файла public function ajax($ajax) { if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // Если к нам идёт Ajax запрос, то ловим его $ajax = 1; exit; } //Если это не ajax запрос $ajax=0; } public function Connect() { // чтение файла $data = file_get_contents('user.json'); // декодирование файла из json формата $this->data = json_decode($data, true); } //метод записи в файл public function Write() { // кодирование в json $data = json_encode($this->data, JSON_PRETTY_PRINT); // запись данных в файл file_put_contents('user.json',$data); } public function ValidLog() { //чтение файла $this-> Connect(); // проход по массиву foreach ($this->data as $value) {// поиск нужной информации if ($value['login'] == $_POST['login']) {// если есть совпадение $GLOBALS['log']=1; break; } else {// если нет совпадений $GLOBALS['log']=0; } } } public function EmailLog() {// чтение файла $this -> Connect(); // проход по массиву foreach ($this->data as $value) {//поиск совпадений if ($value['email'] == $_POST['email']) {//если совпадения есть то дальше не идём $GLOBALS['maillog']=1; break; } else {// если совпадений нет $GLOBALS['maillog']=0; } } } public function CRUD_ADD() { $data = $_POST; // нажатие кнопки "зарегистрироваться" if(isset($data['signup'])) { $user = new User; // проверка на регистрируемый логин $user -> ValidLog(); // проверка на регистрируемый емаил $user -> EmailLog(); if(trim($data['login'])=='') { echo "Введите логин"; } elseif (trim($data['password1'])=='') { echo "Введите пароль"; } elseif (trim($data['password2'])=='') { echo"Введите пароль повторно"; } elseif (trim($data['email'])=='') { echo"Введите E-mail"; } elseif (trim($data['name'])=='') { echo"Введите имя"; } elseif ($GLOBALS['log']== 1) { echo"Этот логин уже занят придумайте другой "; } elseif($_POST['password2']!=$_POST['password1']) { echo"Повторный пароль введён не верно"; } elseif($GLOBALS['maillog']==1) { echo"Этот маил уже зарегестрирован введите другой"; } else { // соль пароля $salt = '1b34r7q5'; // чтение файла и декодирование $this -> Connect(); //создание нового юзера $add_arr = array( 'login' => $_POST['login'], 'password' => md5($salt.$_POST['password1']), 'email' => $_POST['email'], 'name' => $_POST['name'] ); // зпись нового пользователя $this->data[] = $add_arr; $this -> Write(); echo ($_POST['name']); echo ($_POST['login']); echo ($_POST['password']); echo '<div style="color: green;">Вы успешно зарегестрировались!</div>'; } } } } $user = new User; $user ->ajax($ajax); if ($ajax == 1) { echo "error"; } else { $user ->CRUD_ADD(); } ?>
Даже так... В общем, я дал вам дельный совет изучить хотя бы один язык, а не все сразу. Вы решили что вы джедай и вам по силам все. Тогда, удачи
Столкнулся с следующей проблемой (для меня). Мне нужно передать переменную с php в js, не знаю как это реализовать, поможешь ? функция выполняющаяся во время отправки формы ajax запросом, мне нужно получить обратно переменную $logname, чтобы я мог записать его имя в сессию а также проверить на валидность данные для входа и после вывести на сайте по типу "hello Petya" PHP: $user = new User; $user->pasLog(); if (false!=$GLOBALS['result']) { session_start(); $_SESSION['login'] = $_POST['login']; $_SESSION['name'] = $GLOBALS['name']; $logname = $_SESSION['name']; } else { echo "Неправильно введён логин или пароль"; } ?> Код JS с запросом ajax Код (Javascript): $('button.enter').click(function(e) { e.preventDefault(); const loginValue = login.value.trim(); const passwordValue = password.value.trim(); if (loginValue==='') { setErrorFor(login, 'Введите логин'); } else if (passwordValue==='') { setSuccessFor(login); setErrorFor(password, 'Введите пароль'); } else { setSuccessFor(login); setSuccessFor(password); var loginVal = $('input.login').val(); var passwordVal = $('input.password').val(); $.ajax({ method: "POST", url: "/Login/Login.php", data: { login:loginVal, password:passwordVal, } }) .done (function(msg) { /*var block = document.querySelector('.block').getAttribute('dataatr');*/ document.location.href = "/Site.php"; }) $('input.login').val(''); $('input.password').val(''); } })