Hướng dẫn login with email and password in php - đăng nhập bằng email và mật khẩu trong php

8

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang cố gắng tạo một đăng nhập với tên người dùng hoặc email

Mã của tôi là:

$username=$_REQUEST['login'];
$email=$_REQUEST['login'];
$password=$_REQUEST['password'];

if[$username && $password] {
  $query="select * from  user_db where username='$username'  and password='$password'";
} else if [$email && $password] {
  $query="select * from  user_db where email='$email' and password='$password'";
}

Đăng nhập với tên người dùng là thành công nhưng đăng nhập với email không hoạt động. Làm ơn giúp tôi!

Khi được hỏi ngày 2 tháng 5 năm 2012 lúc 17:56May 2, 2012 at 17:56

3

Tham số đăng nhập là giống nhau cho cả tên email và tên người dùng. Không chính xác không chính xác nếu bạn có một hộp đăng nhập duy nhất chấp nhận.

Bạn có thể đặt điều kiện vào truy vấn nếu bạn không chắc đó là email hay tên người dùng.

$login=$_REQUEST['login'];
$query = "select * from  user_db where [ username='$login' OR email = '$login'] and password='$password'"

EDIT: Một giải pháp giống như PDO ngày nay được ưu tiên hơn nhiều vì các giải pháp trên có thể bị tiêm SQL. Logic vẫn giữ nguyên, nhưng bạn sẽ trông giống như thế này: A PDO-like solution is much more preferred nowadays as the above is subject to SQL injection. The logic stays the same, but you'd have it look something like this:

$query = "
    SET @username = :username
    SELECT * FROM user_db
       WHERE [ username = @username OR email = @username] 
       AND password = :password
";

$statement = $pdoObject->prepare[$query];
$statement->bindValue[":username", $login, PDO::PARAM_STR];
$statement->bindValue[":password", $password, PDO::PARAM_STR];
$statement->execute[];

Đã trả lời ngày 2 tháng 5 năm 2012 lúc 18:03May 2, 2012 at 18:03

1

Bạn đang đặt cùng một giá trị thành hai biến, và sau đó sử dụng một if/khác. Cả hai nếu các tuyên bố là tương đương.

Bạn cần tìm ra nếu $_REQUEST[login] chứa một địa chỉ email hợp lệ và nếu sử dụng trường email của cơ sở dữ liệu. Nếu không, sử dụng trường tên người dùng.

Ngoài ra, bạn không nên đặt các biến trực tiếp vào truy vấn. Sử dụng các tuyên bố đã chuẩn bị.

Đã trả lời ngày 2 tháng 5 năm 2012 lúc 18:01May 2, 2012 at 18:01

GCOChardGCoChardgcochard

Huy hiệu vàng 11.2k1 vàng24 Huy hiệu đồng1 gold badge24 silver badges41 bronze badges

Tôi biết đây là một bài viết cũ nhưng tôi thấy rằng một số người vẫn sẽ xem nó vì vậy tôi muốn đặt một cách dễ dàng để cho phép cả email và tên người dùng trên cùng một đầu vào

Mã của tôi như sau

  if
   [!preg_match["/^[_a-z0-9-]+[\.[_a-z0-9-]+]*@[a-z0-9-]+[\.[a-z0-9-]+]*[\.[a-z]{2,3}]$/", $name_of_same_input] ]
  {
     $un_check = mysql_query["SELECT uname FROM eusers WHERE uname = '' "] or die[mysql_error[]];

     echo "loging in with username"; //code
  }
  elseif
   [preg_match["/^[_a-z0-9-]+[\.[_a-z0-9-]+]*@[a-z0-9-]+[\.[a-z0-9-]+]*[\.[a-z]{2,3}]$/", $name_of_same_input] ]
  {
     $un_check = mysql_query["SELECT umail FROM eusers WHERE umail = '' "] or die[mysql_error[]];

     echo "loging in with email"; //code

  }

Đã trả lời ngày 2 tháng 12 năm 2013 lúc 0:39Dec 2, 2013 at 0:39

Bài Viết Liên Quan

Chủ Đề