2014-02-20 10 views
0

但是我的問題記錄時(獲得)來自特定用戶的特定數據是,我想登錄的人看到「爲例[年齡,錢包]等。PHP中獲取

我使用的登錄和註冊(當有人在裏面記錄說,你好,[「用戶名」])讓我開始從一個網站的腳本,他們已經擁有了名稱代碼

本教程的URL是在這裏:How to Create a Secure Login Script in PHP and MySQL

它可能不是最安全或最好的方式來創建,但這就是爲什麼我學習。

編輯:只是爲了讓我的問題更容易理解: 我不想從我的數據庫中獲取數據,例如年齡。 當我登錄時,我會收到Hello,Chris。 但我想你好,克里斯。例如你的年齡是20歲。 無論我嘗試什麼,我都無法完成這項工作。 代碼:

的index.php

<?php 
    include_once 'includes/db_connect.php'; 
    include_once 'includes/functions.php'; 

    sec_session_start(); 

    ?> 

    <!DOCTYPE HTML> 
    <html lang="en"> 
    <head> 
    <meta charset="utf-8" /> 
    <title>Project 0N3</title> 
    <link rel="stylesheet" href="style/style.css" /> 
    <meta name="generator" content="localhost"> 
    </head> 

    <body> 

     <div id="wrapper"> 


      <div id="top-panel-right-beta"> 
      <a class="two" href="index.php">Dark Theme | </a> 
      <a class="two" href="light-index.php">Light Theme[BETA]</a> 
      </div> 

      <?php if(login_check($mysqli) == true) : ?> 


      <div class="welcome"> 
       <p>Hello, <?php echo htmlentities ($_SESSION['username']); ?>!</p> 
       </div> 

      <div id="waller"> 
       <?php 

    ?> 
       <p>Your Wallet: <?php echo ($_SESSION['wallet']);?></p> 
       </div> 

     <div id="home"> 
      <div id="top-panel"> 
       <a class="one" href="index.php" >Home | </a> 
       <a class="one" href="membersarea.php">Members Area | </a> 
       <a class="one" href="createaccount.php"> Create a game account | </a> 
       <a class="one" href="includes/logout.php">Log Out</a> 

       </div> 




      <div id="content"> 

       <h1>It is all about Project 0N3</h1> 
       <p class="alpha">Alpha 0.0.1</p> 
     <p>Mauris convallis ipsum lorem, id posuere sem semper vitae. Curabitur elementum, nibh a lobortis eleifend, sem diam ultricies massa, non congue risus dui vitae purus. Aliquam ut lectus vitae quam hendrerit volutpat. Sed iaculis vestibulum sapien. Aenean molestie, tortor faucibus condimentum consequat, quam risus ultrices orci, sed sagittis velit magna ultrices purus. Phasellus non odio eget erat pellentesque ullamcorper eget sit amet libero. Cras vel facilisis ipsum. Quisque rutrum viverra consequat. Sed posuere eros in nisi lobortis accumsan quis ac neque. Aliquam at diam rhoncus, accumsan nunc id, fringilla elit. Integer scelerisque leo nec metus accumsan mollis. Curabitur iaculis nibh et turpis gravida pulvinar. 
     </p> 

        <div id="footer"> 
       &copy; 2014 Project 0N3. All rights reserved 
       </div> 
       </div> 


    <?php else : ?> 


       <div id="top-panel-right_2"> 
       <a class="one" href="registeraccount.php">Register | </a> 
       <a class="one" href="login.php">Log in</a> 
       </div> 
      <div id="content-noacc"> 

    <h1 class="h1beta"> ALPHA Ver 0.0.1 </h1> 

       <div class="logohuge"> 
        <a href="about.php"><img src="images/logo01.png" width="" height="" alt="logo01"></a> 

       </div> 
       </div>   

       <div id="footer2"> 
       &copy; 2014 Project 0N3. All rights reserved 
       </div> 




    <?php endif; ?> 


     </div> 

    <!-- End of div wrapper --> 
     </div> 
    </body> 
    </html> 

function.php

