Как получить имя пользователя из базы данных через идентификатор пользователя после входа в систему? - PullRequest
0 голосов
/ 27 июня 2019

login_script.php

<?php

require'common.php';

$email = $_POST['e-mail'];
$email = mysqli_real_escape_string($con, $email);
$password = $_POST['password'];
$password = mysqli_real_escape_string($con, $password);
$password = MD5($password);
// Query checks if the email and password are present in the database.
$query = "SELECT id, email FROM users WHERE email='" . $email . "' AND password='" . $password . "'";
$result = mysqli_query($con, $query)or die($mysqli_error($con));
$num = mysqli_num_rows($result);
// If the email and password are not present in the database, the mysqli_num_rows returns 0, it is assigned to $num.
if ($num == 0) {
  $error = "<span class='red'>Please enter correct E-mail id and Password</span>";
  header('location: login.php?error=' . $error);
} else {  
  $row = mysqli_fetch_array($result);
  $_SESSION['email'] = $row['email'];
  $_SESSION['user_id'] = $row['id'];
  header('location: products.php');
}

Я использую идентификатор сессии в форме входа. На самом деле я хочу получить имя пользователя из идентификатора пользователя, который находится в таблице пользователей после входа в систему. Как получить это? Таблица базы данных: пользователи (идентификатор, имя, адрес электронной почты, мобильный телефон, адрес, город)

Ответы [ 3 ]

5 голосов
/ 27 июня 2019

Предположим, что таблица "users" содержит поле типа "username".Таким образом, вы должны получить пользовательскую запись из таблицы «users», передав уникальный идентификатор, который хранится в сессии.

    login_script.php 

    <?php

    require'common.php';

    $email = $_POST['e-mail'];
    $email = mysqli_real_escape_string($con, $email);
    $password = $_POST['password'];
    $password = mysqli_real_escape_string($con, $password);
    $password = MD5($password);
    // Query checks if the email and password are present in the database.
    $query = "SELECT id, email FROM users WHERE email='" . $email . "' AND password='" . $password . "'";
    $result = mysqli_query($con, $query)or trigger_error(mysqli_error());
    $num = mysqli_num_rows($result);
    // If the email and password are not present in the database, the mysqli_num_rows returns 0, it is assigned to $num.
    if ($num == 0) {
      $error = "<span class='red'>Please enter correct E-mail id and Password</span>";
      header('location: login.php?error=' . $error);
    } else {  
      $row = mysqli_fetch_array($result);
      $_SESSION['email'] = $row['email'];
      $_SESSION['user_id'] = $row['id'];
      // -------------updated code-------------------
      $query = "SELECT * FROM users WHERE id =". $_SESSION['user_id'];
      $result = mysqli_query($con, $query)or die($mysqli_error($con));
      // your result contains the username value. As per the requirement fetch it
      //------------updated code end-----
      header('location: products.php');
    }
2 голосов
/ 27 июня 2019

Вот полный пример с подготовленными инструкциями:

require 'common.php';

// Query checks if the email and password are present in the database.
$stmt = mysqli_prepare($con, "SELECT `id`, `name`, `email`, `password` FROM `users` WHERE `email` = ? AND `password` = ?");
$stmt->bind_param('s', $_POST['e-mail'], md5($_POST['password']));
$stmt->execute();
$result = $stmt->get_result();

// If the email and password are not present in the database, the mysqli_num_rows returns 0, it is assigned to $num.
if ($result->num_rows === 0) {
    $error = "<span class='red'>Please enter correct E-mail id and Password</span>";
    header('location: login.php?error=' . $error);
} else {
    $row = $result->fetch_assoc());
    $_SESSION['email'] = $row['email'];
    $_SESSION['name'] = $row['name'];
    $_SESSION['user_id'] = $row['id'];
    header('location: products.php');
}

Примечание. Не используйте MD5 для хеширования пароля пользователя, используйте функцию password_hash ('sha256', PASSWORD_BCRYPT) для сохранения пароляпользователь при его создании!MD5 больше НЕ является безопасным!

Пример для регистрации пользователя:

$stmt = mysqli_prepare($con, "INSERT INTO `users` (`name`, `email`, `password` VALUES(?, ?, ?)");
$stmt->bind_param('s', $_POST['name'], $_POST['e-mail'], password_hash($_POST['password'], PASSWORD_BCRYPT));
...

Пример для проверки пароля:

$stmt = mysqli_prepare($con, "SELECT `id`, `name`, `email` FROM `users` WHERE `email` = ?");
$stmt->bind_param('s', $_POST['e-mail']);
$stmt->execute();
$result = $stmt->get_result();

// If the email and password are not present in the database, the mysqli_num_rows returns 0, it is assigned to $num.
if ($result->num_rows === 0) {
    $error = "<span class='red'>Please enter correct E-mail id and Password</span>";
    header('location: login.php?error=' . $error);
    exit;
} else {
    $row = $result->fetch_assoc());
    if (!password_verify($_POST['password'], $row['password']) {
        $error = "<span class='red'>Please enter correct E-mail id and Password</span>";
        header('location: login.php?error=' . $error);
        exit;
    }
    $_SESSION['email'] = $row['email'];
    $_SESSION['name'] = $row['name'];
    $_SESSION['user_id'] = $row['id'];
    header('location: products.php');
}
1 голос
/ 27 июня 2019
$query = "SELECT id, email FROM users where id='.$_SESSION['user_id'].'";

После успешного входа в систему вам необходимо использовать сеанс для извлечения details(id,email) из таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...