【问题标题】:Returning a variable from PHP to AJAX将变量从 PHP 返回到 AJAX
【发布时间】:2019-05-16 11:44:21
【问题描述】:

如何将 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.log(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' =&gt; true]);
  • 我无法强调这是多么不安全。您应该为此使用准备好的语句,而不是使用 MD5 来散列/存储密码。使用password_hash()password_verify()。此外,您将不同的 mysql api 与 mysql_error() 混合使用,如果您的查询失败,它将无法工作。应该是mysqli_error($con)。您还应该阅读real_escape_string() 上的this Q&A

标签: php ajax variables return


【解决方案1】:

您不能从通过 ajax 调用调用的 php 脚本重定向用户。

因为它会重定向,但不是在您的浏览器实例上,而是在 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 方法显示用户数据,会话会是什么样子,数据会正确显示吗?它是一种安全的方法吗?
  • 是的,确保您仍然可以访问会话数据。但我没有得到你问题的第二部分!你的意思是它是一种保存方法吗?通过 GET 方法获取用户数据?
猜你喜欢
  • 2015-11-01
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多