2010-06-21 255 views
0

問題:如何在用戶成功登錄時獲取用戶信息?
PHP登錄並獲取用戶信息

這裏是我的的login.php代碼

 
<?php 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    // mysql connect function here.... 
    // mysql query here.... 
    $sql = "SELECT * FROM user_accounts WHERE username = '$username' and password = '$password'"; 
    $result = mysql_query($sql); 
    $count = mysql_num_rows($result); 

    if($count == 1) { 
    session_register(username); 
    session_register(password); 
    header('location: index.php'); 
    } 
    else { 
    $error = "Invalid Username or Password Please Try Again"; 
    } 

} 
?> 
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<?=$error=?> 
Username : <input type="text" name="username"> 
Password : <input type="password" name="password"> 
<input type="submit" /> 
</form> 


這裏是我的index.php代碼

 
<? 
    session_start(); 
    if(!session_is_registered(username)){ 
    header("location:login.php"); 
    } 
$username = session_is_registered(username); 
    $password = session_is_registered(password); 
echo $username; 
    echo $password; 
    ?> 


舉例:這是數據庫信息。

 
User ID --> 001 
Username --> admin 
Password --> admin 

當我回聲$用戶名$密碼結果用戶名= 1和密碼= 1.我想要的結果是用戶名= admin和密碼=管理員。

我怎樣才能獲得登錄的用戶名和密碼?因爲我需要查詢,所以我可以讓他/她例如名字,姓氏。
我已經得到這個,但我忘了如何做到這一點。 =)

非常感謝您的回覆。 =)

+1

沒有人在此代碼中評論過mysql注入漏洞!我很驚訝。 – 2010-06-21 12:30:09

+0

我只是寫它,但向下滾動發現您的評論,所以... @Pagaduan在使用它們進行查詢或其他任何操作之前,清理從$ _POST/$ _ GET獲取的字符串;在這種情況下使用例如http://php.net/manual/en/function.mysql-real-escape-string.php – ShinTakezou 2010-06-21 12:38:57

回答

2

您已經有了用戶名和密碼來從POST陣列中,您可以像這樣將它們存儲在會話中:

session_start(); // this will go on top of the page 
......... 

if($count == 1) { 
    session_register(username); 
    session_register(password); 

    $_SESSION['username'] = $_POST['username']; // store username 
    $_SESSION['password'] = $_POST['password']; // store password 

    header('location: index.php'); 
    } 
    else { 
    $error = "Invalid Username or Password Please Try Again"; 
    } 

以後你可以讓他們想:

echo $_SESSION['username']; 
echo $_SESSION['password']; 

,你應該消滅他們在會話註銷文件。

注2session_register已被棄用的PHP 5.3.0的。只需使用$_SESSION數組來存儲您的值。

+0

只需要注意一下:session_register自PHP 5.3.0起已被棄用 – 2010-06-21 12:21:28

+0

這是真的。好點 – 2010-06-21 12:21:58

+0

@RussellDias:這很好,加在答案中。謝謝 – Sarfraz 2010-06-21 12:22:18

1

session_is_registered是布爾值,所以它會檢查它是否設置爲不是它。

你想$username = $_SESSION['username'];

$password= $_SESSION['password']; 

儘量不要使用,雖然用戶名和密碼作爲會議名稱。

我發現它已經被MySQL和存儲會話中的MySQL用戶名和密碼

編輯

還了session_register已被棄用

2

您正在使用舊的會話功能,並且您錯誤地使用了它們。讓我告訴你如何使用$ _SESSION數組來完成它。請注意,自PHP 5.3起,session_register()和session_is_registered()是不推薦使用的函數,這意味着它們可能會在稍後被移除。當你想在查詢中使用它的時候,你總是應該逃避來自用戶的輸入。您可能想要使用準備好的語句,PDO或mysqli。

<?php 
    // login.php 
    session_start(); 
    if($_SERVER['REQUEST_METHOD'] == 'POST') { 
     // mysql connect function here.... (moved up here) 
     $username = mysql_real_escape_string($_POST['username']); 
     $password = mysql_real_escape_string($_POST['password']); 
     $sql = "SELECT * FROM user_accounts WHERE username = '$username' AND password = '$password'"; 
     $result = mysql_query($sql) or die("MySQL Error: ".mysql_error()); 
     $user = mysql_fetch_assoc($result); 
     if($user !== false) { 
      $_SESSION['username'] = $user['username']; 
      $_SESSION['password'] = $user['password']; 
      header('Location: index.php'); 
     } else { 
      $error = "Invalid Username or Password Please Try Again"; 
     } 
    } 
?> 

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<?=$error=?> 
Username : <input type="text" name="username"> 
Password : <input type="password" name="password"> 
<input type="submit" /> 
</form> 

注意mysql_real_escape_string()功能和在上述例子中使用了超全局$_SESSION的。

<?php 
    // index.php 
    session_start(); 
    if(!isset($_SESSION['username'])) { 
     header("Location: login.php"); 
    } 
    $username = $_SESSION['username']; 
    $password = $_SESSION['password']; 
    echo $username; 
    echo $password; 
?> 

您可以使用isset()代替session_is_registered()檢查會話值已設置與否。

+0

太晚了,因爲我看到:) – svens 2010-06-21 12:30:30

+0

雖然 – 2010-06-21 13:07:58

+0

仍然有用謝謝你的答覆。這個答案幫了我很多。 :) – Jorge 2010-06-23 10:44:54

相關問題