[英]Login Session read database variables
我的第一個 php 項目有問題。 一個朋友在這個學校項目上幫了我一點忙,我現在卡住了。
我想讀取我的數據庫值並在我的會話中使用它們。
這是我的 database.php 配置
<?php session_start(); ?>
<?php
//DB Config
define('DB_USER', 'user');
define('DB_PASS', 'password');
define('DB_NAME', 'KBZ');
define('DB_HOST', 'localhost');
$odb = new PDO('mysql: host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS);
//Other Configs
if (!empty($_SERVER['HTTP_CF_CONNECTING_IP']))
{
$userIP = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$userIP = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else if(!empty($_SERVER['HTTP_CLIENT_IP']))
{
$userIP = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$userIP = $_SERVER['REMOTE_ADDR'];
}
?>
然后我有一個 connection.php 文件
$user = new user($odb);
class user
{
var $odb;
function __CONSTRUCT($odb)
{
$this -> odb = $odb;
}
function loggedIn()
{
if (isset($_SESSION['username'], $_SESSION['ID']))
{
return true;
}
else
{
return false;
}
}
和我的 login.php
<form id="form-login" role="form" action="" method="post">
<?php
if (isset($_POST['LoginButton'])){
$DBchkusr = $odb -> prepare("SELECT * FROM `Users` WHERE `username` = :username AND `password` = :password LIMIT 1");
$DBchkusr -> execute(array(':username' => $username, ':password' => hash('SHA256', $password)));
$valid = $DBchkusr -> fetchColumn(0);
if ($valid)
{
$DBGetID = $odb -> prepare("SELECT `ID`, FROM `Users` WHERE `username` = :username LIMIT 1");
$DBGetID -> execute(array(':username' => $username));
$_SESSION['username'] = $username;
$_SESSION['ID'] = $DBGetID -> fetchColumn(0);
}
如何顯示成功登錄用戶的姓名? 是否可以像這樣將數據庫信息存儲為會話變量?
例如:
<?php> $_SESSION['Name']?>
!是的,當用戶成功登錄時使用它:
session_start();
$_SESSION["name"] = $name; // $name is received from database
現在在歡迎回來時使用它:
session_start();
echo "welcome back" . $_SESSION["name"];
編輯:在 if($valid) 語句中使用它:
if ($valid) {
$stmt = $odb->prepare("SELECT * FROM `Users` WHERE `username` = :username LIMIT 1");
if ($stmt->execute(array($username))) {
while ($row = $stmt->fetch()) {
// remove any of this session variables as you want
$_SESSION["id"] = $row["id"];
$_SESSION["username"] = $row["username"];
$_SESSION["password"] = $row["password"];
$_SESSION["name"] = $row["name"];
}
}
}
好消息。 我已經開始工作了。
if ($loginCheck)
{
$SQLGetID = $odb -> prepare("SELECT * FROM `Account` WHERE `username` = :username LIMIT 1");
$SQLGetID -> execute(array(":username" => $username));
if ($SQLGetID->execute(array($username))); { //had to add an ; and it worked
while ($row = $SQLGetID->fetch()) { // THIS IS LINE 92
$_SESSION["id"] = $row["ID"];
$_SESSION["username"] = $row["username"];
$_SESSION["password"] = $row["password"];
$_SESSION["vorname"] = $row["vorname"];
$_SESSION["nachname"] = $row["nachname"];
$_SESSION["email"] = $row["email"];
$_SESSION["handy"] = $row["handy"];
}
}
現在只有一個問題,我在登錄時不斷收到此錯誤,其余的現在可以顯示數據錯誤日志
剛修好。 解決方案:$SQLGetID -> execute(array(":username" => $username)); 沒有必要刪除那行代碼,它可以工作。 工作解決方案的 Gif
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.