Мой полный код выглядит так.Как видите, я использовал 2-3 запроса для 1 процесса входа.Я буду рад, если вы поможете мне оптимизировать процесс (возможно, количество запросов можно будет уменьшить):
foreach ($_POST as $k => $v)
$$k = $v;
$stmt = $db->prepare("SELECT u.id, u.fname, u.lname, u.mname, u.level, u.pass, u.salt, u.approved, u.ban, u2.logged_in FROM `users` AS u, `ulog` AS u2 WHERE u.email=? AND u2.user_id=u.id") or die($db->error);
$stmt->bind_param("s", $email) or die($stmt->error);
$stmt->execute() or die($stmt->error);
$stmt->store_result();
if ($stmt->num_rows > 0) {
$stmt->bind_result($id, $fname, $lname, $mname, $level, $db_pass, $salt, $approved, $ban, $logged_in) or die($stmt->error);
$stmt->fetch() or die($stmt->error);
if ($logged_in == 0) {
$fullname = $lname . ' ' . $fname . ' ' . $mname;
$stmt->close();
if ($approved == 1) {
if ($ban == 0) {
$hash = hash('sha256', $salt . hash('sha256', $pass));
if ($hash == $db_pass) {
$ip = ip2long($ip);
if (isset($rememmber) && $rememmber == "on") {
$ckey = GenKey();
$stmt = $db->prepare("INSERT INTO `ulog` (`user_id`, `signin_time`,`ip`, `logged_in`, `ckey`, `ctime`) VALUES (?, NOW(), ?, 1, ?, NOW())") or die($db->error);
$stmt->bind_param("iis", $id, $ip, $ckey) or die($stmt->error);
validateUser($id, $fullname, $level, $ckey, $rememmber);
} else {
$stmt = $db->prepare("INSERT INTO `ulog` (`user_id`, `signin_time`,`ip`, `logged_in`) VALUES (?, NOW(), ?, 1)") or die($db->error);
$stmt->bind_param("ii", $id, $ip) or die($stmt->error);
validateUser($id, $fullname, $level);
}
$stmt->execute() or die($stmt->error);
$stmt->close();
response('success', 'Daxil oldunuz. Səhifənizə yönləndiriləcəksiniz.');
exit;
} else {
response('error', 'Şifrə düzgün deyil');
die();
}
} else {
response('error', 'Bu istifadəçi müvəqqəti olaraq ban edilib.');
die();
}
} else {
response('error', 'Bu email aktiv edilməyib');
die();
}
} else {
response('error', 'Siz bir dəfə daxil olmusunuz.');
die();
}
} else {
response('error', 'Bu email adresi ilə istifadəçi bazamızda mövcud deyil.');
die();
}