Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > [PHP] สร้าง log in แบบแบ่งสถานะ(USER,ADMIN)ยังไงคะ?



 

[PHP] สร้าง log in แบบแบ่งสถานะ(USER,ADMIN)ยังไงคะ?

 



Topic : 129648



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์




สวัสดีค่ะ พอดีมีเรื่องอยากจะถาม เราลองหาโค้ดต่างๆจากูเกิ้ลเเล้วปรากฎว่าเราทำแล้วรันไม่ได้ หลายๆเว็บทำแบบสร้าง database ใน php (เราใช้โปรแกรม NETBEAN) เลย แต่ของเราสร้าง database ใน MYSQL (xampp) ซึ่งทำให้เรางง เพราะเราจะสร้าง php มาอีกหน้านึงเพื่อดึงข้อมูลมาจาก database แล้วก็ include หน้าพวกนี้ไปใช้ เราไม่แน่ใจว่าต้อง include ยังไง ตรงส่วนไหน

รูปตาราง

ตารางชื่อ login_tb มี 4 ฟิลด์
- login_id
- login_username
- login_password
- login_status

เราแยกสถานะไว้ 3 สถานะ(login_status) ตั้งค่าใน database เป็น 1,2,3
หน้า login แค่สร้าง input ต่างๆขึ้นมาใช่ไหมคะ?
ทีนี้เรามีปัญหาที่หน้า check_login ที่ใช้ดูสถานะใน status ในการจำกัดการเข้าถึงข้อมูล ืำยังไงก็ error มันชอบ error ตรง mysqli_query
งงมากค่ะ


Code (PHP)
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        session_start();
        include 'dbconfig.php';
        
        $strSQL = "SELECT * FROM login_tb WHERE login_username = '".mysql_real_escape_string($_POST['username'])."'
and login_password = '".mysql_real_escape_string($_POST['password'])."'";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
    if(!$objResult)
    {
    echo "Username and Password Incorrect!";
    }
    else
    {
    $_SESSION["login_id"] = $objResult["login_id"];
    $_SESSION["login_status"] = $objResult["login_status"];
 
    session_write_close();
 
if($objResult["login_status"] == 1)
{
header("location:admin.php");
}
else
{
header("location:user.php");
}
}
mysql_close();
?>
        ?>
    </body>
</html>


อันนี้ติดตรง $strSQL = "SELECT * FROM login_tb WHERE login_username = '".mysql_real_escape_string($_POST['username'])."'
and login_password = '".mysql_real_escape_string($_POST['password'])."'";
ขึ้น error ว่า Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in C:\xampp\htdocs\PhpProject5\check_login.php:17 Stack trace: #0 {main} thrown in C:\xampp\htdocs\PhpProject5\check_login.php on line 17

เราทำไว้หลายแบบมากๆๆๆ

Code (PHP)
<?php
    require 'connectdb.php';
    
    $login_username = mysqli_real_escape_string($dbcon,$_POST['username']);
    $login_password = mysqli_real_escape_string($dbcon,$_POST['password']);
    
    $salt = 'tikde78uj4ujuhlaoikiksakeidke';
    $hash_login_password = hash_hmac('sha256', $login_password, $salt);
    
    $sql = "SELECT * FROM tb_login WHERE login_username=? AND login_password=?";
    $stmt = mysqli_prepare($dbcon, $sql);
    mysqli_stmt_bind_param($stmt,"ss", $login_username,$hash_login_password);
    mysqli_execute($stmt);
    $result_user = mysqli_stmt_get_result($stmt);

    if ($result_user->num_rows == 1) {
       session_start();
       $row_user = mysqli_fetch_array($result_user,MYSQLI_ASSOC);
       $_SESSION['login_id'] = $row_user['login_id'];
    $_SESSION['login_status'] = $row['login_status'];
        if($_SESSION["login_status"]==0){ //ถ้าเป็น admin ให้กระโดดไปหน้า admin_page.php
       header("Location: main1.php");
   } 
   else if ($_SESSION["login_status"]==2){ //ถ้าเป็น admin ให้กระโดดไปหน้า admin_page.php
       header("Location: main2.php");
   }
   else if ($_SESSION["login_status"]==3){ //ถ้าเป็น admin ให้กระโดดไปหน้า admin_page.php
       header("Location: main3.php");
   }
  
    }  else {
        echo "ผู้ใช้หรือรหัสผ่านไม่ถูกต้อง";
   }


