2014-01-21 53 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'); ?>

這顯示歡迎(和用戶名稱或號碼)試試。