Возврат переменной из PHP в AJAX

как я могу вернуть переменную из запроса PHP в AJAXA. Я хочу, чтобы пользователь был перенаправлен на панель пользователя с помощью javascript после успешного ввода логина и пароля. Запрос на PHP был успешно написан, но Ajax не возвращает никаких результатов.

Код Javascript:

$(document).ready(function() {
  $("#btn-login").click(function() {
    const loginAuth = $("#login-auth").val();
    const passAuth = $("#pass-auth").val();
    $.ajax({
      type: "POST", //Request type
      url: "http://localhost/game/login.php",
      data: {
        loginAuth: loginAuth,
        passAuth: passAuth
      },
      cache: false,
      success: function(data) {
        console.info(data);
      }
    });
  });
});

Код PHP:

<?php
require ('connect.php');

session_start();

// If form submitted, insert values into the database.

if (isset($_POST['loginAuth'])) {

  // removes backslashes

  $username = stripslashes($_REQUEST['loginAuth']);

  // escapes special characters in a string

  $username = mysqli_real_escape_string($con, $username);
  $password = stripslashes($_REQUEST['passAuth']);
  $password = mysqli_real_escape_string($con, $password);

  // Checking is user existing in the database or not

  $query = "SELECT * FROM `users` WHERE login='$username'
    and password='" . md5($password) . "'";
  $result = mysqli_query($con, $query) or die(mysql_error());
  $rows = mysqli_num_rows($result);
  if ($rows == 1) {
    $_SESSION['username'] = $username;

    // Redirect user to index.php

    $arr = 'udało się';
    header("Location: panel.php");
  }
  else {
    $arr = false;
    header("Location: panelLogin.php");
  }
}
else {
}

echo json_encode($arr);
?>

Большое спасибо за любую помощь.

header("Location: panelLogin.php"); заставит ваш запрос AJAX следовать этому перенаправлению, а не перенаправить вашу страницу. Вам нужно вернуть какие-то данные, чтобы ваш Javascript знал, что нужно перенаправить браузер на страницу. Т.е.: echo json_encode(['state' => true]);
Jaquarh 15.12.2018 14:17

Я не могу подчеркнуть, насколько это небезопасно. Для этого вы должны использовать подготовленный оператор и не использовать MD5 для хеширования / хранения паролей. Используйте password_hash() и password_verify(). Кроме того, вы смешиваете разные API-интерфейсы mysql с mysql_error() и не будете работать, если ваш запрос завершится ошибкой. Это должен быть mysqli_error($con). Вы также должны прочитать этот вопрос и ответ на real_escape_string().

Funk Forty Niner 15.12.2018 14:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы не можете перенаправить пользователя из php-скрипта, который вызывается из вызова ajax.

потому что он будет перенаправлять, но не на экземпляр вашего браузера, а на ajax.

вам нужно перенаправить его с javascript.

так что ты можешь сделать

echo "true";

вместо

header("Location: panel.php");

и echo "false"; // in case login failed

в качестве примера, но вы можете распечатать текст в формате json и использовать более информативные сообщения.

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

window.location.href = "the url you want to redirect to";

Большое Вам спасибо. Все работает. И как будет выглядеть вопрос сеанса, если я захочу отобразить данные пользователя с помощью метода GET, будут ли данные отображаться правильно и является ли это безопасным методом?

Rafał Podraza 15.12.2018 14:39

да, конечно, у вас все еще есть доступ к данным сеанса. но я не понял вашу вторую часть вопроса! что вы имеете в виду, это метод сохранения? получить пользовательские данные методом GET?

HSLM 15.12.2018 14:47

Другие вопросы по теме