【问题标题】:pass value from page to another in PHP在 PHP 中将值从页面传递到另一个页面
【发布时间】:2010-05-14 12:40:42
【问题描述】:

我正在发送登录状态 = 失败,返回我的登录页面。这是我的代码-

header("location:index.php?login=fail");

但那是通过 URL 发送的-

http://localhost/303/index.php?login=fail

有没有办法在不显示在 URL 中的情况下传递值?以及如何在第二页获取这个值?

【问题讨论】:

  • 不知道您是否会依赖该变量来了解用户是否成功登录,但请记住,您永远不应该依赖 $_GET 或 $_POST 变量,因为它们可以被用户操纵..使用 $_SESSION 来存储那种信息
  • @Gonçalo 什么样的信息?简单的错误信息?你在开玩笑
  • @Shrapnel 不,不是简单的错误消息。用于了解登录是否成功的信息。我不知道 Piyush 是否正在考虑隐藏登录 var,因此用户无法将登录更改为 true,并绕过一些“如果”……我只是建议他,制作 var POST 不会' t 让用户难以更改它

标签: php


【解决方案1】:

您正在通过 GET 请求传递该值,这就是它出现在 URL 中的原因。为了传递一个值而不在 URL 中显示它,您希望通过 POST 请求传递它。

为了做到这一点,您不会想要将值“返回”到您的登录页面。相反,在用户单击“登录”按钮后处理登录过程的任何 php 表单都将决定向用户显示什么。

在 PHP 中,post 变量可以被全局 $_POST 对象访问 -

$_POST['username'];

将获得您通过 POST 传递的名称为“用户名”的值:

<form method="post" action="checkLogin.php">
Username:
<input type="text" name="username" maxlength="25" />
Password: 
</td><td><input type="password" name="password" />
<input type="submit" name="submit" value="Login">
</form>

为了动态保存并显示错误给用户,你可以将它们存储在会话中,例如有一个名为“errors.php”的文件

<?php
if (isset($_SESSION['errors']))
{
    echo $_SESSION['errors'];
}

unset($_SESSION['errors'])
?>

然后在您检查登录的 php 中,执行:

session_start();
$_SESSION['errors'] = "Invalid username or password.";

然后重定向到您的登录页面(不要传递任何变量)并且在您的表单上总是有这个字段:

<?php include("errors.php"); ?>

如果您没有任何错误,则不会显示任何内容,并且登录页面看起来正常。

注意:在任何使用 session_start() 的 php 表单中,它必须是表单中的第一件事。

【讨论】:

  • 但在 header(--) 中如何指定 method="Post" ??
  • 您不会在标题中指定任何内容-如果您将它们重定向回登录页面或“索引”或其他任何内容-有 on那个页面。然后,您存储在会话中的任何错误都会显示在那里。会话中的值存储在服务器上,您不需要传递它们。
  • 不是“第一件事”,也不是“形式”,而只是在任何输出之前
  • 这是我的 checklogin.php 代码你能告诉我如何发回 login=fail 值吗? $count=mysql_num_rows($result); // 如果结果匹配 $myusername 和 $mypassword,表行必须是 1 行 if($count==1){ // 注册 $myusername, $mypassword 并重定向到文件 "login_success.php" session_register("myusername"); session_register("我的密码"); $_SESSION['loggeduser'] = $myusername; header("位置:LoggedUser.php"); } else { header("location:index.php?login=fail"); } ob_end_flush();
  • 同样,您不想发回“失败”值。你只想做 else { $_SESSION["errors"] = "Login failed";header("location:index.php");} 然后在你的 index.php 上,有某个地方 . errors.php 应该包含我上面提到的代码。
【解决方案2】:

其他方法是使用 session隐藏字段,但您正在做的事情就可以达到目的。您稍后可以像这样检索值:

if ($_GET['login'] === 'fail')
{
  // failed.......
}

【讨论】:

    【解决方案3】:

    有几种方法可以完成您的任务

    • 现代 AJAX 方式。使用 AJAX 发送表单。在密码正确之前不会重新加载页面。错误显示到位。需要 javascript。
    • Post/Redirect/Get 模式。使用常规 POST 发送表单。没有重定向错误,显示在适当的位置。
    • 会话,当我们在会话中存储错误时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2021-06-08
      • 1970-01-01
      相关资源
      最近更新 更多