10/10/2018, 10:51
Warning: mysql_fetch_array()
Code:
include("ketnoicsdl.php"); $query="select * from thanhvien where tendangnhap='".$tendangnhap."' and matkhau='".$matkhau."'"; mysql_query($query) or die (mysql_error()); while($row = mysql_fetch_array($query)) { echo $row['capbac']; }
Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/abc/public_html/dangnhap.php on line 12
Bài liên quan
1. Viết query kiểu kia tốn hiệu suất vì phải scan 2 fields mới cho ra result.
"select matkhau,capbac from where taikhoan='".$taikhoan.'"" nôm na là như thế rồi bạn so sánh mật khẩu nhập vào và mật khẩu gọi ra từ query.
(Giải thích tí)
+ Giả sử bạn đánh index cho trường taikhoan khi work query trên nó sẽ sử dụng index nên tốc độ truy vấn sẽ cực nhanh. Và sẽ cho bạn matkhau,cap bac. Sau đó cái mật khẩu nhập vào tùy vào có mã hóa hay không, rồi bạn mã hóa sau đó so sánh với cái kết quả của truy vấn. Nếu = nhau thì sẽ login oke.
+ Còn cách của bạn. Nó sẽ phải scan full cái fields tàikhoản sau đó nó lại scan full cái matkhau. Độ phức tạo sẽ là ^2. Kể cả bạn index cho 2 fields thì cũng hơi điên vì cái matkhau index làm gì cơ chứ.
- > Tổng kết cách của mình nói tới sẽ giảm độ phức tạp đi 2 lần so với cách của chủ thớt. Và sẽ nhanh hơn khi có index
2. Query gọi đăng nhập thường có 1 kết quả ko nhất thiết phải while làm chi cho mệt.
Lỗi:
Bạn kiểm tra xem sự chính xác tên fields có thể nó gây lỗi vì không cho ra kết quả nào
include("ketnoicsdl.php");
$query="select * from thanhvien where tendangnhap='".$tendangnhap."' and matkhau='".$matkhau."'";
mysql_query($query) or die (mysql_error());//old
$query = mysql_query($query) or die (mysql_error());//new
while($row = mysql_fetch_array($query))
{
echo $row***91;'capbac'***93;;
}
include("ketnoicsdl.php");
$query="select * from thanhvien where tendangnhap='".$tendangnhap."' and matkhau='".$matkhau."'";
mysql_query($query) or die (mysql_error());
Câu này có làm việc, nhưng nó "làm thinh" chưa gán gì cả thì biến $query vẫn là chuỗi, ít ra phải là vầy
$query = mysql_query($query);
rồi mới vầy
while($row = mysql_fetch_array($query))
2. Đang trong dấu nháy kép có thể sử dụng biến mà không cần nối chuỗi. Bạn có thê sử dụng dấu ngoặc {$tendangnhap} cho thêm rõ ràng.
3. Tham số tùy chọn của hàm mysqli_fetch_array là MYSQLI_ASSOC, MYSQLI_NUM và MYSQLI_BOTH nên được gọi để phân biệt rõ từng loại mảng trả về. Trong trường hợp của bạn chỉ cần một dòng thì dùng dạng mảng chỉ mục index là hợp lý hơn là dùng mảng kết hợp.
Cuối cùng khi bạn muốn login thôi thì không cần phải chọn *. Đặc biệt với những bảng có mật khẩu thì nếu không thực sự cần thiết, không nên chọn nó ra. Để nó trong DB an toàn hơn. Mà sao mật khẩu lại không mã hóa ta? ít ra cũng phải sha1() hoặc MD5() chứ nhỉ?