簡體   English   中英

這兩行PHP代碼的含義是什么?

[英]What's the meaning of these two lines of PHP code?

如果用戶在登錄頁面的“密碼”和“登錄”字段中輸入正確的信息,我目前正在編寫腳本來登錄用戶。 腳本工作得很好,但是我實際上不知道這兩行代碼對整體用戶體驗意味着什么,以及這樣做的意義。

我即將參加考試,我必須解釋代碼的含義,如果你們通過解釋下面兩行代碼的作用來幫助我,那將是絕對令人驚訝的。 這是完整的腳本:

<?php  

require('db_connect.php');

if (isset($_POST['user_id']) and isset($_POST['user_pass'])) {

    $username = $_POST['user_id'];
    $password = $_POST['user_pass'];

    $query = "SELECT * FROM dataforlogin WHERE username='$username' and password='$password'";

    $result = mysqli_query($connection, $query) or die(mysqli_error($connection));
    $count = mysqli_num_rows($result);

    if ($count == 1) {

        header("location: ../staudal/dashboard/index.php");

    } else {

        echo "Fail";

  }
}

?>

我難以理解的兩行代碼是:

$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
$count = mysqli_num_rows($result);

他們做什么,為什么?

這是一個很好的問題,因為根據現代安全性和應用程序設計標准,這些行大多是錯誤的或無用的。 在兩行代碼中可能出現如此多的錯誤之前,我從未想到過。

這應該是這樣

$stmt = $mysqli->prepare("SELECT * FROM dataforlogin WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result= $stmt->get_result()
$user = $result->fetch_assoc();

if ($user && password_verify($password, $user['password']))
{
    // write some info into the session
    header("location: ../staudal/dashboard/index.php");
    exit;
} else {
    echo "invalid";
}
  • 在第一行中,我們正在准備帶有問號的sql查詢,該問號放置在變量應到達的位置(因此稱為占位符)。
  • 在第二行中,我們將實際變量綁定到占位符,因此它將被發送到與查詢分開的mysql服務器,並且它們將無法干預。
  • 然后查詢將被實際執行。
  • 那么我們得到的mysqli_result變量,對於舊mysql或新mysqli查詢的所有用戶都很熟悉-查詢返回的實際數據源。
  • 那么我們正在嘗試獲取選定的行。
  • 然后我們同時檢查兩件事,
    • 我們的查詢是否返回任何行
    • 如果是,則從表單發送的密碼是否與使用password_verify()函數存儲在數據庫中的密碼相同
  • 其余與代碼中相同,除了兩點
    • 在重定向用戶之前,您應該在會話中寫入一些有關他們的信息,以便在其他頁面上識別他們
    • 最好在發送Location標頭后添加exit

希望這些解釋對您的老師足夠

認真地講,這個問題應該提高人們對PHP教育狀況的認識。 無論是在線還是離線,大多數資源都在教授PHP3,但對於不推薦使用的功能僅作了一些小改動。 但是這種方法在很多方面都是錯誤的,但仍保持不變。

  • $result = mysqli_query($connection, $query) or die(mysqli_error($connection));
  • WHERE id = ? 這將執行MySQL查詢,例如SELECT * FROM WHERE id = ? 然后保存結果。 如果查詢失敗,則返回錯誤消息。

  • $count = mysqli_num_rows($result);
  • 這僅返回查詢返回的行數。

    首先,我想說,請使用准備好的陳述。

    $result = mysqli_query($connection, $query) or die(mysqli_error($connection));
    

    mysqli_query()函數對數據庫執行查詢,並且$connection變量打開與您已在db_connect.php中創建的MySQL服務器的新連接,並檢查是否已建立連接。 否則, die()函數將運行。 它用於打印消息並退出當前的php腳本。

    $count = mysqli_num_rows($result);
    

    mysqli_num_rows()函數將返回結果集中的行數,並將該數存儲到$count變量中。

    希望這對您有幫助

    我是初級開發人員,但希望此答案對您的代碼有所幫助:

    1. $ result = mysqli_query($ connection,$ query)或die(mysqli_error($ connection));

      • $ result是一個php變量

      • mysqli_query($ connection,$ query)表示mysqli_query將使用db_connect.php中聲明的數據庫連接數據庫來運行查詢[$ query =“ SELECT * FROM dataforlogin WHERE用戶名='$ username'和密碼='$ password' “;]

      • 或死(mysqli_error($ connection)); 表示如果mysqli_query未找到指定的數據庫或表,在這種情況下(dataforlogin),它將顯示在db_connect.php中指定的連接錯誤。

    2. $ count = mysqli_num_rows($ result);

      • $ count是一個php變量

      • mysqli_num_rows($ result); 表示在運行mysqli_query($ connection,$ query)時,$ count等於在$ result的表(dataforlogin)中找到的行數。

    注意:請避免使用---或die(mysqli_error($ connection)行,因為這可能會阻止頁面加載,因此沒有必要。

    暫無
    暫無

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

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