У меня есть сценарий входа в систему, и я хочу вставить последний вход в таблицу участников и обновлять его каждый раз, когда член входит в систему, но у меня возникают некоторые проблемы. Последний логин не вставляется каждый раз, когда пользователь входит в систему. Вот мой код
if(isset($_POST['submit'])){ $username = $_POST['username']; $password = $_POST['password']; if($user->login($username,$password)){ $_SESSION['username'] = $username; try{ $stmt = $db->prepare('UPDATE admin SET login_date = now()'); } catch (PDOExeception $e){ $error[] = $e->getMessage(); } header('Location: index.php'); exit; } else { $error[] = '<div class="alert alert-danger fade in text-center"> <a href="#" class="close" data-dismiss="alert">×</a> <strong>Error!</strong> Wrong username or password or your account has not been activated. </div>'; } }
WHERE
для имени пользователя Начало сеанса
session_start(); if($user->login($username,$password)) { $_SESSION['username'] = $username; try { $stmt = $db->prepare('UPDATE admin SET login_date = now() WHERE username =:username'); $stmt->bindValue(':username', $username); $stmt->execute(); $stmt->CloseCursor(); $stmt=null; } catch (PDOExeception $e) { $error[] = $e->getMessage(); } header('Location: index.php'); exit; } else { $error[] = '<div class="alert alert-danger fade in text-center"> <a href="#" class="close" data-dismiss="alert">×</a> <strong>Error!</strong> Wrong username or password or your account has not been activated. </div>'; }
Кажется, что есть два ошибки с указанным выше кодом.
У UPDATE
нет предложения where, поэтому он обновит login_date
для всех строк в таблице admin
.
Вы создаете объект PDOStatement, вызывая метод prepare()
в $db
но никогда не выполняйте оператор. Вам нужно выполнить оператор, вызвав $stmt->execute()
после объявления $stmt
.
Ваш код должен выглядеть примерно так:
if(isset($_POST['submit'])){ $username = $_POST['username']; $password = $_POST['password']; if($user->login($username,$password)){ $_SESSION['username'] = $username; try{ $stmt = $db->prepare('UPDATE admin SET login_date = now() WHERE x = y'); $stmt->execute(); } catch (PDOExeception $e){ $error[] = $e->getMessage(); } header('Location: index.php'); exit; } else { $error[] = '<div class="alert alert-danger fade in text-center"> <a href="#" class="close" data-dismiss="alert">×</a> <strong>Error!</strong> Wrong username or password or your account has not been activated. </div>'; } }
if(!isset($_SESSION)){ session_start(); } $username = $_SESSION['username']; require_once('connection.php'); $sql = "INSERT INTO [test].[dbo].[user_log] ([username] ,[login_date] ) VALUES ('$_SESSION[username]' ,GETDATE() )"; $result = sqlsrv_query($conn,$sql); if ($result === false ) { echo "Error in query "; exit(); }
У меня была такая же проблема, после чего я решил, используя простые коды, как те