Извините, если это было задано, но я понятия не имею, что искать, чтобы найти ответ.
Я только начинаю изучать 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, я получаю правильно отформатированное сообщение "Привет, Джейсон, вы вошли в систему".
Эти две переменные должны быть одинаковыми... почему одна работает, а другая - нет?
Проверьте поток управления:
У вас есть цикл while while($row = mysqli_fetch_array($query))
поэтому вы назначаете новое значение $row
и проверяете его. Если он оценивает значение false (т.е. Больше строк), вы прерываете цикл.
Это означает, что после цикла $row
больше не имеет действительного содержимого. Ваши сохраненные значения (например, $dbfirstname
) относятся к предыдущей итерации цикла и, следовательно, содержат достоверные данные.