[英]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);
他們做什么,為什么?
這是一個很好的問題,因為根據現代安全性和應用程序設計標准,這些行大多是錯誤的或無用的。 在兩行代碼中可能出現如此多的錯誤之前,我從未想到過。
mysqli_query()
將查詢發送到MySQL服務器。 但是, 這不是您使用variables運行mysql查詢的方式 。 必須使用預備語句 。 die(mysqli_error($connection))
的目的是,如果查詢執行不停止執行代碼,並揭示了MySQL錯誤(特別是or die()
做很多有趣的事情,我有一個解釋這篇文章 , 但不用PHP報告mysql錯誤的方式 , 必須改用一個配置選項 ,從編寫的代碼量到更好的用戶體驗,這在許多方面都會更好。 mysqli_num_rows($result)
告訴您返回了多少行查詢。 本質上無用的函數, 您始終可以使用返回的數據代替 WHERE username='$username' and password='$password'
不是您在數據庫中檢查密碼的方式 。 必須從數據庫中檢索哈希密碼,然后使用password_verify()函數進行檢查 這應該是這樣
$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";
}
mysqli_result
變量,對於舊mysql或新mysqli查詢的所有用戶都很熟悉-查詢返回的實際數據源。 exit
。 希望這些解釋對您的老師足夠
認真地講,這個問題應該提高人們對PHP教育狀況的認識。 無論是在線還是離線,大多數資源都在教授PHP3,但對於不推薦使用的功能僅作了一些小改動。 但是這種方法在很多方面都是錯誤的,但仍保持不變。
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
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
變量中。
希望這對您有幫助
我是初級開發人員,但希望此答案對您的代碼有所幫助:
$ 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中指定的連接錯誤。
$ 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.