2014-04-15 140 views
0

我使用$_SESSION['name'];來自數據庫的名稱使用這個我得到這個Notice: Undefined index: name in C:\Users\..\logged_in.php on line 2你能告訴我什麼是布萊恩嗎?請幫助請...注意:未定義的索引:在第2行的C: Users .. logged_in.php中的名稱

登錄in.php

Hey, <?php echo $_SESSION['name']; ?>. You are logged in. 
Try to close this browser tab and open it again. Still logged in! ;) 

<a href="index.php?logout">Logout</a> 

的login.php

<?php 

/** 
* Class login 
* handles the user's login and logout process 
*/ 
class Login 
{ 
    /** 
    * @var object The database connection 
    */ 
    private $db_connection = null; 
    /** 
    * @var array Collection of error messages 
    */ 
    public $errors = array(); 
    /** 
    * @var array Collection of success/neutral messages 
    */ 
    public $messages = array(); 

    /** 
    * the function "__construct()" automatically starts whenever an object of this class is created, 
    * you know, when you do "$login = new Login();" 
    */ 
    public function __construct() 
    { 
     // create/read session, absolutely necessary 
     session_start(); 

     // check the possible login actions: 
     // if user tried to log out (happen when user clicks logout button) 
     if (isset($_GET["logout"])) { 
      $this->doLogout(); 
     } 
     // login via post data (if user just submitted a login form) 
     elseif (isset($_POST["login"])) { 
      $this->dologinWithPostData(); 
     } 
    } 

    /** 
    * log in with post data 
    */ 
    private function dologinWithPostData() 
    { 
     // check login form contents 
     if (empty($_POST['user_name'])) { 
      $this->errors[] = "Username field was empty."; 
     } elseif (empty($_POST['user_password'])) { 
      $this->errors[] = "Password field was empty."; 
     } elseif (!empty($_POST['user_name']) && !empty($_POST['user_password'])) { 

      // create a database connection, using the constants from config/db.php (which we loaded in index.php) 
      $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

      // change character set to utf8 and check it 
      if (!$this->db_connection->set_charset("utf8")) { 
       $this->errors[] = $this->db_connection->error; 
      } 

      // if no connection errors (= working database connection) 
      if (!$this->db_connection->connect_errno) { 

       // escape the POST stuff 
       $user_name = $this->db_connection->real_escape_string($_POST['user_name']); 

       // database query, getting all the info of the selected user (allows login via email address in the 
       // username field) 
       $sql = "SELECT user_name, user_email, user_password_hash 
         FROM users 
         WHERE user_name = '" . $user_name . "' OR user_email = '" . $user_name . "';"; 
       $result_of_login_check = $this->db_connection->query($sql); 

       // if this user exists 
       if ($result_of_login_check->num_rows == 1) { 

        // get result row (as an object) 
        $result_row = $result_of_login_check->fetch_object(); 

        // using PHP 5.5's password_verify() function to check if the provided password fits 
        // the hash of that user's password 
        if (password_verify($_POST['user_password'], $result_row->user_password_hash)) { 

         // write user data into PHP SESSION (a file on your server) 
         $_SESSION['user_name'] = $result_row->user_name; 
         $_SESSION['user_email'] = $result_row->user_email; 
         $_SESSION['user_login_status'] = 1; 

        } else { 
         $this->errors[] = "Wrong password. Try again."; 
        } 
       } else { 
        $this->errors[] = "This user does not exist."; 
       } 
      } else { 
       $this->errors[] = "Database connection problem."; 
      } 
     } 
    } 

    /** 
    * perform the logout 
    */ 
    public function doLogout() 
    { 
     // delete the session of the user 
     $_SESSION = array(); 
     session_destroy(); 
     // return a little feeedback message 
     $this->messages[] = "You have been logged out."; 

    } 

    /** 
    * simply return the current state of the user's login 
    * @return boolean user's login status 
    */ 
    public function isUserLoggedIn() 
    { 
     if (isset($_SESSION['user_login_status']) AND $_SESSION['user_login_status'] == 1) { 
      return true; 
     } 
     // default return 
     return false; 
    } 
} 
+2

在session_start()是你的類構造內..如果你不把它也不會是任何會話一起工作.. +您設置$ _SESSION ['user_name']但試圖捕獲$ _SESSION ['name']? – Svetoslav

+0

[PHP:「注意:未定義的變量」和「注意:未定義的索引」]的可能重複(http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index) – Touchpad

回答

0

我假設有一些其他代碼調用登錄腳本。無論如何,該通知意味着'名稱'鍵沒有在$ _SESSION中註冊,這是有道理的,因爲我認爲你的意思是'user_name'。

這樣試試:

Hey, <?php echo $_SESSION['user_name']; ?>. You are logged in. 
Try to close this browser tab and open it again. Still logged in! ;) 

<a href="index.php?logout">Logout</a> 

否則你在會議登記「名稱」,假設$ result_row具有名稱屬性:

if (password_verify($_POST['user_password'], $result_row->user_password_hash)) { 
    // write user data into PHP SESSION (a file on your server) 
    $_SESSION['name'] = $result_row->name; 
    $_SESSION['user_name'] = $result_row->user_name; 
    $_SESSION['user_email'] = $result_row->user_email; 
    $_SESSION['user_login_status'] = 1; 

} 
+0

Nooooo我想註冊'$ _SESSION ['name']'以及如何操作? – user3535207

+0

檢查我的編輯並讓我知道 – redmoon7777

+0

順便說一句,你必須註銷並重新登錄回來測試這個 – redmoon7777

0

我看到你Login::__construct功能session_start,但你試圖訪問$_SESSION之前構建new Login變量?我沒有看到...我建議確保session_start()在您的init代碼中的某個地方,在別的之前調用。

+0

老兄,當我使用'session_start();'它顯示爲輸出會話是alreldy開始請忽略那個...! – user3535207

1

也許會無法創建。您是否在檔案中使用start_session()

echo這樣的用戶名<?php echo (isset($_SESSION['name'])) ? $_SESSION['name'] : 'guest'; ?>並查看會話是否已創建。

+0

很好的答案,但如何從數據庫登錄誰調用名稱 – user3535207

+0

你已經從數據庫'$ _SESSION ['user_name'] = $ result_row-> user_name;'但在此之後,你調用會話'$ _SESSION ['名稱']'這樣,也許你只是用錯誤的鍵調用會話。試試這個'$ _SESSION ['user_name']' –

0

1st。請您登錄類移動你的session_start()到一個文件,該文件將包含在所有的PHP文件和REMOVE吧:)

也許你可以把它移動到你設定的常數爲DB_HOSTDB_USER和等。

第二檢查你的$ _SESSION鍵:)你設置$_SESSION['user_name']而是試圖抓住$_SESSION['name']

0

你無法不啓動會話訪問$_SESSION變量。另外,如果你已經在php文件中的任何地方開始了會話,那麼你將會看到一個會話已經開始的警告。所以請考慮使用下面的語句,您可以訪問$_SESSION變量之前:

if(!session_id()) session_start();

相關問題