อันนี้พอเข้าแบบ admin ก็ลิ้งค์ไป main1 อย่างเดียวเลย เหมือนมันดูตรง 0 เป็นหลักว่าอยู่ตรงไหน ช่วยชี้แนะทีค่ะว่าควรแก้ตรงไหน หรือจะสร้างมาใหม่เลยก็ได้ แงงงง ขอความกรุณาด้วยค่ะ



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2017-12-06 20:34:02 By : ny2003 View : 11672 Reply : 17
 

 

No. 1



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


https://www.thaicreate.com/php/forum/095986.html

ให้ลอง var_dump($_SESSION["login_status"]); ออกมาดูก่อน ปิด redirect ไว้ให้หมด แล้วลอง login user แต่ละอันที่มีสถานะต่างกันดูว่าค่าถูกต้องไหม ถ้าค่าถูกมันก็ไปตามเงื่อนไขนั้นนั่นแหละ








ประวัติการแก้ไข
2017-12-06 22:13:50
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-06 22:10:06 By : mr.v
 


 

No. 2



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


มันใช้ยังไงคะ? ต้องไปแทนตรงไหน?
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-08 22:04:22 By : ny2003
 

 

No. 3



โพสกระทู้ ( 2,258 )
บทความ ( 5 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook Hi5 Blogger

Code (PHP)
<?php
    session_start();

    require 'connectdb.php';
    
    $login_username = mysqli_real_escape_string($dbcon,$_POST['username']);
    $login_password = mysqli_real_escape_string($dbcon,$_POST['password']);
    
    $salt = 'tikde78uj4ujuhlaoikiksakeidke';
    $hash_login_password = hash_hmac('sha256', $login_password, $salt);
    
    $sql = "SELECT * FROM tb_login WHERE login_username=? AND login_password=?";
    $stmt = mysqli_prepare($dbcon, $sql);
    mysqli_stmt_bind_param($stmt,"ss", $login_username,$hash_login_password);
    mysqli_execute($stmt);
    $result_user = mysqli_stmt_get_result($stmt);

    if ($result_user->num_rows == 1) {
       $row_user = mysqli_fetch_array($result_user,MYSQLI_ASSOC);
       $_SESSION['login_id'] = $row_user['login_id'];
    $_SESSION['login_status'] = $row['login_status'];
        if($_SESSION["login_status"]==0){ //ถ้าเป็น admin ให้กระโดดไปหน้า admin_page.php
       header("Location: main1.php");
   } 
   else if ($_SESSION["login_status"]==2){ //ถ้าเป็น admin ให้กระโดดไปหน้า admin_page.php
       header("Location: main2.php");
   }
   else if ($_SESSION["login_status"]==3){ //ถ้าเป็น admin ให้กระโดดไปหน้า admin_page.php
       header("Location: main3.php");
   }
  
    }  else {
        echo "ผู้ใช้หรือรหัสผ่านไม่ถูกต้อง";
   }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-09 04:09:31 By : Manussawin
 


 

No. 4



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


แล้วต้องแทนในส่วนไหนคะ? ก่อน if หรือภายใน if เลย?
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 14:48:31 By : ny2003
 


 

No. 5



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


ถ้าใช้ mysqli_prepare ก็ไม่ต้องใช้ real_escape_string มันจะซ้ำซ้อน
และถ้าไม่จำเป็นต้องสร้างตัวแปรใหม่ ก็ให้ใช้ ตัวแปร global ที่ได้มาตรงๆ จะช่วยประหยัดหน่วยความจำ
เขียนด้วย oop จะเข้าใจง่ายและไม่หลง function สั้นกว่าด้วย

Code (PHP)
<?php
// connectdb.php
$dbcon = new mysqli('localhost','test','test','test');
if($dbcon->connect_error){
	die('Connect Error: ' . $dbcon->connect_error);
}
?>


Code (PHP)
	// ตรวจสอบตัวแปร post
	if(!(isset($_POST['username']) && isset($_POST['password']))){
		die('Login error');
	}
	require 'connectdb.php';
	$hash_paswd = hash_hmac('sha256', $_POST['password'], 'tikde78uj4ujuhlaoikiksakeidke');

	$stmt = $dbcon->prepare("SELECT * FROM tb_login WHERE login_username=? AND login_password=? ");
	$stmt->bind_param("ss", $_POST['username'], $hash_paswd);
	$stmt->execute();
	$rs=$stmt->get_result();

	if ($rs->num_rows == 1) {
		session_start();
		$row = $rs->fetch_object();
		$_SESSION['login_id'] = $row->login_id;
		$st=($_SESSION['login_status'] = $row->login_status) + 1;
		if(in_array($st,array(1,2,3))){
			//ถ้าเป็น admin ให้กระโดดไปหน้า admin_page.php
			header('location: main'.$st.'.php');
		}
	}
	echo "ผู้ใช้หรือรหัสผ่านไม่ถูกต้อง";



ประวัติการแก้ไข
2017-12-10 17:28:14
2017-12-10 17:28:52
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 17:14:40 By : Chaidhanan
 


 

No. 6



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


ขอโทษนะคะ หนูเขียนตรง // ผิดเองที่เป็น admin 3 บรรทัดเลย คือมันจะแยกสถานะกันอ่ะค่ะ เป็น admin teacher student ขอโทษที่ไม่ตรวจดูให้ดี คือมันต้องมี 3 เงื่อนไข มี 3 if แล้วก็ลิ้งค์ไป 3 หน้าในแต่ละเงื่อนไข แอดมินลิ้งค์ไปแอดมิน ครูลิ้งค์ไปครู แล้วหนูต้องลิ้งค์ยังไงคะ? ถ้าใช้คำสั่งนั้น

ลองใช้โค้ดจากเว็บนี้ตรงส่วน query ก็มักจะติดปัญหา ไม่ทราบว่าเพราะอะไรคะ?
คือไม่ได้สร้าง database ใน php แต่ไปสร้างใน mysql พอใช้คำสั่ง include ดึงหน้าที่เชื่อมดาต้าเบตไว้มาทำไมถึงยังมีปัญหา?
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 17:50:50 By : ny2003
 


 

No. 7



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


Code (PHP)
if(in_array($st,array(1,2,3))){
		//ถ้าเป็น admin ให้กระโดดไปหน้า admin_page.php
		header('location: main'.$st.'.php');
}

แก้เป็น
Code (PHP)
switch($st){
case 1: header('location: admin.php'); break;
case 2: header('location: teacher.php'); break;
case 3: header('location: student.php'); break;
default: die('Error');
}

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 18:03:19 By : Chaidhanan
 


 

No. 8



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


ขอโทษนะคะ คือมันไม่ลิ้งค์ไปให้ตรง case 3 น่ะค่ะ พอล็อคอินไปดันขึ้นว่า error หมายความว่าไงคะ? แล้วต้องแก้ตรงไหนถึงจะหาย? มันลิ้งให้ไม่ตรง page อ่ะค่ะ แล้วล็อคอินไป 3 สถานะ อันแรกตรงแล้ว อันที่สองไม่ตรงลิ้งค์ อันที่สามขึ้น error ค่ะ


ประวัติการแก้ไข
2017-12-10 18:26:29
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 18:22:33 By : ny2003
 


 

No. 9



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


เอาโค๊ดที่แก้ไขแล้วมาดูครับ ว่าแก้อะไรไปบ้าง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 19:32:05 By : Chaidhanan
 


 

No. 10



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


Code (PHP)
<?php
if(!(isset($_POST['username']) && isset($_POST['password']))){
die('Login error');
}
require 'connectdb.php';
$hash_paswd = hash_hmac('sha256', $_POST['password'], 'tikde78uj4ujuhlaoikiksakeidke');
$stmt = $dbcon->prepare("SELECT * FROM tb_login WHERE login_username=? AND login_password=? ");
$stmt->bind_param("ss", $_POST['username'], $hash_paswd);
$stmt->execute();
$rs=$stmt->get_result();
if ($rs->num_rows == 1) {
session_start();
$row = $rs->fetch_object();
$_SESSION['login_id'] = $row->login_id;
$st=($_SESSION['login_status'] = $row->login_status) + 1;
switch($st){
case 1: header('location: main1.php'); break;
case 2: header('location: main2.php'); break;
case 3: header('location: main3.php'); break;
default: die('Error');
}

}
echo "ผู้ใช้หรือรหัสผ่านไม่ถูกต้อง";
?>


แล้วก็สร้างหน้า connectdb ไว้อีกหน้านึงอ่ะค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 20:07:06 By : ny2003
 


 

No. 11



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


Code (PHP)
// บันทัด 13
$row = $rs->fetch_object();
// เพิ่มตรงนี้เพื่อตรวจสอบ แล้วเอา report มาดูหน่อยครับ
var_dump($row); exit;

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 21:05:52 By : Chaidhanan
 


 

No. 12



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


report นี่คือหลังจากที่รันรึเปล่าคะ?
รัน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 21:24:08 By : ny2003
 


 

No. 13



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


ผมเอามาลองทดสอบดูก็ถูกต้องนะครับ
Code (PHP)
<?php
$url='';
if(isset($_POST['username'])){
	// ถ้าใช้ mysql_prepare ก็ไม่ต้องใช้ real_escape_string
	// ตรวจสอบตัวแปร post
	if(!(isset($_POST['username']) && isset($_POST['password']))){
		die('Login error');
	}
	require 'connectdb.php';
	$hash_paswd = hash_hmac('sha256', $_POST['password'], 'tikde78uj4ujuhlaoikiksakeidke');
	$stmt = $dbcon->prepare("SELECT * FROM tb_login WHERE (login_username=? AND login_password=? )");
	$stmt->bind_param("ss", $_POST['username'], $hash_paswd);
	$stmt->execute();
	$rs=$stmt->get_result();

	if ($rs->num_rows == 1) {
		session_start();
		$row = $rs->fetch_object();
		//var_dump($row);exit;
		$_SESSION['login_id'] = $row->login_id;
		$st=($_SESSION['login_status'] = $row->login_status) + 1;
		switch($st){
		case 1: $url = "admin_page.php"; break;
		case 2: $url = "techer_page.php"; break;
		case 3: $url = "student_page.php"; break;
		default: $url = '--';		
		}
	}	
}
?>
<!doctype html>
<html>
<head>
	<title>Test Last query</title>
	<meta charset="utf-8">
	</head>
<body>
url: <?=$url?><br>
	<form action="" method="post" >
		<input type=text name=username  
			value="<?=(isset($_POST['username']) ?  $_POST['username'] : '')?>"  ><br/>
		<input type=password name=password 
			value="<?=(isset($_POST['password'])?  $_POST['password'] : '')?>" ><br/>
		<button>Login</button>
	</form>
</body>
</html>



ประวัติการแก้ไข
2017-12-10 22:18:40
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 22:13:53 By : Chaidhanan
 


 

No. 14



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


ได้แล้วค่ะๆ ขอบพระคุณเป็นอย่างสูง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-12-10 22:41:23 By : ny2003
 


 

No. 15

Guest


งงง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-08-19 23:14:51 By : hh
 


 
ขออนุญาตสอบถามครับ แนวคิดผมคือ เมื่อ login ในสถานะ superadmin แล้ว สร้าง ผู้ใช้ สถานะ admin หลายๆ อัน และ admin 1 สิทธิ์ สามารถสร้าง user ได้ ซึ่ง user 1 สิทธิ์ เมื่อทำอะไรต้องอยุ่ภายใต้ group ของ admin ที่สร้าง อยากทราบว่า ทำอย่างไรครับ รบกวนตอบกลับ ทาง email : [email protected]
ู้
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-03-27 19:48:20 By : อาทิตย์
 


 

No. 17



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


กำหนดชื่อวิลิสมาหราจัง 55555
usertype ที่เคยใช้ admin manager assistance staff ก็มี trustee ตามลำดับชั้น
เพิ่มtrustee สามารถ create user เข้าไปอีกอัน พอสร้าง ก็สามารถ กำหนด สิทธิ์ ที่มีให้กับ user ใหม่ได้
หลักการก็มีแค่นั้น ที่เหลือก้ใส่โค๊ด เข้าไป

advance code แบบนี้ ถ้าอยากได้โค๊ดโดยไม่ต้องเขียนเอง หรือเสียเงิน ก็ขยันหาเอาหน่อย

เฉพาะโมดูลนี้ ก็หลายตังอยู่นะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-03-28 07:01:41 By : Chaidhanan
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : [PHP] สร้าง log in แบบแบ่งสถานะ(USER,ADMIN)ยังไงคะ?
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่