如何调用主键的值

时间:2019-03-09 09:21:28

标签: php

在我的系统中。...登录后,我想通过其护照号码显示用户个人资料。我将护照号码设置为主键,并且我的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) {

   ?>         

1 个答案:

答案 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)。