PDA

View Full Version : [TUTOR] hướng dẫn tạo login bằng php dùng database mysql



leedzinh
05-10-2002, 23:10
đầu tiên tạo 1 table trong mysql tên là user với cấu trúc lệnh như sau:
CREATE TABLE user (
ID smallint(3) NOT NULL auto_increment,
Name varchar(30) NOT NULL default '',
Password varchar(32) NOT NULL default '',
PRIMARY KEY (ID),
UNIQUE KEY Name (Name)
) TYPE=MyISAM;

tạo 1 file config.php de connect vao database:

$Host = "localhost";
$User = "tên admin";
$Pass = "mật khẩu connect database";
$DB = "tên database chứa table user vừa mới tạo";

if(!($link_id = mysql_connect($Host, $User, $Pass))) die(mysql_error());
mysql_select_db($DB);

tạo 1 file register.html de cho thành viên đăng ký chơi cho dzui :P

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>Login Signup!</title>
</head>
<body>
<form action="register.php" method="Post">
What is your desired Username? <input type="text" name="name"><br>
What is your password? <input type="password" name="password"><br>
<input type="submit" name="submit">
</form>
</body>
</html>

sau đó tạo 1 file register.php

<?php

include('config.php');

$uname = $_POST['name'];
$upass = $_POST['password'];

$sql = "INSERT INTO $table VALUES ('', '$uname', md5('$upass'))";

if(!$result = mysql_query($sql)) die(mysql_error());

echo "Registered Successfully. <a href=\"login.html\">Continue</a> to the members page.";

?>

ở đây tôi dùng md5 để mã hóa mật khẩu cho bảo mật khi có ai đó hack vào được database thì họ cũng kô thể nhìn thấy mật khẩu chính của mình được

bây giờ tạo 2 file login.html:

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>Title here!</title>
</head>
<body>
<form method="post" action="login.php">
Enter your User Name <input type="text" name="Name" size="20"><br>
Enter you Password <input type="password" name="Password" size="20"><br>
<input type="submit" name="submit">
</form>
</body>
</html>


và tạo 1 file login.php để xử lý thông tin form:

<?php


include('config.php');

$_POST['Name'] = addslashes($_POST['Name']);
$_POST['Password'] = md5($_POST['Password']);

$sql = "SELECT ID FROM user WHERE Password = '" . $_POST['Password'] ."' AND Name = '" . $_POST['Name']. "' LIMIT 1";
if(!($result = mysql_query($sql))) die(mysql_error());

$Rows = mysql_num_rows($result);
if($Rows != 0) {
echo "Logged in!";
/* You can put more code here like a cookie */
} else {
echo "There as an error logging you. in";
}
?>

vậy là xong rồi đó mấy bạn các bạn có thấy dễ kô dza. hi hi

cách của mình làm hơi dài nhưng sẽ giúp cho các bạn mới bước vào nghề code có thể hiều được.

Các bạn thể làm cách khác đó là gộp 2 file html và php lại thành 1 file php và viết code xử lý form trong file php luôn
cách này tôi sẽ gửi lên sau nếu có bạn nào hỏi.
Chúc các bạn thành công!

Bài học kế tiếp là tôi sẽ hướng dẫn các bạn setcookie cho site để khi thành viên login vào có thể lướt site của mình mà kô cần login nhiều lân.

Bye các bạn!

Về Đâu
06-10-2002, 17:13
Cám ơn bạn nhiều nha chà chà cái này cực hay đó .

leedzinh
06-10-2002, 18:00
thanks bạn nhiều
bạn nào có thắc mắc gì cứ post lên đây
bye

Về Đâu
06-10-2002, 21:34
Pass được mã hóa như vậy rất hay như mà lỡ quên mất mật khẩu thì làm sao bây giờ ? bạn có thể hướng dẫn thêm về quên mật khẩu không ?

bpmtri
07-10-2002, 08:40
Nếu tui nhớ hỏng lầm, hàm md5 là mã hoá một chiều, hỏng có hàm giải mã, nếu bạn lỡ quên password thì chỉ có nước remove password cũ, tạo password mới thôi.

Đây cũng là cách mà các ứng dụng Web hay dùng, khi bạn quên password, hệ thống sẽ yêu cầu bạn nhập e-mail (duy nhất), nó sẽ tạo password mới và gửi password này về cho bạn qua email.

Về Đâu
07-10-2002, 09:06
viết tutor rõ chút đi bạn ơi cám ơn nhiêu !

leedzinh
07-10-2002, 13:58
md5 đúng là hàm mã hóa 1 chiều khi bạn quên password bạn có thể send 6 chữ số sau cùng cùng của password đã mã hóa cho user đồng thời reset password trong database thành 6 số đó sau đó khi user login vào thì user có thể đổi pass lại và lúc này mính lại md5 nữa đơn giản vậy thôi

