10/10/2018, 11:15

Rắc rối về Form Login

Mình có tạo 1 trang web .html có form Login; và có trang checkLogin.php. Cho mình hỏi làm sao để khi đăng nhập user và pass bên trang .html, nếu đúng user và pass trong MySQL( mình đã tạo nó rồi), thì nó giữ nguyên trang hiện hành, bỏ đi Form Login và có thêm dòng chữ Welcome 'Username'; còn nếu sai thì báo lỗi(và vẵn còn Form Login). Bạn nào có thể giúp mình được ko. Mình cảm ơn!
diepnghitinh viết 13:24 ngày 10/10/2018
Nếu như vậy thì file .html của bạn phải có nội dung như sau:
Code:
<form action="checkLogin.php" method="POST">
<input name="taikhoan" type="text" size="29">
<input name="matkhau" type="password" size="29">
<input type="SUBMIT" name="SUBMIT" value="SUBMIT" size="6">
</form>
và file checkLogin.php phải thõa mãn điều kiện sau...
Code:
if ($taikhoan == admin && $matkhau == admin)
{
header("cp.php"); // link cần đến
}
else
{
echo "Wrong password";
}
Bạn để ý trong thẻ
<input name="taikhoan" type="text" size="29">
<input name="matkhau" type="password" size="29">
có name="taikhoan" , name="matkhau" khi ta submit form sẽ chuyển sang checkLogin.php để kiểm tra giá trị nhập này! (action="checkLogin.php")Sau đó file checkLogin.php sẽ làm nhiệm vụ kiểm tra giá trị nhập đó và thực hiện theo cách ta muốn và ngược lại nếu sai...

VD:
file checkLogin.php!
Code:
if ($taikhoan == admin && $matkhau == admin)
{
header("Location: cp.php"); // link cần đến
}
else
{
echo "Wrong password";
}
Ở đây mình dùng hàm if để kiểm tra! Với $taikhoan và $matkhau là biến của name=taikhoan, name=matkhau của file html!!
"Nếu taikhoan = admin và matkhau = admin thì khi đó chuyển sang trang cp.php và ngược lại nếu sai thì thông báo ra màng hình là wrong password"
Ngoài ra nếu bạn biết thêm session thì vận dụng vào form này sẽ rất hay...
Cách mình là thế bạn nào có khác hay hơn thì post lên cho mọi người cùng tham khảo nhá ...

[=========> Bổ sung bài viết <=========]

Được gửi bởi dohoangthien
Mình có tạo 1 trang web .html có form Login; và có trang checkLogin.php. Cho mình hỏi làm sao để khi đăng nhập user và pass bên trang .html, nếu đúng user và pass trong MySQL( mình đã tạo nó rồi), thì nó giữ nguyên trang hiện hành, bỏ đi Form Login và có thêm dòng chữ Welcome 'Username'; còn nếu sai thì báo lỗi(và vẵn còn Form Login). Bạn nào có thể giúp mình được ko. Mình cảm ơn!
Ạc! tôi hiểu ý bạn rồi... tức là sau khi login! Trình duyệt sẽ tự chuyển sang trang index.php (trang để login) Còn nếu sai thì báo lỗi và form login vẫn còn!!!
OK! Học session bạn ơi... <== cái này mình mới học cách đây 1 ngày,có gì sai xin bạn thứ lỗi!!

__ sửa file html của bạn thành file "index.php"

Thêm vào sau tag <?php code sau:
session_start();

code trên để bắt đầu khởi tạo session !! Sau đó vào trang login cũng làm y như vậy:
<?php
session_start();

================================================== =======================

OK! Vậy file index.php theo mình viết là như vầy...

<?php
session_start();
if (!empty($_SESSION["admin"]))
{
?>
<center>Đăng nhập thành công!!!</center>
<?php
exit();
}
else
{
?>
<form action="login.php" method="POST">
<input type="text" name="taikhoan" size="29">
<input type="password" name="matkhau" size="29">
<input type="SUBMIT" name="SUBMIT" value="SUBMIT" size=6>
</form>
<?php
}
?>

Còn file login.php:
<?php
session_start();
include("dbconnect.php"); //file connect db
$result = mysql_query("select * from tbl_user") or
die (mysql_error());
$row = mysql_fetch_array($result);

if ($taikhoan == $row["username"] && $matkhau == $row["password"])
{
$_SESSION["admin"] = $row["password"];
header("Location: ./");
}
else
{
echo "<meta http-equiv='refresh' content='0;url=index.php'>";
}
mysql_free_result($result);
?>
Với $row["username"] là cột của id admin (username) còn $row["password"]) là password admin (password)! Nếu đúng u/p thì chuyển về trang chính đồng thời cũng gán thêm session:

