我有一个包含四个条目的数据库,我只是想读取数据库中的所有条目。但无论我尝试什么,第一个条目都不会出现。
select * from userdata
的输出:
+-----------+-----------+ | username | password | +-----------+-----------+ | admin | admin | | arush | arush | | root | root | | superuser | superuser | +-----------+-----------+
我的PHP代码输出:
arush arush root root superuser superuser SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY...This Completed
PHP代码:
$query = mysqli_query($dbc,"SELECT * FROM userdata")
or die(mysql_error());
$row = mysqli_fetch_array($query);
while($row = mysqli_fetch_array($query))
{
echo $row['username'] . " " . $row['password'];
echo "\n";
}
if(!empty($row['username']) and !empty($row['password']))
{
$_SESSION['username'] = $row['password'];
echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE...";
}
else
{
echo "SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY...";
}
正如我想的那样,因为第一行没有显示或空白,!empty($row['username']) and !empty($row['password'])
条件检查也失败了。
p.s:抱歉,如果它似乎是一个毫无意义的问题,我对PHP来说是全新的,并且无法找到任何相对类似的问题。
答案 0 :(得分:1)
您连续两次致电$row = mysqli_fetch_array()
,在打印之前覆盖第一条记录。这就是为什么“管理员”永远不会出现的原因。
$row = mysqli_fetch_array($query); // this puts the admin record in $row
while($row = mysqli_fetch_array($query)) // this overwrites $row with the next record (root)
您不需要此代码段中的第一行,因为它会在输入while
循环体之前执行并检查。
答案 1 :(得分:1)
认为你需要:
1)使用||相反'或'和&&而不是'和'
2)使用mysqli_fetch_assoc而不是mysqli_fetch_array
3)你需要创建自己的变量,如$ username,$ password,然后,在迭代时进行检查,如果是真的 - 为这些变量分配用户名和密码。
在迭代之后输入类似的内容:
if(strlen($row['username']) > 0 && strlen($row['password']) > 0)
代替
if(!empty($row['username']) and !empty($row['password']))
4)使用简单的调试,如:var_dump($ variable);死('调试点');
最后,调试一切。如果在迭代器之后调试行,您将看到$ row变量等于null,因此您会收到错误。 (将来:xdebug将成为您在程序调试中最好的朋友)