2010-12-01 43 views
0

登錄這是否看起來好了的登錄腳本PHP 2人在同一時間在同一臺計算機pt.02

//Player 1 Login username and password 
$p1name = $_POST['p1name']; 
$p1pass = $_POST['p1pass']; 

//player 2 Login username and password 
$p2name = $_POST['p2name']; 
$p2pass = $_POST['p2pass']; 

$connection = mysql_connect("db_host", "db_user", "db_pass"); 
mysql_select_db("db_name", $connection); 

get_user($p1name, $p1pass); 
get_user($p2name, $p2pass); 

$row = $result; 
$found = false; 

if(($row["username"] == $p1name && $row["password"] == sha1("$p1pass")) 
    && ($row["username"] == $p2name && $row["password"] == sha1("$p2pass"))) 
{ 
    $found = true; 
    break; 
} 

function get_user($username, $password) 
{ 
    $query = 'SELECT * FROM users'; 
    $query .= ' WHERE username = ' . mysql_real_escape_string($username); 
    $query .= ' AND password = ' . mysql_real_escape_string(sha1($password)); 
    $result = mysql_query($query); 
    return mysql_fetch_assoc($result); 
} 
+0

您需要將`get_user()`的返回值賦給某個​​東西。你還需要兩個獨立的$ row行 - 「$ row [」username「] == $ p1name`和`$ row [」username「] == $ p2name`是互斥的條件。 – 2010-12-01 20:00:44

+0

我在這裏有點困惑......你爲什麼要在同一個會話中登錄2個人工智能?您的代碼一次只能用於1人(= Session)。如果打開新會話,則應爲該會話創建新用戶。還總是鹽你的密碼。由於存在彩虹表,簡單地對它們進行散列已經不再安全。 – 2010-12-01 20:01:50

+0

一個if語句用於第一行,然後一個elseif語句用於$ row的第二個實例,並且不能使用兩個用戶的會話ID從同一臺計算機播放 – hgbso 2010-12-01 20:12:40

回答

1

這是一個稍微有點清潔的想法。我建議得到使用,以例外,他們是偉大的:)

function Login($uname, $passwd) { 
     $uname = mysql_real_escape_string($uname); 
     $passwd = mysql_real_escape_string($passwd); 

     // we are using sha encryption for user passwords 
     $passwd = sha1($passwd); 

     // lookup the user information they specified 
     $sql = mysql_query("SELECT * FROM `users` WHERE uname='$uname' && passwd='$passwd'"); 

     try { 
      // if the username/password combo doesnt work/exist then tell them 
      if(!mysql_fetch_assoc($sql)) { 
       $error = new Error(); 
       throw new Exception($error->Login(1)); 

      // if the password DOES work, then continue the login 
      } else { 

       $_SESSION['login'] = 'true'; 
       $_SESSION['uname'] = $uname; 
       redirect(); 
      } 
     } catch (Exception $e) { 
      echo $e->GetMessage(); 
     } 
    } 

至於的評論「你不能存儲兩個用戶!!! ZOMG會話值!」以及..如果你必須這樣做,只需將它們存儲在這樣的東西。$ _SESSION ['user1'] $ _SESSION ['user2']。這只是一個想法 - 我不是在寬恕這個。

2
<?php  
// Player 1 Login Information 
$p1name = $_POST['p1name']; 
$p1pass = $_POST['p1pass']; 

// Player 1 Login Information 
$p2name = $_POST['p2name']; 
$p2pass = $_POST['p2pass']; 

// Check user information 
$player1 = get_user($p1name, $p1pass); 
$player2 = get_user($p2name, $p2pass); 

// Has any user been found? 
$found = array(
'player1' => false, 
'player2' => false 
); 

// Check if use information matches 
if($player1['username'] == $p1name && $player1['password'] == $p1pass) { 
$found['player1'] = true; 
} 
if($player2['username'] == $p2name && $player2['password'] == $p2pass) { 
$found['player2'] = true; 
} 

function connect($db_host, $db_name, $db_pass, $db_table) { 
    $connection = mysql_connect($db_host, $db_name, $db_pass); 
    mysql_select_db($db_table, $connection); 
} 

function get_user($username, $password) { 
$query = 'SELECT * FROM users'; 
$query .= ' WHERE username = ' . mysql_real_escape_string($username); 
$query .= ' AND password = ' . mysql_real_escape_string(sha1($password)); 
$result = mysql_query($query); 
return mysql_fetch_assoc($result); 
} 

您需要創建返回的用戶信息的實例,以檢查每個玩家對他們自己。

相關問題