<?php 
    include_once 'psl-config.php'; 

    function sec_session_start() 
    { 
     $session_name = 'sec_session_id'; // Set a custom session name 
     $secure = 'SECURE'; 
     // This stops JavaScript being able to access the session id. 
     $httponly = true; 
     // Forces sessions to only use cookies. 
     if (ini_set('session.use_only_cookies', 1) === FALSE) { 
      header("Location: ../error.php?err=Could not initiate a safe session (ini_set)"); 
      exit(); 
     } 
     // Gets current cookies params. 
     $cookieParams = session_get_cookie_params(); 
     session_set_cookie_params($cookieParams["lifetime"], 
      $cookieParams["path"], 
      $cookieParams["domain"], 
      $secure, 
      $httponly); 
     // Sets the session name to the one set above. 
     session_name($session_name); 
     session_start();   // Start the PHP session 
     session_regenerate_id(); // regenerated the session, delete the old one. 
    } 

    function login($email, $password, $mysqli, $wallet) { 
     // Using prepared statements means that SQL injection is not possible. 
     if ($stmt = $mysqli->prepare("SELECT id, username, password, salt, wallet 
      FROM members 
      WHERE email = ? 
      LIMIT 1")) { 
      $stmt->bind_param('s', $email); // Bind "$email" to parameter. 
      $stmt->execute(); // Execute the prepared query. 
      $stmt->store_result(); 

      // get variables from result. 
      $stmt->bind_result($user_id, $username, $db_password, $salt, $wallet); 
      $stmt->fetch(); 

      // hash the password with the unique salt. 
      $password = hash('sha512', $password . $salt); 
      if ($stmt->num_rows == 1) { 
       // If the user exists we check if the account is locked 
       // from too many login attempts 

       if (checkbrute($user_id, $mysqli) == true) { 
        // Account is locked 
        // Send an email to user saying their account is locked 
        return false; 
       } else { 
        // Check if the password in the database matches 
        // the password the user submitted. 
        if ($db_password == $password) { 
         // Password is correct! 
         // Get the user-agent string of the user. 
         $user_browser = $_SERVER['HTTP_USER_AGENT']; 
         // XSS protection as we might print this value 
         $user_id = preg_replace("/[^0-9]+/", "", $user_id); 
         $_SESSION['user_id'] = $user_id; 
         // XSS protection as we might print this value 
         $username = preg_replace("/[^a-zA-Z0-9_\-]+/", 
                    "", 
                    $username); 
         $_SESSION['username'] = $username; 
         $_SESSION['login_string'] = hash('sha512', 
            $password . $user_browser); 
         // Login successful. 
         return true; 
        } else { 
         // Password is not correct 
         // We record this attempt in the database 
         $now = time(); 
         $mysqli->query("INSERT INTO login_attempts(user_id, time) 
             VALUES ('$user_id', '$now')"); 
         return false; 
        } 
       } 
      } else { 
       // No user exists. 
       return false; 
      } 
     } 
    } 
    function checkbrute($user_id, $mysqli) { 
     // Get timestamp of current time 
     $now = time(); 

     // All login attempts are counted from the past 2 hours. 
     $valid_attempts = $now - (2 * 60 * 60); 

     if ($stmt = $mysqli->prepare("SELECT time 
           FROM login_attempts <code><pre> 
           WHERE user_id = ? 
           AND time > '$valid_attempts'")) { 
      $stmt->bind_param('i', $user_id); 

      // Execute the prepared query. 
      $stmt->execute(); 
      $stmt->store_result(); 

      // If there have been more than 5 failed logins 
      if ($stmt->num_rows > 5) { 
       return true; 
      } else { 
       return false; 
      } 
     } 
    } 
    function login_check($mysqli) { 
     // Check if all session variables are set 

     if (isset($_SESSION['user_id'], 
          $_SESSION['username'], 
          $_SESSION['login_string'])) { 

      $user_id = $_SESSION['user_id']; 
      $login_string = $_SESSION['login_string']; 
      $username = $_SESSION['username']; 


      // Get the user-agent string of the user. 
      $user_browser = $_SERVER['HTTP_USER_AGENT']; 

      if ($stmt = $mysqli->prepare("SELECT password 
              FROM members 
              WHERE id = ? LIMIT 1")) { 
       // Bind "$user_id" to parameter. 
       $stmt->bind_param('i', $user_id); 
       $stmt->execute(); // Execute the prepared query. 
       $stmt->store_result(); 

       if ($stmt->num_rows == 1) { 
        // If the user exists get variables from result. 
        $stmt->bind_result($password); 
        $stmt->fetch(); 
        $login_check = hash('sha512', $password . $user_browser); 

        if ($login_check == $login_string) { 
         // Logged In!!!! 
         return true; 
        } else { 
         // Not logged in 
         return false; 
        } 
       } else { 
        // Not logged in 
        return false; 
       } 
      } else { 
       // Not logged in 
       return false; 
      } 
     } else { 
      // Not logged in 
      return false; 
     } 
    } 
    function esc_url($url) { 

     if ('' == $url) { 
      return $url; 
     } 

     $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url); 

     $strip = array('%0d', '%0a', '%0D', '%0A'); 
     $url = (string) $url; 

     $count = 1; 
     while ($count) { 
      $url = str_replace($strip, '', $url, $count); 
     } 

     $url = str_replace(';//', '://', $url); 

     $url = htmlentities($url); 

     $url = str_replace('&amp;', '&#038;', $url); 
     $url = str_replace("'", '&#039;', $url); 

     if ($url[0] !== '/') { 
      // We're only interested in relative links from $_SERVER['PHP_SELF'] 
      return ''; 
     } else { 
      return $url; 
     } 
    } 
+4

什麼問題? – bestprogrammerintheworld

+0

對不起,如果我不夠清楚。 我不想從年齡等數據庫中獲取數據。 當我登錄時,我會收到Hello,Chris。但我有點想要你好,克里斯。例如你的年齡是20歲。 無論我嘗試什麼,我都無法完成這個任務 – Chris

回答

0

假設age是你members表中的列,你需要做一些變化...

// add age to the SELECT query 
if ($stmt = $mysqli->prepare("SELECT id, username, password, salt, wallet, age 
      FROM members… 

// add $age to the bind_result call 
$stmt->bind_result($user_id, $username, $db_password, $salt, $wallet); 
$stmt->fetch(); 
… 
// add $age to the SESSION 
$_SESSION['username'] = $username; 
$_SESSION['login_string'] = hash('sha512', 
    $password . $user_browser); 
$_SESSION['age'] = $age; 
… 
// Access the SESSION value 
<div class="welcome"> 
    <p>Hello, <?php echo htmlentities ($_SESSION['username']); ?>. Your age is <?php echo htmlentities ($_SESSION['age']); ?>.</p> 
</div> 

這應該至少指出你在正確的方向。

+0

哇不能相信我錯過了那樣的事。 謝謝你,你救了我的命。 – Chris