10/10/2018, 11:45

Cần giúp đỡ về form đăng nhập PHP

Tình hình là chỉ mới bập bẹ học PHP nên chắc những lỗi sơ đẳng thôi. Nhưng vì mới học nên các ae chớ ném gạch em ;D
Lỗi là khi gõ đúng user và pass rùi mà nó vẫn wrong user và pass hoài
Và mình cũng muốn hỏi thêm là khi Xây dựng trang đăng nhập cho web người ta thường dùng cách này hay còn cách nào nữa không các bác.

Tình hình là mình có 4 trang php
CSDL
Code:
CREATE TABLE `members` ( 
`id` int(4) NOT NULL auto_increment, 
`username` varchar(65) NOT NULL default ', 
`password` varchar(65) NOT NULL default ', 
PRIMARY KEY (`id`) 
) TYPE=MyISAM AUTO_INCREMENT=2 ; 

--  
-- Dumping data for table `members` 
--  

INSERT INTO `members` VALUES (1, 'anhduy89', '1234');
Main_login.php
Code:
	<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#cccccc">
		<tr>
			<form name="form1" method="post" action="check_login.php">
				<td>
					<table width="300" border="0" cellspacing="1" cellpadding="3" bgcolor="#ffffff">
						<tr>
							<td colspan="3">
								<strong>Member Login</strong>
							</td>
						</tr>
						<tr>
							<td width="78">UserName</td>
							<td width="6">:</td>
							<td width="297"><input name="myusername" type="text" id="myusername"></td>
						</tr>
						<tr>
							<td>Password</td>
							<td>:</td>
							<td><input name='mypassword' type="text" id="mypassword"></td>
						</tr>
						<tr>
							<td>&nbsp;</td> 
							<td>&nbsp;</td> 
							<td><input type="submit" name="Submit" value="Login"></td> 
						</tr>	
					</table>
				</td>	
			</form>	
		</tr>
	</table>
