-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");
}
?>
우리에게 당신의 질문은 무엇입니까? 또한 문제를 설명하는 데 필요한 최소한의 코드 만 다듬을 수 있습니까? –
"여기 내 코드가 전부 있으니 고쳐주세요."라는 질문은 실제로 그런 종류의 질문이 아닙니다. 이 질문에 대한 답은 미래의 방문자를 도울 가능성이 적습니다. – cdhowie
나는 내 질문에 명백하게 명확하게 대답하지 않았다. 암호가 선택되지 않은 이유는 무엇입니까? 그게 내가 알고 싶은 전부 야. 비밀 번호 암호화가 작동하기 때문에 비밀 번호는 SQL에 전달됩니다 (내가 아는 한 적어도 오류가 없음) SQL은 사용자 이름을 선택할 수 있지만 암호를 선택하지는 않습니다. – Gmz1023