2015-11-25 2 views
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); 
?> 

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

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

ответ

1

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

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

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

+0

Yup. Сейчас это кажется довольно очевидным. Это то, что я получаю для вставки кода из учебника, не думая об этом на протяжении всего пути ... Есть ли какая-то особая причина, по которой учебник должен «понадобиться» для использования цикла while? Разве он не мог просто назначить $ row и перешел? Остальная часть этого кода предполагает, что был только один найденный экземпляр адреса электронной почты ... В любом случае спасибо за ваш быстрый ответ. – Josh