简单的PHP / MYSQL登录代码仅适用于某些人/客户

时间:2017-09-09 22:44:54

标签: php mysql validation

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();

?>

所以,为了非常清楚,这段代码在我的托管服务器上进行测试并在以下位置进行测试:

  • 多个设备和不同的互联网提供商;
  • 在芬兰,瑞士和法国等多个国家/地区
  • 跨10个测试设备/用户:其中5个可以登录并完全按预期查看网站,其中5个不能,并且收到0 results response
  • 所有测试用户都拥有一系列不同的设备,包括S6 edge,S7 edge,iPhone 6和iPhone 7
  • 所有人都使用相同的用户名和密码登录。

我真的希望有人能够告诉我这里发生的事情,希望能指导我解决这个问题。

PS - 经过5天不间断的谷歌搜索解决方案后,我来到Stackoverflow并导致了这一点,但我真的没有用完搜索条件来搜索。

1 个答案:

答案 0 :(得分:0)

正如你所说,代码看起来很好,所以你必须找到确切的原因它返回0结果:可能$user变量是空的,它有一个意外的值,数据库呼叫失败,等等。

在PHP中,一个好的选择是创建一个包含所有相关信息的日志(只是一个文本文件,如标准的PHP日志),你应该包括:

  • 有关用户的信息:至少用户代理和IP。
  • 有关操作的信息:在您的情况下,操作的结果(成功/错误),$user的值(更好var_dump()数组的$_SESSION),以及数据库调用的结果(mysqli->infomysqli->error)。

我还会记录成功的操作,因为有时它们可​​以提供有关失败模式的线索。

获得第一条线索后,请在日志中添加更多信息:例如,如果问题是$_SESSION['login_value_user']为空,请在使用或更改会话的所有页面中记录会话值以查找当价值丢失时。

作为最后一点,您应该使您的日志功能尽可能健壮,因此,如果您尝试记录某些尚未定义的变量,则不会引入额外错误或丢失某些条目。