Có nhiều vấn đề với mã của bạn, nguyên nhân chính khiến bạn gặp lỗi là do $usertype
và $userstatus
không được xác định trước và không được xác thực.
Nhưng theo ý kiến của tôi, đó không phải là vấn đề chính với mã của bạn.
Có một vài câu hỏi mà tôi muốn hỏi bạn:
- Tại sao phải tạo hai vòng lặp nếu bạn cần tìm nạp một hàng?
- Tại sao phải truy vấn cơ sở dữ liệu hai lần nếu bạn đã biết câu trả lời?
- Bạn có đang thoát
$username
không và$password
cho các ký tự xấu bằng cách sử dụngmysql_real_escape_string
phương pháp?
đây là một ví dụ về cách mã này trông như thế nào:
$query1 = "SELECT user_type,user_staus FROM `user_info` WHERE name='{$username}' AND password='{$password}' LIMIT 1";
$fetched = mysql_query($query1);
//check if record exists otherwise you would receive another notice that can
//break redirect functionality
if (mysql_num_rows($fetched))
{
$record = mysql_fetch_assoc($fetched);
// make sure that value is integer
if ((int)$record["user_staus"])
{
exit("Please login after some time");
}
else
{
$url = (bool)$record["user_type"] ? 'admin_form.php' : 'user_form.php';
header("Location: {$url}");
exit(0);
}
}
else
{
echo "please register to login";
}
CẬP NHẬT
Theo đề xuất của nikc.org
, đã loại bỏ if
cấp 3 lồng vào nhau và được thay thế bằng so sánh bậc ba