Code:
$_SESSION["admin"] = $row["password"];
header("Location: ./");
còn ở trang chủ:
Code:
<?php
session_start();
if (!empty($_SESSION["admin"]))
{
?>
<center>Đăng nhập thành công!!!</center>
<?php
exit();
}
else
{
?>
<form action="login.php" method="POST">
<input type="text" name="taikhoan" size="29">
<input type="password" name="matkhau" size="29">
<input type="SUBMIT" name="SUBMIT" value="SUBMIT" size=6>
</form>
<?php
}
?>
if (!empty($_SESSION["admin"])
phủ định (!empty($_SESSION["admin"]) thì xuất ra màng hình "đăng nhập thành công" còn ngược lại thì xuất ra trang đăng nhập...
Nếu muốn logout thì tạo trang logout.php với code sau:
<?php
include("dbconnect");
session_start();
session_destroy();
header("Location: index.php");
?>
Xong! Nếu có gì sai mong các bạn đừng cười!
dohoangthien viết 13:31 ngày 10/10/2018
Mình đã tạo ra 2 file như bạn nói. Mình thử gõ sai username và password thì nó hiện lên form login (cái này ko nói gì). Nhưng mình gõ đúng username và password nó vẫn hiện Form login luôn(vẫn ko thấy chữ Đăng nhập thành công luôn). Còn chỗ tbl_user mình đã sửa thành members ( vì mình có db tên là mysite, tb là members) và mình tạo thêm dbconnect.php với code

<?php
$db_host = "localhost"; // Giữ mặc định là localhost
$db_name = "mysite"; // Cần thay đổi..
$db_username = "root"; // Cần thay đổi..
$db_password = "dohoangthien"; // Cần thay đổi..


@mysql_connect("{$db_host}", "{$db_username}", "{$db_password}") or die("Khong the ket noi toi database");
@mysql_select_db("{$db_name}") or die("Khong the chon database");

?>

Bạn kiểm tra dùm mình đi. Mình ko biết lỗi chỗ nào nữa. Mình cảm ơn !

[=========> Bổ sung bài viết <=========]

Àh, còn nữa. Mình làm theo cách này, mình có 3 file này:
1. mysql.php
<?php

$db_host = "localhost"; // Giữ mặc định là localhost
$db_name = "mysite"; // Cần thay đổi..
$db_username = "root"; // Cần thay đổi..
$db_password = "dohoangthien"; // Cần thay đổi..

@mysql_connect("{$db_host}", "{$db_username}", "{$db_password}") or die("Không thể kết nối database");
@mysql_select_db("{$db_name}") or die("Không thể chọn database");

?>

2. Login.php

<?php

// Tải file mysql.php lên
require_once("mysql.php");

if ( $_GET['act'] == "do" )
{

// Dùng hàm addslashes() để tránh SQL injection, dùng hàm md5() để mã hóa password
$username = addslashes( $_POST['username'] );
$password = md5( addslashes( $_POST['password'] ) );

// Lấy thông tin của username đã nhập trong table members
$sql_query = @mysql_query("SELECT id, username, password FROM members WHERE username='{$username}'");
$member = @mysql_fetch_array( $sql_query );

// Nếu username này không tồn tại thì....
if ( @mysql_num_rows( $sql_query ) <= 0 )
{
print "Tên truy nhập không tồn tại. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
exit;
}

// Nếu username này tồn tại thì tiếp tục kiểm tra mật khẩu
if ( $password != $member['password'] )
{
print "Nhập sai mật khẩu. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
exit;
}

// Khởi động phiên làm việc (session)
session_start();
$_SESSION['user_id'] = $member['id'];

// Thông báo đăng nhập thành công
print "Bạn đã đăng nhập với tài khoản {$member['username']} thành công. <a href='index.php'>Nhấp vào đây để vào trang chủ</a>";

}
else
{

// Form đăng nhập
print <<<EOF
<form action="login.php?act=do" method="post">
Tên truy nhập: <input type="text" name="username" value="">
Mật khẩu: <input type="password" name="password" value="">
<input type="submit" name="submit" value="Đăng nhập">
</form>
EOF;

}

?>

3. index.php ( mình tạo trước Web Template dạng .php, và index.php apply template từ nó, mình đặt đoạn code này trong thẻ <td> của trang template )

<?php

// Tải file mysql.php lên
require_once("mysql.php");

// Khởi động phiên làm việc
session_start();

if ( !$_SESSION['user_id'] )
{

print <<<EOF
Bạn chưa đăng nhập! <a href='login.php'>Nhấp vào đây để đăng nhập</a>
EOF;

}
else
{

$user_id = intval($_SESSION['user_id']);

$sql_query = @mysql_query("SELECT * FROM members WHERE id='{$user_id}'");
$member = @mysql_fetch_array( $sql_query );

print <<<EOF
Bạn đang đăng nhập với tài khoản {$member['username']}.
EOF;

}

?>

Nhưng khi mình chạy index.php thì nó báo

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at F:\Web Sever\AppServ\www\Thien_Website\index.php:5) in F:\Web Sever\AppServ\www\Thien_Website\index.php on line 334

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at F:\Web Sever\AppServ\www\Thien_Website\index.php:5) in F:\Web Sever\AppServ\www\Thien_Website\index.php on line 334

