【问题标题】:use session username to get data from mysql使用会话用户名从 mysql 获取数据
【发布时间】:2016-07-10 00:23:58
【问题描述】:

我正在为我的网站上的用户创建个人资料页面,此人可以更改他/她的信息。我应该可以更改,姓名,姓氏,用户名,代码等。但我已经从用户名开始。

当一个人登录时,我将用户名存储在会话中:

index.php

<?php
    if( !isset( $_SESSION['username'])) include('resources/auth/login.php');
            else exit( header('Location: home.php') );

                if( !isset( $_SESSION ) ) session_start();

    // Logout Session
    if( isset( $_GET['todo'] ) && $_GET['todo'] == 'logout'){

        session_unset();
        session_destroy();
        //echo 'You have been logged out!';
    }
?>

我做了一个测试

profile.php:

<?php
   if( !isset( $_SESSION ) ) session_start();
?>
   <?php //echo $_SESSION['username'];?> 

这就是我的用户名

但是如果我想从 mysql 数据库中调用属于该用户名的名字,我应该使用 session[username] 吗?我开始为它创建一个 SQL 查询:

<?php
    $stmt = $mysqli->prepare("SELECT firstname FROM login");

    $stmt->execute();

    $fname = null;

      $stmt->bind_result($fname);
        while($stmt->fetch()) {
          echo $fname;
        }

    $stmt->close();
    $mysqli->close();
  ?>

这可行,但会调用数据库中的所有名字。所以我尝试将 u_id,即 db = 中的 PK 设置为存储的会话变量:

$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE u_id=$username");

$stmt = $mysqli->prepare("SELECT firstname FROM loginWHERE u_id = '.$_SESSION[username]'";

但在这里我得到一个错误: 未定义变量:profile.php 中的用户名

谁能看出这是为什么?

【问题讨论】:

  • 您开始会话之后试图访问/使用 $_SESSION 值?这是没有意义的。 PHP 不能时间旅行,并且不会在调用 session_start() 后追溯重新运行用户名测试。请注意,对set 会话的测试不是对 session_start() 的有效测试。完全有可能在没有 $_SESSION 的情况下进行会话(实际上只是一个 cookie)。请改用session_status()
  • 我看不到我之后开始会话?这是一个人登录时运行的第一个脚本。
  • 如果您不调用session_start(),那么$_SESSION 是一个空白/空数组,这意味着您将永远无法在其中找到用户名。
  • 抱歉,我看到我的问题中遗漏了一些信息。我会更新它。

标签: php session


【解决方案1】:

如果我理解你,我认为这个查询:

$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE u_id=$username");

应该是这样的:

$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE username ='.$_SESSION[username].'");
//forgive my syntax issues

如果您想检索已登录用户的名字,where 子句的参数应该是用户的用户名,因为这是识别用户的唯一唯一方式,但是我建议您也设置 id会话中的用户也是如此,因此 where 参数现在采用用户的唯一 ID。这是确保您检索该特定用户信息的更好方法,因为两个用户可能具有相同的用户名,因此当您的 where 子句将其作为参数时,它会从数据库中检索两行,这肯定会导致问题。

【讨论】:

  • 非常感谢,现在调用用户名。我也去看看id。在我的任务中,我还询问了有关调用该特定用户的名字的问题。我是否必须为此使用 session[username],或者我该怎么做?
  • 在要显示详细信息的个人资料页面上,运行如下查询:select * from login where username = $_SESSION[username],然后使用循环显示您想要的任何内容。 .你明白我的意思吗?
  • 我没想到。我明白你的意思,但我必须看看如何做到这一点。我怀疑如何从数据库中获取列名。但是我可以在一个while循环中做到这一点?
  • 啊,是的。从具有用户名/id 的特定用户中选择 * FROM 等。所以我得到了这个 Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in: ,这意味着我必须绑定我的数据库中的 x 变量,对吧?
  • 是的..欢迎您,抱歉我无法回答您的其他问题,我退出了,很高兴您成功了..
【解决方案2】:

很有可能您没有开始会话。我只知道写作 $_SESSION['username'] 而不是 u_id = ' 。 $_SESSION[用户名]'

【讨论】:

  • 非常感谢。现在可以使用用户名
猜你喜欢
  • 2017-12-27
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 2016-07-03
  • 2016-03-22
  • 2016-10-06
  • 1970-01-01
相关资源
最近更新 更多