2013-07-12 5 views
-1

괜찮아요, 나는이 코드가 오늘 (특히 setSession 함수) 일하고 있다고 생각하지만, 그 유일한 비밀 번호를 사용자 이름을 선택하고 사용자가 로그인 할 수 있도록 깨닫게되었습니다. 양식에 당신이 원하는 무엇이든을 넣어 ( 비밀 번호 및 사용자 이름을 검색 할 수 없습니다

<?php 
class user 
{ 
    protected $db; 
    protected $uid; 
    protected $email; 
    protected $username; 
    protected $citcode; 
    protected $password; 
    public $error; 
    function __construct($db) 
    { 
     $this->db = $db; 
    } 
    function error($error) 
    { 
     $this->error = $error; 
    } 
    function passwordCrypt($password) 
    { 
     $password = crypt($password, '$2a$07$ThisIsSparta$'); 
     return $password; 
    } 
    function registerUser($username, $password, $email, $citcode, $db) 
    { 
     $verifyCC = $this->checkCitCode($citcode); 
     $verifyUser = $this->checkUsername($username, $email); 
     if($verifyUser == true) 
     { 
      if($verifyCC == true) 
      { 
       $password = $this->passwordCrypt($password); 
       $username = $this->db->real_escape_string($username); 
       $email = $this->db->real_escape_string($email); 
       $date = date('Y-m-d'); 
       $sql = "INSERT INTO users(username, password, email, joindate) VALUES ('{$username}', '{$password}', '{$email}', NOW());"; 
       $sql .= "INSERT INTO bank_accounts(type, balance) VALUES ('personal', '10000');"; 
       $query = $this->db->multi_query($sql); 
       if(!$query) 
       { 
        $this->error('Could not register user, please try again later.'); 
       } 
       else 
       { 
        return true; 
       } 
      } 
      else 
      { 
       return $this->error('Could not Verify Citizen Code'); 
      } 
     } 
     else 
     { 
      return $this->error('Username/Password is already taken'); 
     } 
    } 
    function checkCitCode($citcode) 
    { 
     $sql = "SELECT amount, active FROM citizen_codes WHERE citizen_code = '{$citcode}';"; 
     $query = $this->db->query($sql); 
     if(!$query) 
     { 
      die(mysqli_error($this->db)); 
     } 
     else 
     { 
      while($row = $query->fetch_assoc()) 
      { 
       if($row['active'] >= $row['amount']) 
       { 
        return false; 
       } 
       else 
       { 
        $active = $row['active'] +1; 
        $sql = "UPDATE citizen_codes SET active = '{$active}' WHERE citizen_code = '{$citcode}';"; 
        $query = $this->db->query($sql); 
        if(!$query) 
        { 
         return false; 
        } 
        else 
        { 
         return true; 
        } 
       } 
      } 
     } 
    } 
    function checkUsername($username, $email) 
    { 
     $sql = "SELECT count(*) FROM users WHERE username = '{$username}' OR email = '{$email}'"; 
     $que = $this->db->query($sql); 
     if(!$que) 
     { 
      return false; 
     } 
     else 
     { 
      $row = $que->fetch_array(); 
      if($row[0] > 0) 
      { 
       return false; 
      } 
      else 
      { 
       return true;  
      } 
     } 
    } 
    function setSession($username, $password) 
    { 
     $password = $this->passwordCrypt($password); 
     $username = $this->db->real_escape_string($username); 
     $sql = "SELECT uid FROM users WHERE username = '{$username}' AND password = '{$password}';"; 
     $query = $this->db->query($sql); 
     if(!$query) 
     { 
      return false; 
     } 
     else 
     { 
      while($row = $query->fetch_array()) 
      { 
       $_SESSION['uid'] = $row[0]; 
      } 
     } 
} 
    } 

그리고 참조

, 그는 로그인 스크립트입니다.

<?php 

if(!isset($_SESSION['uid'])) 
{ 
    if(!isset($_GET['mode'])) 
    { 
    $user = new user($db); 
    ?> 
<style type='text/css'> 
table { background-color: #666; padding: 1%; width: 20%; margin: 0 auto; } 
table th { background-color:#ccc; } 
table td { padding: 3%; background-color: #f1f1f1; font-weight: bold;} 
</style> 
<form method='post' action='login.php?mode=set'> 
<table cellpadding="0" cellspacing="0"> 
<tr> 
<th colspan='3'><h3>Citizen Login</h3></th> 
</tr> 
<tr> 
    <td>Username</td><td>:</td><td><input type='text' name='username' id='username'></td></tr> 
<tr> 
    <td>Password</td><td>:</td><td><input type='password' name='password' id='password'></td> 
</tr> 
<tr><th colspan='3'><input type='submit' /></th></tr> 
<tr><th colspan='3'><span style='font-size: 12px;'>Don't have an account? <a href='register.php'>Register Today!</a><br /> Forgotten Password/Username?</th> 
</tr> 
</table> 
</form> 
<?php 
    } 
    else 
    { 
    include($_SERVER['DOCUMENT_ROOT'].'/includes/constants.php'); 
    $user = new user($db); 
    $user->setSession($_POST['username'], $_POST['password']); 
    echo $user->error; 
    } 
} 
else 
{ 
    header("location:index.php"); 
} 
?> 
+2

우리에게 당신의 질문은 무엇입니까? 또한 문제를 설명하는 데 필요한 최소한의 코드 만 다듬을 수 있습니까? –

+1

"여기 내 코드가 전부 있으니 고쳐주세요."라는 질문은 실제로 그런 종류의 질문이 아닙니다. 이 질문에 대한 답은 미래의 방문자를 도울 가능성이 적습니다. – cdhowie

+0

나는 내 질문에 명백하게 명확하게 대답하지 않았다. 암호가 선택되지 않은 이유는 무엇입니까? 그게 내가 알고 싶은 전부 야. 비밀 번호 암호화가 작동하기 때문에 비밀 번호는 SQL에 전달됩니다 (내가 아는 한 적어도 오류가 없음) SQL은 사용자 이름을 선택할 수 있지만 암호를 선택하지는 않습니다. – Gmz1023

답변

0

문제를 해결했습니다. DB를의 암호 필드 길이가 긴 충분하지 않았다.

관련 문제