chúc vui
bye

Về Đâu
07-10-2002, 14:40
mình có thể làm auto send cái đó về email nếu có yêu cầu không ?

leedzinh
07-10-2002, 15:11
ban có thể nói rõ không?
hay ý bạn muốn nói là khi member forgot pass thì mình send email pass mới cho user à?
được bạn dùng hàm mail( ) đó
cấu trúc của nó như sau:

$myname = "Me Myself";
$myemail = "myself@email.com";

$contactname = "Mister Contact";
$contactemail = "contact@email.com";

$message = "hello from happy me";
$subject = "A mail not refused by Hotmail";

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: ".$myname." <".$myemail.">\r\n";
$headers .= "To: ".$contactname." <".$contactemail.">\r\n";
$headers .= "Reply-To: ".$myname." <$myreplyemail>\r\n";
$headers .= "X-Priority: 1\r\n";
$headers .= "X-MSMail-Priority: High\r\n";
$headers .= "X-Mailer: Just My Server";

mail($contactemail, $subject, $message, $headers);

bye chúc vui

Về Đâu
10-10-2002, 14:26
demo here (http://test.vnrockworld.com)
mà sao nó ngủm cù tỏi fòi làm y hệ dzukhanh nói .
lúc register user test pass test thì nó báo :
You have an error in your SQL syntax near 'VALUES ('', 'test', md5('test'))' at line 1. :confused: xin gởi kèm file zip này bạn xem có đúng y hệt không trừ 2 trang fogotpas.html và php

leedzinh
11-10-2002, 08:53
sai cau truc cua ham md5 roi no phai nhu the nay ne md5('user','pass')
chuc vui

COTTONBELLY
15-10-2002, 21:31
Mình cũng xin góp ý thêm một chút , ta có thể sữ dụng hàm setcookie() để lưu id_user & user_name trên máy khách như vậy sẽ tránh được trường hợp login lại nhiều lần .

vnebiz
26-01-2003, 21:54
Bài viết được gửi bởi Về Đâu
mình có thể làm auto send cái đó về email nếu có yêu cầu không ?
*******--------------*********
Bạn viết hay lắm.
Tuy nhiên tôi đang phân vân là đoạn mail tự động cho khách hàng sẽ được cho vào đâu và một vấn đề nữa là làm thế nào để khi visitor truy cập vào thì file login.ktml tự động chạy.
Cảm ơn bạn nhiều

phuongngoc
06-01-2005, 09:12
Bài này rất hay nhưng... cái phần quan trọng nhất là session thì bác lại không viết tiếp. Làm như phía trên thì đăng nhập cả trăm lần... :(

NsT
07-01-2005, 14:49
tui có ý kiến này , chỗ :


$sql = "INSERT INTO $table VALUES ('', '$uname', md5('$upass'))";

nên sửa lại là :


$sql = "INSERT INTO $table (ID,Name,Password) VALUES ('', '$uname', md5('$upass'))";




Tuy nhiên tôi đang phân vân là đoạn mail tự động cho khách hàng sẽ được cho vào đâu và một vấn đề nữa là làm thế nào để khi visitor truy cập vào thì file login.ktml tự động chạy.


Đoạn mail trên sẽ gửi vào hòm mail của người quên password , khi yêu cầu lấy lại pw mới , người sử dụng sẽ phải điền địa chỉ mail của mình vào để nhận pw mới . Còn để khi user truy cập vào login.html tự chạy thì cái này thuộc về permission của mỗi trang web .
Để làm việc này có thể dùng Cookies hoặc Session . Có nghĩa là nếu bạn login vào bạn sẽ được cấp 1 cookies hoặc session , và trang web sẽ kiểm tra cookies hoặc session đó , nếu okie thì bạn được phép vào, còn nếu ko đăng nhập , bạn sẽ ko có gì và lúc đó trang login sẽ được show ra , buộc bạn phải login .

phatit
08-04-2009, 13:02
$sql = "INSERT INTO $table (ID,Name,Password) VALUES ('', '$uname', md5('$upass'))";
cái $table này là sao hã bạn ! bạn nói rõ được không ?

Herovt
03-08-2009, 17:16
demo here (http://test.vnrockworld.com)
mà sao nó ngủm cù tỏi fòi làm y hệ dzukhanh nói .
lúc register user test pass test thì nó báo :
You have an error in your SQL syntax near 'VALUES ('', 'test', md5('test'))' at line 1. :confused: xin gởi kèm file zip này bạn xem có đúng y hệt không trừ 2 trang fogotpas.html và php

thêm 1 biến :
$table = "user";
vào file config.php sẽ chạy ngay tui mà ^^