check_login.php
Code:
<?php
	$conn = mysql_connect('localhost', 'root', ') or die('Connect Failed :'.mysql_error());
	mysql_select_db('db') or die('Select Failed :' .mysql_error());

	//Username va Password gui den tu form main_login
	$myusername=$_POST['myusername'];
	$mypassword=$_POST['mypassword'];

	$sql=(' SELECT * FROM members WHERE username="$myusername" and password="$mypasword" ') or die('Select DB Failed' .mysql_error());
	$result=mysql_query($sql);

	//Mysql_num_row so user tim thay trong user
	$count=mysql_num_rows($result);
	// Neu tim thay username va pass thi ket qua tra ve tren 1 dong
	if($count == 1){
		// Dang ki $myusername, $mypassword va chuyen xong file "login_success.php" 
	session_register('myusername');
	session_register('mypassword');
	header("location:login_success.php");
}else{
	echo "Wrong Username or Pass";
}


?>
login_success.php
Code:
<?php

// Kiem tra  session da dc dang ki chua ? Neu chua chuyen huong ve trang main_login.php


	session start();
	if(!session_is_registered(myusername)){
		header("location:main_login.php")
	}
?>
	<html> 
   		<body> 
        Login Successful 
        </body> 
    </html>
logout.php
Code:
<?php
		session_start();
		session_destroy();
	?>
antipro.vn viết 13:45 ngày 10/10/2018
Lỗi là do dòng này
Code:
$sql=(' SELECT * FROM members WHERE username="$myusername" and password="$mypasword" ') or die('Select DB Failed' .mysql_error());
Nên đổ thành dòng này

Code:
$sql=" SELECT * FROM members WHERE username='$myusername' and password='$mypasword' ";
Và dòng này
Code:
$result=mysql_query($sql);
đổi thành dòng này
Code:
$result=mysql_query($sql) or die('Select DB Failed' .mysql_error());
Note là code này bạn sẽ bị lỗi SQL Injection trầm trọng nếu host của bạn để magic_quote_gpc = Off
Bạn nên tham khảo thêm qua google về vấn đề này vì chuyện này rất dài
anhduy89bmt viết 13:53 ngày 10/10/2018
Cám ơn sự giúp đỡ bạn antipro.vn nhiều lắm. Mình đã sữa nhưng hình như vẫn còn bị lỗi.
Code:
Fatal error: Call to undefined function session_is_registered() in D:\www\sample\check_login.php on line 20
nhưng mình viết đúng rồi mà
session_register('myusername');
session_register('mypassword');
antipro.vn viết 14:00 ngày 10/10/2018
Mình nghĩ là bạn đang đọc sách cũ.
Với PHP version >= 5, bạn có thể sử dụng trực tiếp biến $_SESSION
Không cần gọi lại các hàm session_register abc vân vân, dĩ nhiên là vẫn phải gọi hàm session_start();

Google thêm để biết chi tiết.
bvnguyen viết 13:58 ngày 10/10/2018
ở php 5 không dùng session_register nhé
$_SESSION['myusername'] = 'bvnguyen';
kiểm tra xem session tồn tại không thì thế này:
if (isset($_SESSION['myusername'])) {
// do some thing here
}
anhduy89bmt viết 13:52 ngày 10/10/2018
Tình hình là sau khi xóa luôn
session_register('myusername');
session_register('mypassword');

và sửa lại đoạn login_success.php này
Code:
session start();
	if(!session_is_registered(myusername)){
		header("location:main_login.php")
Thành đoạn code
Code:
	session_start()
	if(!isset($_SESSION['myusername'])){
		header("location:main_login.php");
Thì code trên của mình đã chạy nhưng lại không nhận username của mình nếu dù nhập đúng vẫn chuẩn về trang main_login.php
antipro.vn viết 13:56 ngày 10/10/2018
trong file check login của bạn bị thiếu cái session_start();
bvnguyen viết 13:56 ngày 10/10/2018
bạn có thể tham khảo code đăng ký và đăng nhập mẫu ở link dưới nhé

http://www.mediafire.com/?pr946jpv1jbm4b0
Vô Thin viết 13:58 ngày 10/10/2018
Để khử bớt phần nào lỗi SQL Injection do ai đó nói ở trên nên dùng thêm hàm mysql_real_escape_string($myusername) và mysql_real_escape_string($mypassword) còn nếu muốn bài bản theo công nghệ mới nhất của PHP 5.3 trở đi thì khuyên nên học qua chút lập trình hướng đối tượng và thao tác với MySQL thông qua các hàm bà con với PDO.
anhduy89bmt viết 13:53 ngày 10/10/2018
Hix vẫn chưa chạy antipro.vn ơi. Có phải đoạn code của mình viết 0 đúng cách phải 0 nhỉ ? T_T
sau mấy lần nhờ antipro.vn sửa giúp cho thì hiện tại code mình như thế này
main_login.php
Code:
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#cccccc">
		<tr>
			<form name="form1" method="post" action="check_login.php">
				<td>
					<table width="300" border="0" cellspacing="1" cellpadding="3" bgcolor="#ffffff">
						<tr>
							<td colspan="3">
								<strong>Member Login</strong>
							</td>
						</tr>
						<tr>
							<td width="78">UserName</td>
							<td width="6">:</td>
							<td width="297"><input name="myusername" type="text" id="myusername"></td>
						</tr>
						<tr>
							<td>Password</td>
							<td>:</td>
							<td><input name='mypassword' type="text" id="mypassword"></td>
						</tr>
						<tr>
							<td>&nbsp;</td> 
							<td>&nbsp;</td> 
							<td><input type="submit" name="Submit" value="Login"></td> 
						</tr>	
					</table>
				</td>	
			</form>	
		</tr>
	</table>
check_login.php
Code:
<?php
	session_start();
	$conn = mysql_connect('localhost', 'root', '') or die('Connect Failed :'.mysql_error());
	mysql_select_db('db') or die('Select Failed :' .mysql_error());

	//Username va Password gui den tu form main_login
	$myusername=$_POST['myusername'];
	$mypassword=$_POST['mypassword'];

	//$sql=(' SELECT * FROM members WHERE username="$myusername" and password="$mypasword" ') or die('Select DB Failed' .mysql_error());
	$sql=" SELECT * FROM members WHERE username='$myusername' and password='$mypassword' ";

	//$result=mysql_query($sql);
	$result=mysql_query($sql) or die('Select DB Failed' .mysql_error());

	//Mysql_num_row so user tim thay trong user
	$count=mysql_num_rows($result);
	// Neu tim thay username va pass thi ket qua tra ve tren 1 dong
	if($count == 1){
		// Dang ki $myusername, $mypassword va chuyen xong file "login_success.php" 
	header("location:login_success.php");
}else{
	echo "Wrong Username or Pass";
}


?>
loginb_sucess.php
Code:
<?php
	session_start();
	$conn = mysql_connect('localhost', 'root', '') or die('Connect Failed :'.mysql_error());
	mysql_select_db('db') or die('Select Failed :' .mysql_error());

	//Username va Password gui den tu form main_login
	$myusername=$_POST['myusername'];
	$mypassword=$_POST['mypassword'];

	//$sql=(' SELECT * FROM members WHERE username="$myusername" and password="$mypasword" ') or die('Select DB Failed' .mysql_error());
	$sql=" SELECT * FROM members WHERE username='$myusername' and password='$mypassword' ";

	//$result=mysql_query($sql);
	$result=mysql_query($sql) or die('Select DB Failed' .mysql_error());

	//Mysql_num_row so user tim thay trong user
	$count=mysql_num_rows($result);
	// Neu tim thay username va pass thi ket qua tra ve tren 1 dong
	if($count == 1){
		// Dang ki $myusername, $mypassword va chuyen xong file "login_success.php" 
	header("location:login_success.php");
}else{
	echo "Wrong Username or Pass";
}


?>
logout.php
Code:
<?php
	session_start();
	session_destroy();
?>
CSDL
Code:
CREATE TABLE `members` ( 
`id` int(4) NOT NULL auto_increment, 
`username` varchar(65) NOT NULL default '', 
`password` varchar(65) NOT NULL default '', 
PRIMARY KEY (`id`) 
) TYPE=MyISAM AUTO_INCREMENT=2 ; 

--  
-- Dumping data for table `members` 
--  

INSERT INTO `members` VALUES (1, 'anhduy89', '1234');
Bài liên quan
0