簡體   English   中英

簡單的PHP / MYSQL登錄代碼僅適用於某些人/客戶

[英]Simple PHP/MYSQL Log in code only working for some people/clients

TL:DR:此代碼對某些人有用,它可以執行,登錄並可以正常工作,但是對於某些人來說,它僅顯示0 results (//在Example1的第二個php代碼中進行了注釋)

我現在使用的是簡單的登錄表單,情況非常令人沮喪,問題是我的“網絡應用”登錄表單僅對某些人有效,而對某些人卻無效。

我只在這里發布了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
  • 他們都被賦予了相同的用戶名和密碼登錄。

我真的希望有人能啟發我這里發生的事情,並希望能指導我解決這個問題。

附注-經過5天不間斷的Google搜索解決方案及其原因后,我來到了Stackoverflow,但老實說我已經用光了搜索詞,無法立即搜索。

就像您說的那樣,代碼看起來不錯,因此您必須確切地找到為什么它返回0結果的原因:也許$user變量為空,它具有意外值,DB調用失敗,等等。

在PHP中,一個不錯的選擇是創建一個包含所有相關信息的日志(只是一個文本文件,例如標准的PHP日志),您應該包括:

  • 有關用戶的信息:至少具有用戶代理和IP。
  • 有關操作的信息:在您的情況下,操作的結果(成功/錯誤), $user的值(最好是$_SESSION數組的var_dump() )和DB調用的結果(均為mysqli->infomysqli->error )。

我還會記錄成功的操作,因為有時它們可​​以提供有關失敗模式的線索。

一旦有了第一個線索,就可以在日志中添加更多信息:例如,如果問題是$_SESSION['login_value_user']為空,請在使用或更改會話的所有頁面中記錄會話值,以查找何時價值丟失。

最后一點,您應該使日志功能盡可能強大,這樣,例如,當您嘗試記錄一些尚未定義的變量時,就不會引入額外的錯誤或丟失某些條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM