Не могу получить переменную из MySQL, используя PHP - PullRequest
0 голосов
/ 16 ноября 2018

Мне нужно получить некоторые данные из БД MySQL (они, безусловно, существуют), чтобы продолжить и проанализировать их.Итак, что у меня есть в моем коде:

  if (count($errors) == 0)  
$password = md5($password); 
$query = "SELECT username, password, email FROM trackowners WHERE username='$username' AND password='$password'"; 
$results = mysqli_query($db, $query); 
if (mysqli_num_rows($results) == 1) {
  ///////////
  $_SESSION['username'] = $username;
  $_SESSION['success'] = "You are now logged in";
  $_SESSION['email'] = $email;
  header('location: index.php');
}else {
  array_push($errors, "Wrong username/password combination");
} }

Затем я пытаюсь использовать переменные $ _SESSION ['username'] и отправить по электронной почте одну:

<?php  if (isset($_SESSION['username'])) : ?>
    <p>Welcome <strong><?php echo $_SESSION['username']; ?></strong> // Here are your profile settings.</p>

    <p> <a href="index.php?logout='1'" style="color: red;">logout</a> </p>
<?php endif ?>

  <?php  if (isset($_SESSION['username'])) : ?>
  <p>Your e-mail<strong><?php echo $_SESSION['email']; ?></strong> //</p>
<?php endif ?>

И вот я получаюПеременная username, но я ничего не могу получить из переменной электронной почты.В чем проблема?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

У меня много вопросов по поводу вашего кода (не используйте MD5 для хеширования паролей, вместо этого используйте PHP встроенный метод хеширования ).Но продолжить на посту @ Nicolas

Отредактировано, чтобы последовать совету Джея Бланшара

// Make sure your session is started
session_start();    

if (count($errors) == 0){
    // Make sure to store your passwords with the same function
    $password = password_hash($password, PASSWORD_DEFAULT ); 
    // Prepare your query with placeholders
    $query = $pdo->prepare('SELECT username, password, email FROM trackowners WHERE username=? AND password=?');
    // Execute your query
    if($query->execute(array($username, $password)))
    {
        // Loop through result set
        while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
            $_SESSION['username'] = $row['username'];
            $_SESSION['email'] = $row['email'];
            $_SESSION['success'] = "You are now logged in";     
        }
        header('location: index.php');  
    }
    else
    {
        array_push($errors, "Wrong username/password combination"); 
    }
}

Также, как упомянуто @Nicolas, прочитано в Подготовленозаявления для предотвращения инъекций sql.

0 голосов
/ 16 ноября 2018

Вы никогда не получите доступ к данным из результатов вашего запроса.Вам нужно использовать переменную $result, чтобы установить переменную сессий следующим образом.

if (count($errors) == 0){
$password = md5($password); 
$query = "SELECT username, password, email FROM trackowners WHERE username='$username' AND password='$password'"; 
$results = mysqli_query($db, $query); 
if (mysqli_num_rows($results) == 1) {
  // Here i'm accessing the results data from your query
  $data = mysqli_fetch_assoc($result)[0];
  //The data is an associative array. 
  $_SESSION['username'] = $data['username'];
  $_SESSION['success'] = "You are now logged in";
  $_SESSION['email'] = $data['email'];
  header('location: index.php');
}else {
  array_push($errors, "Wrong username/password combination");
} 
}

Я также хотел бы отметить, что ваш код уязвим для внедрения SQL.Вы должны попытаться связать свои параметры.

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