【问题标题】:generating a random number and send to the header生成随机数并发送到标头
【发布时间】:2022-01-01 17:24:31
【问题描述】:

在我的登录表单中,如果电子邮件或密码错误,我设置header ('Location: login.php?Err=284613');。然后使用 Javascript 我捕获它并使用 if (window.location.search == "?Err=284613"){} 将错误代码提供给页面。

问题是我不希望用户输入login.php?Err=284613 并手动触发错误代码。

我可以用 PHP 生成随机数并在login.php?Err="random numbers" 中每次显示不同的数字吗?当然,然后我需要用 javascript 捕获那个随机数,以便在页面上显示错误。

<?php
if (!isset($_POST['username'], $_POST['password']))
{
    exit('Please fill both the username and password fields!');
}

if ($stmt = $con->prepare('SELECT id, Password FROM users WHERE Email = ?'))
{
    $stmt->bind_param('s', $_POST['username']);
    $stmt->execute();

    $stmt->store_result();
    if ($stmt->num_rows > 0)
    {
        $stmt->bind_result($id, $password);
        $stmt->fetch();
        if (password_verify($_POST['password'], $password))
        {

            session_regenerate_id();
            $_SESSION['loggedin'] = true;
            $_SESSION['name'] = $_POST['username'];
            $_SESSION['id'] = $id;
            header('Location: index.php');

        }
        else
        {

            header('Location: login.php?Err=284613');

        }
    }
    else
    {

        header('Location: login.php?Err=284613');

    }

    $stmt->close();
}
}

?>

    
if(window.location.search == "?Err=284613")
{
    
 setError(email, 'Wrong Password!');
    
}

【问题讨论】:

  • 欢迎来到 Stack Overflow。您需要随机数还是需要唯一数?你也想用 PHP 还是 JavaScript 来做这个?
  • 唯一编号。使用 php 我需要将其写入标题并使用 javascript 检测它
  • 实际上唯一或随机无关紧要
  • 为什么不简单地在 JavaScript 中使用 AJAX,POST 登录名/密码,并获得成功或错误响应。然后javascript可以提醒用户而不必担心唯一编号。
  • '导致 idk ajax。我看了看,但那太复杂了

标签: javascript php html jquery


【解决方案1】:

考虑以下 HTML / jQuery 代码。

$(function() {
  $(".login").submit(function(event) {
    var user = $(".login #username").val();
    var pass = $(".login #password").val();
    var valid = (user !== "") && (pass !== "");
    if (valid) {
      $.post($(this).attr("action"), {
        username: user,
        password: pass
      }, function(results) {
        if (results.error == false) {
          window.location.href = "index.php";
        } else {
          alert(results.message);
          return false;
        }
      });
    } else {
      alert("Login and Password must be entered.");
      return false;
    }
  });
})
.login ul {
  padding: 0;
  margin: 0;
  list-style: none;
}

.login ul li label {
  display: inline-block;
  width: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="login" action="login.php" method="post">
  <ul>
    <li>
      <label for="username">Login:</label>
      <input type="text" id="username" value="jsmith@smithco.com" />
    </li>
    <li>
      <label for="password">Password:</label>
      <input type="password" id="password" value="Peaches!nAcan" />
    </li>
  </ul>
  <button class="login-btn" type="submit">Login</button>
</form>

这是一个非常基本的登录表单和非常基本的验证的示例。提交表单时,通过按钮单击或用户按 Enter,将使用用户名和密码将 AJAX 帖子发送到 PHP。

在您的 PHP、login.php 文件中,您可能有如下内容:

<?php
$results['error'] = False;
header('Content-type: application/json');
if (!isset($_POST['username'], $_POST['password'])) {
  $results['error'] = True;
  $results['message'] = 'Please fill both the username and password fields!';
  echo json_encode($results);
  exit(0);
}
// Prepare connection to SQL for Select Query
if ($stmt = $con->prepare('SELECT id, Password FROM users WHERE Email = ?')) {
  $stmt->bind_param('s', $_POST['username']);
  $stmt->execute();
  $stmt->store_result();
  if ($stmt->num_rows > 0) {
    $stmt->bind_result($id, $password);
    $stmt->fetch();
    if (password_verify($_POST['password'], $password)) {
      session_regenerate_id();
      $_SESSION['loggedin'] = true;
      $_SESSION['name'] = $_POST['username'];
      $_SESSION['id'] = $id;
      echo json_encode($results);
    } else {
      $results['error'] = True;
      $results['message'] = "Incorrect Login or Password.";
      echo json_encode($results);
    }
    $stmt->close();
    exit(0);
  }
}
?>

再次检查所有内容似乎是多余的,但如果有不良行为者试图绕过您的登录脚本或直接导航到页面;他们会遇到错误(在 JSON 中)。这也假设index.php 正在寻找一个有效的会话。

此外,如果 SQL 中出现错误,您也可以将其转发回 AJAX。类似“查找失败,请重试”之类的内容。基本上,这是一个返回一些 JSON 数据的小脚本,所以它现在更像一个 API。你向它发布数据,它会给你一个 JSON 响应。这使得 AJAX 请求变得非常容易。

当数据发布时,如果没有错误,初始的False 将返回给 AJAX 请求,脚本通过将浏览器重定向到新页面来处理这个问题。如果将其更改为True,则将消息传递回 AJAX 请求并显示该消息。

查看更多:

【讨论】:

  • 我会试试谢谢你的人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
相关资源
最近更新 更多