2013-03-25 130 views
1

enter image description here獲取登錄的用戶數據

所以我有這個數據庫以及此代碼。此代碼將使用戶能夠通過會話登錄到頁面。
登錄表單(login.php中)

<?php 
    require("common.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: private.php"); 
      die("Redirecting to: private.php"); 
     } 
     else 
     { 
      print("Login Failed."); 
      $submitted_username = htmlentities($_POST['username'], ENT_QUOTES, 'UTF-8'); 
     } 
    } 

?> 
<h1>Login</h1> 
<form action="login.php" method="post"> 
    Username:<br /> 
    <input type="text" name="username" value="<?php echo $submitted_username; ?>" /> 
    <br /><br /> 
    Password:<br /> 
    <input type="password" name="password" value="" /> 
    <br /><br /> 
    <input type="submit" value="Login" /> 
</form> 
<a href="register.php">Register</a> 

會議(的common.php)

<?php 

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


    $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); 

    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) 
    { 
     function undo_magic_quotes_gpc(&$array) 
     { 
      foreach($array as &$value) 
      { 
       if(is_array($value)) 
       { 
        undo_magic_quotes_gpc($value); 
       } 
       else 
       { 
        $value = stripslashes($value); 
       } 
      } 
     } 

     undo_magic_quotes_gpc($_POST); 
     undo_magic_quotes_gpc($_GET); 
     undo_magic_quotes_gpc($_COOKIE); 
    } 

    header('Content-Type: text/html; charset=utf-8'); 
    session_start(); 
?> 

顯示頁(private.php)

<?php 
    require("common.php"); 
    if(empty($_SESSION['user'])) 
    { 
     header("Location: login.php"); 
     die("Redirecting to login.php"); 
    } 
?> 
<?php 
    $query = " 
     SELECT 
      id, 
      username, 
      email, 
      task, 
      task_name 
     FROM users 
    "; 

    try 
    { 
     $stmt = $db->prepare($query); 
     $stmt->execute(); 
    } 
    catch(PDOException $ex) 
    { 
     die("Failed to run query: " . $ex->getMessage()); 
    } 
    $rows = $stmt->fetchAll(); 
?> 
<h1>Memberlist</h1> 
<table border='1'> 
    <tr> 
     <th>User</th> 
     <th>E-Mail Address</th> 
     <th>Task Name</th> 
     <th>Task Description</th> 

    </tr> 
    <?php foreach($rows as $row): ?> 
     <tr> 
      <td><?php echo htmlentities($row['username'], ENT_QUOTES, 'UTF-8'); ?></td> 
      <td><?php echo htmlentities($row['email'], ENT_QUOTES, 'UTF-8'); ?></td> 
      <td><?php echo htmlentities($row['task_name'], ENT_QUOTES, 'UTF-8'); ?></td> 
      <td><?php echo htmlentities($row['task'], ENT_QUOTES, 'UTF-8'); ?></td> 

     </tr> 
    <?php endforeach; ?> 
</table><br /> 

我想要做的是顯示當前登錄的用戶的數據。例如,當user1登錄他的個人資料中的每個細節時,會顯示用戶名,電子郵件,任務和任務名稱,但在我的代碼中將顯示每個人的詳細信息。

+0

是否要顯示所有已登錄的用戶或現在登錄的用戶的詳細信息? – 2013-03-25 04:58:20

+0

當前登錄/現在 – Yinks 2013-03-25 05:01:07

回答

0

在你private.php頁面更改查詢是這樣的:

$query = " 
     SELECT 
      id, 
      username, 
      email, 
      task, 
      task_name 
     FROM users 
     WHERE id = '".$_SESSION['user']['id']."' 
    "; 

這裏$_SESSION['user']['id']包含登錄用戶的ID,所以onl y在mysql中使用WHERE獲取該用戶的詳細信息。

1

select查詢是錯誤的

$query = " 
     SELECT 
      id, 
      username, 
      email, 
      task, 
      task_name 
     FROM users WHERE username = '".$_SESSION['user']['username']."' 
    "; 

沒有必要的foreach

<tr> 
    <td><?php echo htmlentities($rows['username'], ENT_QUOTES, 'UTF-8'); ?></td> 
    <td><?php echo htmlentities($rows['email'], ENT_QUOTES, 'UTF-8'); ?></td> 
    <td><?php echo htmlentities($rows['task_name'], ENT_QUOTES, 'UTF-8'); ?></td> 
    <td><?php echo htmlentities($rows['task'], ENT_QUOTES, 'UTF-8'); ?></td> 
</tr> 
+1

'$ _SESSION ['user']'實際上是一個數組,所以我猜它應該是這樣的:'$ _SESSION ['user'] ['username']'在您的查詢中 – 2013-03-25 05:05:45

+0

@PrasanthBendra謝謝 – 2013-03-25 05:10:56