<?php$username = $_POST['username'];$password = $_POST['password'];if (strlen($username) ==0 || strlen($password) == 0) {?? ?echo "用戶名和密碼不能為空,<a href='login.htm'>點擊</a>重新輸入";}else{?? ?$link = mysqli_connect('localhost','root','','dis');?? ?if(!$link) die("數據庫連接失敗");?? ?$sql = "SELECT * FROM user WHERE username='{$username}' AND password='$password'";?? ?$result = mysqli_query($link, $sql);?? ?if(!$result) die("數據庫查詢錯誤".$sql);?? ?$rows = mysqli_num_rows($result);?? ?if ($rows == 1) {?? ??? ?$user = mysqli_fetch_array($result, MYSQLI_ASSOC);?? ??? ?// var_dump($user);?? ??? ?$uid = $user['uid'];?? ??? ?setcookie('login',1,time()+60*60);?? ??? ?setcookie('username', $username, time()+60*10);?? ??? ?setcookie('uid',$uid,time()+60*60);?? ??? ?header("Location:index.php");?? ?}else{?? ??? ?echo "用戶名與密碼匹配,請重新輸入";?? ?}}?>這是登陸的php,我不太懂這一部分??? if ($rows == 1) {?? ??? ?$user = mysqli_fetch_array($result, MYSQLI_ASSOC);?? ??? ?// var_dump($user);?? ??? ?$uid = $user['uid'];?? ??? ?setcookie('login',1,time()+60*60);?? ??? ?setcookie('username', $username, time()+60*10);?? ??? ?setcookie('uid',$uid,time()+60*60);}這段代碼是怎么將密碼和用戶對應起來,密碼不對是怎么驗證出來的呢?求助~~~TAT蟹蟹
1 回答
已采納

我是新手_請多指教
TA貢獻140條經驗 獲得超79個贊
首先mysqli_query針對select查詢執行的結果是返回符合$sql語句的結果集(也就是有多少條數據滿足用戶名與密碼與數據庫上的都相等)。
如果執行sql語句后沒有符合條件的結果集或者sql語句寫錯,$result都會為false,!取反為真執行數據庫查詢報錯。
如果執行sql語句有結果集,那么mysqli_num_rows這個函數是返回結果集中行的數量,也就是說$rows這個變量如果只有一條記錄符合要求的話(因為如果$rows不等于1意味著用戶名和密碼都一樣的人有多個記錄,就沒辦法確定具體是誰登錄的了),接著就執行mysqli_fetch_array函數返回一個關聯數組(第二參數指定)存在$user變量里,后面就是設置cookie了,
至于你的問題,如果用戶名與密碼跟數據庫對不上的話或者記錄不唯一的話就執行else分支了。也不會有緩存了
- 1 回答
- 0 關注
- 1683 瀏覽
添加回答
舉報
0/150
提交
取消