Показать имя пользователя с помощью php - PullRequest
0 голосов
/ 18 января 2019

У меня проблемы с отображением имени зарегистрированного пользователя.

Я пытаюсь показать правильное имя пользователя, который вошел в систему. это сеанс, который был установлен для установки имени пользователя (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
} } ?>

Но это не делает трюк, это даст мне это сообщение об ошибке:

Неустранимая ошибка: необработанное исключение PDO: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'jan' в 'where clause' в C: \ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php: 55 Трассировка стека: # 0 C: \ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php (55): PDO-> запрос ('SELECT *) FROM 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

UPDATE

следующий код работает наполовину.

$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 будет строкой, а массив указан в C: \ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php в строке 61

Предупреждение. В foreach () указан неверный аргумент C: \ xampp \ htdocs \ Rent-a-Car \ pages \ topmenu.php в строке 61

Я знаю, в чем проблема (что она возвращает только одну вещь), но я не знаю, что делать дальше, чтобы получить правильное имя (Voorletters, Tussenvoegsel) для пользователя.

1 Ответ

0 голосов
/ 18 января 2019

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);
...