Ngoài ra, khi mình login đúng user và pass thì nó báo đăng nhập thành công, nhưng khi nhấp link để trở lại trang chủ thì nó hiện lại y như ban đầu (Bạn chưa đăng nhập! Nhấp vào đây để đăng nhập). bạn biết cách khắc phục ko?
diepnghitinh viết 13:21 ngày 10/10/2018
$taikhoan = $_POST["taikhoan"];
$matkhau = $_POST["matkhau"];
if ($taikhoan == $row["username"] && $matkhau == $row["password"])
{
$_SESSION["admin"] = $row["password"];
header("Location: ./");
}
else
{
echo "<meta http-equiv='refresh' content='0;url=index.php'>";
}

ở code trên mình gán session khi file login.php vừa kiểm tra password xong mà???
Nếu password và tài khoản phù hợp với database thì chuyển lại trang index đồng thời gán thêm biến session...
$_SESSION["admin"] = $row["password"];
header("Location: ./");
Rồi sau đó file index.php mới kiểm tra session đấy! Nếu session tồn tại, tức lại đăng nhập đúng thì xuất Câu Càho Mừng Đăng Nhập Thành Công còn ngược lại là trả về trang đăng nhập...
dohoangthien viết 13:28 ngày 10/10/2018
Mình làm được rồi . Cảm ơn bạn nhiều nha. Nhưng 1 vấn đề nữa là login trong trang php được. Mình chuyển trang đó sang dạng .html thì ko được. Chắc nó là web tĩnh nên ko được. Mình có nghe nói có trang web động dhtml. Mình có thể lưu sang dạng đó được ko(có thể nhấp chạy file trực tiếp luôn)? Chứ sài php phải cài localhost, rồi vào web gõ địa chỉ nữa, phức tạp quá. Mình cảm ơn. Vì lúc đầu mình làm web dạng .html nhưng sau đó bà cô kêu làm thêm login form nữa thế là mình phải làm lại từ đầu. hichic ko còn cách nào cứu vãn phải ko bạn ???
bka viết 13:26 ngày 10/10/2018
cái này mà html bạn có thể dùng javascript .. nhưng mấy cái đó chỉ để cho trẻ con chơi thui . yêu cầu củ bạn có lẽ là không thể.. nếu không ý định cài localhost thì không hiểu bạn thực hành php bằng niềm tin àH
dohoangthien viết 13:31 ngày 10/10/2018
diepnghitinh: mình mới coi lại, cái login form của bạn đưa chỉ login 1 user duy nhất ?!. Mình có vào SQL tạo thêm 1 user nữa, rồi mình qua đăng nhập nhưng nó bảo ko cho. Chỉ có user đầu tiền là được thôi. như vậy là lỗi gì vậy bạn.

bka: mình cũng muốn viết bằng php lắm chứ. Nhưng sao mình ko chèn css và javascript vào trang php được vậy bạn? Bạn chỉ với.
huynhthanhhai89 viết 13:17 ngày 10/10/2018
Bạn cứ viết code của CSS và Javascript trong thẻ <head></head> thì nó chạy bình thường à.
mrtungs viết 13:19 ngày 10/10/2018
[quocte]Nhưng sao mình ko chèn css và javascript vào trang php được vậy bạn? Bạn chỉ với.[/quocte]

bạn học thêm cách làm việc với google đi
không cài localhost thì không học code được đâu, làm gì cũng thấy khó, thấy nản thì cố gắng học để làm gì
zmt264 viết 13:24 ngày 10/10/2018
Được gửi bởi dohoangthien
bka: mình cũng muốn viết bằng php lắm chứ. Nhưng sao mình ko chèn css và javascript vào trang php được vậy bạn? Bạn chỉ với.
Hic, mất căn bản quá, không biết bây giờ chủ topic đã học giỏi hơn chưa, cũng 2 năm trôi qua rồi nhỉ.
Bài liên quan
0