在我的系统中。...登录后,我想通过其护照号码显示用户个人资料。我将护照号码设置为主键,并且我的phpmyadmin数据库中此护照号码的类型为varchar。现在我不知道应该在全局GET变量中输入什么。我在括号中写了varchar,但未定义变量$ userid和第二行中的该如何写此命令getUserById。这是我的数据库的屏幕截图 enter image description here
这里是我的密码
<?php
if (isset($_GET['passport_IC'])) {
$userid=()$_GET['passport_IC'];
}
$user= new User();
?>
<div class="panel panel-default">
<div class="panel-heading">
<h2>User Profile<span class="pull-right"><a class="btn btn-info" href="index.php">Back</a></h2>
</div>
<div class="panel-body">
<div style="max-width: 600px; margin:0 auto">
<?php
$userdata=$user->getUserById($userid);
if ($userdata) {
?>
答案 0 :(得分:0)
如果您正在谈论管理面板,则可以采用这种方法,但是如果要在登录用户后显示用户个人资料,请不要使用GET变量。使用GET变量意味着任何登录的用户都可以尝试更改GET变量以尝试访问其他用户配置文件。您应该做的是在登录后保存某种会话变量。理想情况下,它甚至可以用作识别登录用户的主键(在您的示例中,这将是护照号码)。例如:
// login.php
session_start();
$_SESSION["userId"] = $passportIC;
完成后,您可以在个人资料页面中进行以下操作:
// user_profile.php
$passportIC = $_SESSION["userId"]; // or $_GET["userId"] if, in fact, this is an admin panel
// Run some kind of query (assumming $db is a valid PDO connection)
$stmt = $db->prepare("SELECT * FROM users WHERE passport_IC = :passport LIMIT 1");
$stmt->bindParam(':passport', $passportIC);
$stmt->execute();
// This query should always return 1 element
if ($stmt->rowCount !== 1) {
throw new \Exception("Logged in user not found in the database");
}
// Fetch user from the database
$user = $stmt->fetch();
$user
现在将用户的所有信息保存为数组,您现在可以根据需要在页面中使用它。
最后,请考虑使用数据库适配器进行数据库查询(即doctrine\dbal
),PSR-7库以不直接访问$ _GET和$ _POST超全局变量(即zend\zend-diactoros
),以及一个会话库,用于不直接访问$ _SESSION超全局变量(即zendframework/zend-session
)。