TL:DR:此代码,对于某些人来说,它可以执行,登录并且工作正常,但是对于某些人来说,它只显示0 results
(//在第2次评论php代码与Example1)
我现在遇到一个非常令人沮丧的情况,我所谓的简单登录形式,问题是我的网络应用程序'登录表单适用于某些人,但对某些人来说并不适用。
我在这里只发布了我发现不能按预期工作的php代码。请注意,由于我努力寻找可能的原因并通过Google搜索结果解决问题,因此此代码经历了很多更改。因此,我已经评论过哪些线路,我基本上不知道为什么我这样做,但我只是这样做,因为我在某处阅读它可能有所帮助。
这两行代码都包含在两个文件的文件的最开头。
<?php session_start();
ob_start();
?>
验证php:
<?php
$servername = "localhost";
$username = "****";
$password = "****";
$dbname = "*****";
// Get values
$user = $_POST['username'];
$pwd = $_POST['password'];
//pass values
$_SESSION['login_value_user'] = $_POST['username'];
$_SESSION['login_value_password'] = $_POST['password'];
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT username, password FROM users WHERE username='$user' AND password='$pwd'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if($user != 'lloki'){
header('Location: http://bluebotdev.com/nav/workers.php');
ob_get_clean(); // questionable google search solution
exit();// questionable google search solution
} else{
header('Location: http://bluebotdev.com/php/lloki.php');
ob_get_clean(); // questionable google search solution
exit(); // questionable google search solution
}
}
} else {
echo "
<div id='error'>
<div class='container-fluid'>
<div class='row'>
<div class='col-xs-10'>
<a class='btn btn-danger extra-padding' href='../index.html'>Error! Wrong password or username!</a>
</div>
</div>
</div>
</div> ";
}
$conn->close();
?>
验证php代码后:
<?php
$servername = "localhost";
$username = "****";
$password = "*****";
$dbname = "*****";
// Get values
$user = $_SESSION['login_value_user'];
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, name, surname,phone,address,email,workhours,status FROM workers WHERE name='$user' ";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table class='table'><tr><th>ID</th><th>Name</th><th>Surname</th><th>Phone</th><th>Address</th><th>E-mail</th><th>Status</th></tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["id"]."</td><td>".$row["name"]."</td><td>".$row['surname']."</td><td>".$row['phone']."</td><td>".$row['address']."</td><td>".$row['email']."</td><td>".$row['status']."</td></tr>";
$dummy_name = $row['name'];
$dummy_surname = $row['surname'];
}
echo "</table>";
} else {
echo "0 Results"; //Example 1
}
session_destroy(); // questionable google search solutions
$conn->close();
?>
所以,为了非常清楚,这段代码在我的托管服务器上进行测试并在以下位置进行测试:
0 results response
我真的希望有人能够告诉我这里发生的事情,希望能指导我解决这个问题。
PS - 经过5天不间断的谷歌搜索解决方案后,我来到Stackoverflow并导致了这一点,但我真的没有用完搜索条件来搜索。
答案 0 :(得分:0)
正如你所说,代码看起来很好,所以你必须找到确切的原因它返回0结果:可能$user
变量是空的,它有一个意外的值,数据库呼叫失败,等等。
在PHP中,一个好的选择是创建一个包含所有相关信息的日志(只是一个文本文件,如标准的PHP日志),你应该包括:
$user
的值(更好var_dump()
数组的$_SESSION
),以及数据库调用的结果(mysqli->info
和mysqli->error
)。我还会记录成功的操作,因为有时它们可以提供有关失败模式的线索。
获得第一条线索后,请在日志中添加更多信息:例如,如果问题是$_SESSION['login_value_user']
为空,请在使用或更改会话的所有页面中记录会话值以查找当价值丢失时。
作为最后一点,您应该使您的日志功能尽可能健壮,因此,如果您尝试记录某些尚未定义的变量,则不会引入额外错误或丢失某些条目。