如何调用主键的值

问题描述 投票:-1回答:1

在我的系统....登录后我想通过他们的护照号显示用户档案。我将护照号码设置为主键,护照号码的类型是我的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) {

   ?>         
php
1个回答
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)。

© www.soinside.com 2019 - 2024. All rights reserved.