Почему я не могу вывести переменную из массива?

1

Извините, если это было задано, но я понятия не имею, что искать, чтобы найти ответ.

Я только начинаю изучать PHP и делаю простой учебник, где я "вхожу в" базу данных (просто проверяя, соответствует ли электронная почта и пароль тому, что не хранится, никакой фактический сеанс не создается).

У меня есть этот код:

<?php

include("connectToDb.php");
$loginEmail = $_POST['loginEmail'];
$loginPassword = $_POST['loginPassword'];

$query = mysqli_query($dbc, "SELECT * FROM users WHERE email='$loginEmail'");
$numrows = mysqli_num_rows($query);
if($numrows != 0)
{
    while($row = mysqli_fetch_array($query))
    {
        $dbemail = $row['email'];
        $dbpassword = $row['password'];
        $dbfirstname = $row['firstName'];
    }
    if($loginEmail == $dbemail)
    {
        if ($loginPassword == $dbpassword)
        {
            echo "Hi ".$row['firstName'].", you are now logged in.";
        }
        else
        {
            echo "login failed.";
        }
    }
}
mysqli_close($dbc);
?>

Но $ row ['firstName'] в выражении echo печатает как пустую строку: "Привет, вы вошли в систему". Если я использую тот же самый код, но возвращу $ row ['firstName'] с $ dbfirstname в выражении echo, я получаю правильно отформатированное сообщение "Привет, Джейсон, вы вошли в систему".

Эти две переменные должны быть одинаковыми... почему одна работает, а другая - нет?

Теги:

1 ответ

1
Лучший ответ

Проверьте поток управления:

У вас есть цикл while while($row = mysqli_fetch_array($query)) поэтому вы назначаете новое значение $row и проверяете его. Если он оценивает значение false (т.е. Больше строк), вы прерываете цикл.

Это означает, что после цикла $row больше не имеет действительного содержимого. Ваши сохраненные значения (например, $dbfirstname) относятся к предыдущей итерации цикла и, следовательно, содержат достоверные данные.

  • 0
    Ага. Это кажется довольно очевидным сейчас. Это то, что я получаю за вставку кода из учебника, не продумывая его до конца ... Есть ли какая-то особая причина, по которой автор учебника "нуждался" в использовании цикла while? Разве он не мог просто назначить $ row и двигаться дальше? В остальной части этого кода предполагается, что был найден только один экземпляр адреса электронной почты ... В любом случае, спасибо за ваш быстрый ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню