Почему не отображаются данные php mysql

Пытаюсь отобразить данные на index.php, имя пользователя работает нормально, электронная почта не отображается.

server.php

$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$results = mysqli_query($db, $query);
if (mysqli_num_rows($results) == 1) {


  $_SESSION['email'] = $email;
  $_SESSION['username'] = $username;
  $_SESSION['success'] = "You are now logged in";
  header('location: index.php');

index.php

<?php
// Echo session variables that were set on previous page
echo "Your email is: " . $_SESSION['email'] . "<br>";
echo "Your username is: " . $_SESSION['username'] . "";
?>
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
458
3

Ответы 3

Вы не получаете результатов после запроса данных. Используйте mysqli_fetch_assoc

Примечание, что я применил mysqli_real_escape_string к параметрам условий вашего WHERE для проблем, связанных с внедрением SQL. Хотя это не надежное решение!

Измените на следующее:

$query = "SELECT * 
          FROM users 
          WHERE username = '" . mysqli_real_escape_string($db, $username) . 
          " AND password = '" . mysqli_real_escape_string($db, $password) . "'";
$results = mysqli_query($db, $query);
if (mysqli_num_rows($results) == 1) {

  $row = mysqli_fetch_assoc($db, $results);
  $_SESSION['email'] = $row['email'];
  $_SESSION['username'] =  $row['username'];
  $_SESSION['success'] = "You are now logged in";

Пожалуйста, прочтите на как предотвратить проблемы, связанные с SQL-инъекцией, с помощью подготовленных операторов.

mysqli_real_escape_string()не буду решает проблемы внедрения SQL. Для этого вы должны использовать подготовленные заявления.
Zeke 16.09.2018 16:25

@Zeke Я уже добавил этот бит (редактировал перед вашим комментарием)

Madhur Bhaiya 16.09.2018 16:26

@Zeke опечатка! :-)

Madhur Bhaiya 16.09.2018 16:29

Я до сих пор считаю, что mysqli_real_escape_string() даже не стоит упоминать, потому что он ничего не решает. Если вы собираетесь рекомендовать заранее подготовленные утверждения, просто напишите их как таковые. Но по крайней мере вы ответили на вопрос. Я также хотел бы убедиться, что выбрана база данных, поскольку я не вижу mysqli_select_db() (или mysqli::select_db()) где-либо в коде, а запрос SQL также не указывает какую-либо базу данных.

Zeke 16.09.2018 16:34

Предупреждение: mysqli_real_escape_string () ожидает ровно 2 параметра, 1 из которых указан в C: \ xampp2 \ htdocs \ server.php в строке 81 Предупреждение: mysqli_real_escape_string () ожидает ровно 2 параметра, 1 из которых указан в C: \ xampp2 \ htdocs \ server.php на строка 82 Предупреждение: mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, логическим значением, заданным в C: \ xampp2 \ htdocs \ server.php в строке 84

PHP Newbie 16.09.2018 16:42

@PHPNewbie, если вы собираетесь использовать эту функцию, добавьте переменную $db в качестве первого параметра. Как это: mysqli_real_escape_string($db, $username).

Zeke 16.09.2018 17:15

@Zeke, спасибо за ваше время, по-прежнему появляется одна ошибка ~> Предупреждение: mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, логическим значением, заданным в C: \ xampp2 \ htdocs \ server.php в строке 84, вероятно, в запросе есть ошибка но мои новенькие глаза не видят этого

PHP Newbie 16.09.2018 17:24

@PHPNewbie проверьте обновленный ответ. Я так привык использовать объектно-ориентированный стиль; это процедурный стиль; пропустил $db во многих местах. Помимо перехода к подготовленным операторам, вам также следует рассмотреть возможность использования объектно-ориентированного стиля.

Madhur Bhaiya 16.09.2018 17:49

@PHPNewbie не надо использует переменную $db для mysqli_num_rows(). Передайте только результат SQL. Это явно указано в полученной вами ошибке.

Zeke 16.09.2018 18:07

Вы не получили электронное письмо с результатами, поэтому ваша переменная $ email имеет значение null. Если адрес электронной почты находится в вашей таблице пользователей, вам нужно будет назначить его из результатов.

Вы должны хотя бы показать, как решить эту проблему с помощью кода. И это не только $email, но и $username. Ваш ответ кажется неполным и расплывчатым.

Zeke 16.09.2018 16:38

Из вопроса «имя пользователя работает нормально, электронная почта не отображается». Значение имени пользователя, скорее всего, происходит из входного значения формы, поэтому оно не равно нулю. Я включил код в другие ответы, но решил, что это не всегда лучший ответ. Обычно лучше решать проблему самостоятельно, при необходимости с некоторой помощью, но не получать полное решение. По крайней мере, именно так я предпочитаю получать ответы на свои вопросы с определенным направлением, но не с полным решением. Я также понял, что некоторые вопросы могут исходить от студентов, которые хотят сделать за них домашнее задание.

kalinma 16.09.2018 17:02

Лучше я найду кодировщика, чтобы закончить свой проект.

PHP Newbie 16.09.2018 17:05

@PHP Newbie, ответ на ваш исходный вопрос находится в ответе Мадхура выше, поэтому вам не нужно тратить свои деньги. Думаю, это была шутка.

kalinma 16.09.2018 17:12

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

Zeke 16.09.2018 17:13

Ой, эй, я случайно проголосовал против вашего ответа около 34 минут назад, пожалуйста, отредактируйте его, чтобы я мог его отменить. Мне плохо, извини.

Zeke 16.09.2018 17:14

Это полный код, отображается $ username (проверено на разных пользователях)

if (isset($_POST['login_user'])) {
  $username = mysqli_real_escape_string($db, $_POST['username']);
  $password = mysqli_real_escape_string($db, $_POST['password']);

  if (empty($username)) {
    array_push($errors, "Username is required");
  }
  if (empty($password)) {
    array_push($errors, "Password is required");
  }

  if (count($errors) == 0) {
    $password = md5($password);
    $query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
    $results = mysqli_query($db, $query);
    if (mysqli_num_rows($results) == 1) {


      $_SESSION['email'] = $email;
      $_SESSION['username'] = $username;
      $_SESSION['success'] = "You are now logged in";
      header('location: index.php');
    }else {
        array_push($errors, "Wrong username or password combination");
    }
  }
}

это ваше решение? или вы редактировали вопрос?

Funk Forty Niner 17.09.2018 18:15

Другие вопросы по теме