使用php显示用户名

时间:2019-01-18 08:26:41

标签: php mysql username

我无法显示要登录的人的名字。

我正试图通过登录的用户显示正确的名称。 这是设置用户名(Gebruikersnaam)的会话:

$_SESSION["USER"] = $result["Gebruikersnaam"];

我正在尝试这样的事情:

$test = $_SESSION['USER'];
$sql = "
SELECT * 
  FROM klant 
 WHERE klant.Gebruikersnaam = $test
"; 

<?php
if(isset($_SESSION['USER'])) { 
    foreach ($db->query($sql) as $klant){ ?>
    <p><span class="glyphicon glyphicon-user"></span><?php echo $klant['Voorletters']. " " .$klant['Tussenvoegsel']. " " .$klant['Tussenvoegsel']; ?></p>
<?php
} } ?>

但这不是解决问题的方法,它会给我以下错误消息:

  

致命错误:未捕获的PDOException:SQLSTATE [42S22]:找不到列:   1054的'where子句'中的未知列'jan'   C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php:55堆栈跟踪:#0   C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php(55):PDO-> query('SELECT *   从k ...')#1 C:\ xampp \ htdocs \ Rent-a-Car \ pages \ auto.php(2):   include('C:\ xampp \ htdocs ...')#2 {main}被抛出   C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php,第55行

更新

以下代码有效一半。

$sql = "SELECT * FROM klant WHERE Gebruikersnaam = :name";

$stmt = $db->prepare($sql)
$stmt->execute([':name' => $test]);
$data = $stmt->fetch(\PDO::FETCH_ASSOC);

这可行,但是我现在唯一的问题是:

<?php
if(isset($_SESSION['USER'])) { 
        foreach ($db->query($data) as $klant){ ?>
        <p><span class="glyphicon glyphicon-user"></span><?php echo $klant['Voorletters']. " " .$klant['Tussenvoegsel']. " " .$klant['Tussenvoegsel']; ?></p>
<?php
} } ?>

这会给我这个错误:

  

警告:PDO :: query()期望参数1为字符串,第61行的C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php中给出的数组

     

警告:为中的foreach()提供了无效的参数   C:\ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php在第61行

我知道问题出在哪里(它只会给您带来一件事),但我不知道下一步该怎么做,因此我可以为用户获取正确的姓名(Voorletters,Tussenvoegsel)。

1 个答案:

答案 0 :(得分:5)

Column not found表示您正在使用数据库中不存在的某些列名。

问题在这里:

$sql = "SELECT * FROM klant WHERE klant.Gebruikersnaam = $test";

您的$test值为jan,它不是列名。因此它需要用引号引起来:[...] = '$test',但这是错误/不安全的方式。

对这些查询使用准备好的语句也可以解决SQL注入:

$sql = "SELECT * FROM klant WHERE Gebruikersnaam = :name";

$stmt = $db->prepare($sql)
$stmt->execute([':name' => $test]);
$data = $stmt->fetch(\PDO::FETCH_ASSOC);