2014-01-21 48 views
0

我想在用户登录时显示“欢迎”用户名“',但它不起作用。我可能会在会议上做错事。尝试在用户登录时显示欢迎消息

它给出了一个错误消息:

通知:Array对字符串的转换

我的代码:

<?php 
    require("config.php"); 
    if(empty($_SESSION['user'])) 
    { 
     header("Location: index.php"); 
     die("Redirecting to index.php"); 
    } 
    $user = $_SESSION['user']; 
?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title>uvoluntary</title> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width"> 
<link href="font/stylesheet.css" rel="stylesheet" type="text/css"> 

</head> 
<body> 

<div class="navbar navbar-fixed-top navbar-inverse"> 
    <div class="navbar-inner"> 
    <div class="container"> 
     <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </a> 
     <a class="brand">Logged In</a> 
     <div class="nav-collapse"> 
     <ul class="nav pull-right"> 
      <li><a href="eventsignup.php">Create Event</a></li> 
      <li><a href="#">My Events</a></li> 
      <li class="divider-vertical"></li> 
      <li><a href="logout.php">Log Out</a></li> 
     </ul> 
     </div> 
    </div> 
    </div> 
</div> 

<!-- MAIN CONTENT --> 
<div class="container content container-fluid" id="home"> 

<h1 style="text-align: center;">Admin Control Panel</h1> 
    <!-- HOME --> 
<h2>Welcome <?php echo $user; ?> </h2> 

</div> 


</body> 
</html> 

CONFIG.PHP

<?php 

    // These variables define the connection information for your MySQL database 
    $username = "root"; 
    $password = ""; 
    $host = "localhost"; 
    $dbname = "uvoluntarytest"; 

    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
    try { $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); } 
    catch(PDOException $ex){ die("Failed to connect to the database: " . $ex->getMessage());} 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
    header('Content-Type: text/html; charset=utf-8'); 
    session_start(); 
?> 

的index.php

<?php 
    require("config.php"); 
    $submitted_username = ''; 

    if(!empty($_POST)){ 
     $query = " 
      SELECT 
       id, 
       username, 
       password, 
       salt, 
       email 
      FROM users 
      WHERE 
       username = :username 
     "; 
     $query_params = array( 
      ':username' => $_POST['username'] 
     ); 

     try{ 
      $stmt = $db->prepare($query); 
      $result = $stmt->execute($query_params); 

     } 
     catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
     $login_ok = false; 
     $row = $stmt->fetch(); 
     if($row){ 
      $check_password = hash('sha256', $_POST['password'] . $row['salt']); 
      for($round = 0; $round < 65536; $round++){ 
       $check_password = hash('sha256', $check_password . $row['salt']); 
      } 
      if($check_password === $row['password']){ 
       $login_ok = true; 
      } 
     } 

     if($login_ok){ 
      unset($row['salt']); 
      unset($row['password']); 
      $_SESSION['user'] = $row; 
      header("Location: secret.php"); 
      die("Redirecting to: secret.php"); 
     } 
     else{ 
      echo '<h4 style="color:red;font-weight:bold; margin-top:40px; margin-left:850px;">Username And/or Password Incorrect. Please try again.</h4>'; 


     } 
    } 

?> 
+0

你在哪里设置'$ _SESSION ['user']'? –

+2

'session_start();'尝试使它成为php标签后的第一个页面 –

回答

2

你要么缺少session_start()或没有它放在你的文件的顶部。

  • 第一个文件:缺少它完全
  • config.php文件:需要去在文件的顶部
+0

我在config.php中使用它。见上面 – codingman

+3

它不在文件的顶部**。 –

+0

它需要在config.php和第一个文件 – codingman

1

顺其自然创建$_SESSION['user']代码 - 听起来像你分配一个数组也许呢?尝试执行print_r($user)以查看这是否是您的错误来自的问题阵列。也许你需要的东西,如echo $user['username']

编辑:你确实将一个数组赋值给$ _SESSION ['user']。这样做:

echo $user['username']; 

或者做或者解决您的数据库代码:

$_SESSION['user'] = $row['username']; 

另外设置一个会话之前的标头调用通常不工作,除非你关闭会话。

尽量只头调用之前添加此:

session_write_close(); 

移动你的session_start()到非常顶尖的好措施。

+0

添加上面的代码。谢谢 – codingman

+0

@codingman看到编辑答案上面 – cyberwombat

+0

试过这仍然没有工作。 :/ – codingman

1

为什么不在页面中启动session_start()函数..当您使用会话进行编码时,它需要位于每个页面中。

而且我也找不到任何理由在代码中设置$_SESSION['user'] ...

请纠正这些..

+1

是真的。很简单... – MELWIN

1

开始在页

session_start()功能。

当您使用会话进行编码时,它需要位于每个页面中。

试试吧。我希望它足够

0

欢迎,<?php echo htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8'); ?>

这显示欢迎(和用户名称或号码)试试。