【问题标题】:Trying to store session variable from result of SQL query试图从 SQL 查询的结果中存储会话变量
【发布时间】:2012-11-29 06:50:06
【问题描述】:

我已经尝试了一切,从将查询存储为变量和使用 fetch_array,但当我尝试打印 $_SESSION['permission'] 时,它一直只给我输出“Array”。我不知道该怎么办,请帮忙。

<?php
session_start(); 
mysql_connect("localhost","",""); 
mysql_select_db("a"); 
if(isset($_SESSION['loggedin']))
{
    header("Location: http://www.mywebsite.com/whatever");
} 
if($_POST['submit'])
{
   $name = mysql_real_escape_string($_POST['username']); 
   $pass = mysql_real_escape_string($_POST['password']); 
   $mysql = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'"); 
   $result = mysql_query("SELECT permission FROM users WHERE name = '{$name}' AND password = '{$pass}'");
   $permission = mysql_fetch_array($result);
   if(mysql_num_rows($mysql) < 1)
   {
     die("Password was incorrect!");
   } 
   $_SESSION['loggedin'] = "YES"; 
   $_SESSION['name'] = $name; 
   $_SESSION['permission'] = $permission;

   header ("Location: http://www.mywebsite.com/whatever"); 
}  
echo "<form type='login.php' method='POST'>
Username: <br>
<input type='text' name='username'><br>
Password: <br>
<input type='password' name='password'><br>
<input type='submit' name='submit' value='Login'>
</form>"; 
?>

【问题讨论】:

  • Array 输出的是什么? $row 是在哪里定义的?
  • $_SESSION['permission'] = $row; $row 在哪里?
  • 你为什么用header("Location: ")
  • 您的权限查询未完成,可能您想将$result 放入会话中

标签: php mysql session session-storage


【解决方案1】:

您将行数组分配给$_SESSION['permission'] 变量,因此当您打印它时,您会得到数组。 尝试在该数组上使用 print_r ,您将看到其中的内容。示例:print_r($_SESSION['permission']); Print 无法打印数组。当您再次看到这种情况时,请使用 print_rvar_dump 了解发生了什么。

【讨论】:

    【解决方案2】:

    刚刚编辑了代码的 POST 部分。请记住,您必须获取结果并使用关联数组来获取特定列的值:

    if($_POST['submit'])
    {
       $name = mysql_real_escape_string($_POST['username']); 
       $pass = mysql_real_escape_string($_POST['password']); 
       $result = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password = {$pass}'");
    
       if(!$row = mysql_fetch_array($result))
       {
          die("Password was incorrect!");
       }
    
       $_SESSION['loggedin'] = "YES"; 
       $_SESSION['name'] = $name; 
       $_SESSION['permission'] = $row['permission'];
       header ("Location: "); 
    }
    

    无需运行两次查询。

    【讨论】:

    • 据我所知,它不起作用。我试图让它在另一个页面上打印出 $_SESSION['permission'] 并且它一直完全空白。
    • 放置一个 print_r($row);就在 $_SESSION['loggedin'] = "YES";并检查它是否有任何数据。另外,请确保您在其他页面中使用 session_start()。
    【解决方案3】:

    如果$row 是查询的结果,您需要指定像$_SESSION['permission'] = $row[column_name]; 这样的列

    【讨论】:

      【解决方案4】:

      你需要使用循环遍历结果集,

      while($row = mysql_fetch_array($result)) {
      //use each row value($row) as per your need
      }
      

      所以,我相信,你想要实现这样的目标,

      if(isset($_POST['submit']))
      {
      $name = mysql_real_escape_string($_POST['username']); 
      $pass = mysql_real_escape_string($_POST['password']); 
      $result = mysql_query("SELECT permission FROM users WHERE name = '{$name}' AND password                                 = {$pass}'"); 
      $permission = mysql_fetch_array($result);
      $mysql = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password =     '{$pass}'"); 
      if(mysql_num_rows($mysql) < 1)
      {    
       die("Password was incorrect!");
      } 
      
      $_SESSION['loggedin'] = "YES"; 
      $_SESSION['name'] = $name; 
      $i = 0;
      while($row = mysql_fetch_array($result)) {    
      $_SESSION['permission' . $i] = $row;
      $i++;
      }
        header ("Location: "); 
       } 
      

      【讨论】:

        猜你喜欢
        • 2014-11-04
        • 1970-01-01
        • 2011-10-18
        • 2012-03-13
        • 2016-06-21
        • 2014-04-24
        • 2019-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多