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

Registered : 108,450

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 : 6025 Reply : 15
 

 

No. 1



โพสกระทู้ ( 3,962 )
บทความ ( 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,230 )
บทความ ( 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



โพสกระทู้ ( 8,682 )
บทความ ( 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



โพสกระทู้ ( 8,682 )
บทความ ( 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



โพสกระทู้ ( 8,682 )
บทความ ( 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



โพสกระทู้ ( 8,682 )
บทความ ( 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



โพสกระทู้ ( 8,682 )
บทความ ( 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
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
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: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม , รับทำบัญชี , โรงงานผลิตครีม , สำนักงานบัญชี , รับจดทะเบียนบริษัท , Pangpond , รถมือสอง

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